很久以前我读过一篇文章(我相信一篇博客文章),它让我在命名对象的"正确"轨道上:非常谨慎地命名程序中的东西.
例如,如果我的应用程序(作为一个典型的业务应用程序)处理用户,公司和地址我有一个User
,一个Company
和一个Address
域类 - 可能在某个地方UserManager
,一个CompanyManager
和一个AddressManager
会弹出来处理这些事情.
所以,你可以告诉那些UserManager
,CompanyManager
和AddressManager
做什么?不,因为Manager是一个非常通用的术语,适用于您可以对域对象执行的任何操作.
我读过的文章建议使用非常具体的名称.如果它是一个C++应用程序并且该UserManager
工作正在分配并从堆中释放用户,那么它将不会管理用户,而是保护他们的出生和死亡.嗯,也许我们可以称之为UserShepherd
.
或者可能UserManager
的工作是检查每个User对象的数据并以加密方式对数据进行签名.然后我们有一个UserRecordsClerk
.
现在这个想法一直困扰着我,我尝试应用它.并且发现这个简单的想法非常难.
我可以描述这些类的功能和(只要我不进入快速和脏编码)我写的类只做一件事.我想念从名称到名称的是一种名称目录,一种将概念映射到名称的词汇表.
最终,我想在我的脑海里有类似图案目录的东西(通常设计图案很容易提供对象名称,例如工厂)
保姆 - 帮助对象在创建后达到"可用"状态 - 例如通过连接到其他对象
等等
那么,你如何处理这个问题呢?你有一个固定的词汇表,你是否动态发明新的名字,或者你认为命名的东西不是那么重要或错误?
PS:我也对链接到讨论这个问题的文章和博客感兴趣.首先,这是让我思考它的原始文章:在没有"经理"的情况下命名Java类
以下是我在此期间从这个问题中学到的内容的一些总结.
关于这个主题的进一步文章/书籍:
以及我从答案中收集的主观名称前缀/后缀的当前列表:
当我在C#中的.net-Framework中使用另一个对象时,我可以使用using指令节省大量的输入.
using FooCompany.Bar.Qux.Assembly.With.Ridiculous.Long.Namespace.I.Really.Mean.It;
...
var blurb = new Thingamabob();
...
Run Code Online (Sandbox Code Playgroud)
那么在Powershell中有一种方法可以做类似的事情吗?我正在访问很多.net对象,并且不喜欢打字
$blurb = new-object FooCompany.Bar.Qux.Assembly.With.Ridiculous.Long.Namespace.I.Really.Mean.It.Thingamabob;
Run Code Online (Sandbox Code Playgroud)
每时每刻.
是否有一个示例项目展示了如何在iPhone上使用APNS以及如何设置内容?我目前正在查看文档,但是有一些工作代码可以分开并看看它们如何一起工作会很好吗?
我似乎无法使用谷歌或在iPhone开发中心找到任何东西.
将用户控件或项目引用添加到VS 2008 C#项目时,我只能添加一个程序集配置.是否可以添加单独的配置,具体取决于容器项目的配置.
例如,我正在开发用户控件,我正在开发一个示例应用程序.我想添加用户控件,以便示例的调试版本将使用用户控件的调试版本,以及示例的发布版本和用户控件的版本构建.
有什么建议?
我可以在运行时更改存根的行为吗?就像是:
public interface IFoo { string GetBar(); }
[TestMethod]
public void TestRhino()
{
var fi = MockRepository.GenerateStub<IFoo>();
fi.Stub(x => x.GetBar()).Return("A");
Assert.AreEqual("A", fi.GetBar());
fi.Stub(x => x.GetBar()).Return("B");
Assert.AreEqual("B", fi.GetBar()); // Currently fails here
}
Run Code Online (Sandbox Code Playgroud)
我的代码示例仍然在给定的行中失败,fi.GetBar()
仍然返回"A"
.
或者是否有另一种技巧来模拟其行为随时间变化的存根?我宁愿不求助于使用fi.Stub(...).Do(...)
.
啊,可能我只是需要硬拷贝的精美手册让某人用它来击打我.它看起来应该很明显,但我找不到它.
我继承了一个Winforms应用程序,该应用程序从UI线程向应用程序服务器执行大量长时间运行的调用,因此UI在相当长的一段时间内保持无响应,无法使用,无法使用.(这让我真的去了AAAAAAAAARGH!)
我计划将服务器调用移动到后台线程并禁用UI - 但可移动和可关闭 - 而后台线程完成其工作.
那么什么是禁止用户输入我的应用程序的最佳方法?我正在考虑"模态进度对话框",但我更喜欢一种不会强迫我将视觉投射到用户面前的解决方案(某些服务器操作在不到500毫秒内运行,因此对话框不是最佳的...)
在Winforms中是否有任何方法可以阻止用户启动操作或更改应用程序中的数据,同时通过一些选择(调整大小,显示,隐藏和家庭以及关闭窗口的用户)?我更喜欢一种不会让我访问表单中的每个UI元素并将其设置为禁用的方式...它们中有很多并且该应用程序确实"在UI设计器中被黑客攻击,直到它显示出华而不实的东西"源代码的风格.在发布日期之前,没有办法重构每个有臭味的东西......
哦,顺便说一下,这个应用程序存在于.net框架2中
我有两个证书保存到磁盘.一个是带有私钥的证书,我将其导出为.pfx文件,另一个是我保存的证书,包括其证书链作为PKCS#7文件("certchain.p7b").
在C#中,我现在可以加载.pfx文件
var cert = new X509Certificate2(myPfxFileStream);
Run Code Online (Sandbox Code Playgroud)
(myPfxFileStream是FileStream
打开到.pfx文件进行读取),但是对于PKC#7证书尝试相同的事情在CryptoGraphicException
"Der Indexwertistungültig"中失败,这转换为"无效索引值".
我假设我必须以不同方式解析PKCS#7(它包含链,而不是单个证书!),但是如何?
(哦,顺便说一句:目前我对这些证书没有密码)
我正在构建一个使用 WiX 的安装程序(没有关键字,因为 WiX 不是这里的问题),它将为 SQL Server Express 2005 高级服务数据库创建全文索引。
到现在我都用SQL
CREATE FULLTEXT CATALOG Foobar in path 'c:\Whereever'
Run Code Online (Sandbox Code Playgroud)
现在,安装程序不会在卸载时删除数据库,因为它可能包含有价值的用户数据。现在,当我更新软件时,它会偶然发现已经存在的全文索引的创建。(在安装程序中中止,因为它不能运行那行 SQL)
如果全文索引不存在,我想要做的是有条件地运行该行。我希望像
IF NOT EXISTS(SELECT * from sys.??????? WHERE name = 'Foobar')
CREATE FULLTEXT CATALOG Foobar in path 'c:\Whereever'
Run Code Online (Sandbox Code Playgroud)
(我刚刚在 stackoverflow 上看到了类似于我需要的东西)
但是我在哪里(以及如何)找出索引是否记录在 sys 表中(以及它是哪个表?)
c# ×3
.net ×2
.net-2.0 ×1
installation ×1
iphone ×1
naming ×1
oop ×1
pkcs#7 ×1
powershell ×1
project ×1
rhino-mocks ×1
unit-testing ×1
winforms ×1