小编fro*_*h42的帖子

命名类 - 如何避免将所有内容称为"<WhatEver> Manager"?

很久以前我读过一篇文章(我相信一篇博客文章),它让我在命名对象的"正确"轨道上:非常谨慎地命名程序中的东西.

例如,如果我的应用程序(作为一个典型的业务应用程序)处理用户,公司和地址我有一个User,一个Company和一个Address域类 - 可能在某个地方UserManager,一个CompanyManager和一个AddressManager会弹出来处理这些事情.

所以,你可以告诉那些UserManager,CompanyManagerAddressManager做什么?不,因为Manager是一个非常通用的术语,适用于您可以对域对象执行的任何操作.

我读过的文章建议使用非常具体的名称.如果它是一个C++应用程序并且该UserManager工作正在分配并从堆中释放用户,那么它将不会管理用户,而是保护他们的出生和死亡.嗯,也许我们可以称之为UserShepherd.

或者可能UserManager的工作是检查每个User对象的数据并以加密方式对数据进行签名.然后我们有一个UserRecordsClerk.

现在这个想法一直困扰着我,我尝试应用它.并且发现这个简单的想法非常难.

我可以描述这些类的功能和(只要我不进入快速和脏编码)我写的类只做件事.我想念从名称到名称的是一种名称目录,一种将概念映射到名称的词汇表.

最终,我想在我的脑海里有类似图案目录的东西(通常设计图案很容易提供对象名称,例如工厂)

  • Factory - 创建其他对象(从设计模式中获取命名)
  • 牧羊人 - 牧羊人处理物体的生命,它们的创建和关闭
  • 同步器 - 在两个或多个对象(或对象层次结构)之间复制数据
  • 保姆 - 帮助对象在创建后达到"可用"状态 - 例如通过连接到其他对象

  • 等等

那么,你如何处理这个问题呢?你有一个固定的词汇表,你是否动态发明新的名字,或者你认为命名的东西不是那么重要或错误?

PS:我也对链接​​到讨论这个问题的文章和博客感兴趣.首先,这是让我思考它的原始文章:在没有"经理"的情况下命名Java类


更新:答案摘要

以下是我在此期间从这个问题中学到的内容的一些总结.

  • 尽量不要创造新的比喻(保姆)
  • 看看其他框架做了什么

关于这个主题的进一步文章/书籍:

以及我从答案中收集的主观名称前缀/后缀的当前列表:

  • 协调员
  • 生成器
  • 作家
  • 读者
  • 处理器
  • 容器
  • 协议
  • 目标 …

oop naming design-patterns naming-conventions

1147
推荐指数
11
解决办法
20万
查看次数

在PowerShell中等效于C#的"using"关键字?

当我在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)

每时每刻.

.net powershell powershell-2.0

74
推荐指数
6
解决办法
4万
查看次数

Apple PNS(推送通知服务)示例代码

是否有一个示例项目展示了如何在iPhone上使用APNS以及如何设置内容?我目前正在查看文档,但是有一些工作代码可以分开并看看它们如何一起工作会很好吗?

我似乎无法使用谷歌或在iPhone开发中心找到任何东西.

iphone push-notification

51
推荐指数
5
解决办法
9万
查看次数

C#/ VS2008:为项目添加单独的调试/发布引用

将用户控件或项目引用添加到VS 2008 C#项目时,我只能添加一个程序集配置.是否可以添加单独的配置,具体取决于容器项目的配置.

例如,我正在开发用户控件,我正在开发一个示例应用程序.我想添加用户控件,以便示例的调试版本将使用用户控件的调试版本,以及示例的发布版本和用户控件的版本构建.

有什么建议?

c# project visual-studio-2008

33
推荐指数
3
解决办法
7994
查看次数

如何改变存根的行为?

我可以在运行时更改存根的行为吗?就像是:

    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(...).

啊,可能我只是需要硬拷贝的精美手册让某人用它来击打我.它看起来应该很明显,但我找不到它.

c# unit-testing rhino-mocks

18
推荐指数
1
解决办法
6122
查看次数

如何在后台线程运行时阻止Winforms UI

我继承了一个Winforms应用程序,该应用程序从UI线程向应用程序服务器执行大量长时间运行的调用,因此UI在相当长的一段时间内保持无响应,无法使用,无法使用.(这让我真的去了AAAAAAAAARGH!)

我计划将服务器调用移动到后台线程并禁用UI - 但可移动和可关闭 - 而后台线程完成其工作.

那么什么是禁止用户输入我的应用程序的最佳方法?我正在考虑"模态进度对话框",但我更喜欢一种不会强迫我将视觉投射到用户面前的解决方案(某些服务器操作在不到500毫秒内运行,因此对话框不是最佳的...)

在Winforms中是否有任何方法可以阻止用户启动操作或更改应用程序中的数据,同时通过一些选择(调整大小,显示,隐藏和家庭以及关闭窗口的用户)?我更喜欢一种不会让我访问表单中的每个UI元素并将其设置为禁用的方式...它们中有很多并且该应用程序确实"在UI设计器中被黑客攻击,直到它显示出华而不实的东西"源代码的风格.在发布日期之前,没有办法重构每个有臭味的东西......

哦,顺便说一下,这个应用程序存在于.net框架2中

.net multithreading .net-2.0 winforms

10
推荐指数
2
解决办法
6171
查看次数

如何从C#中的文件/流中读取Pkcs#7证书链?

我有两个证书保存到磁盘.一个是带有私钥的证书,我将其导出为.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(它包含链,而不是单个证书!),但是如何?

(哦,顺便说一句:目前我对这些证书没有密码)

c# x509certificate2 pkcs#7

5
推荐指数
1
解决办法
2万
查看次数

在一行 SQL 中有条件地创建全文目录(来自安装程序)

我正在构建一个使用 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 表中(以及它是哪个表?)

installation full-text-search sql-server-2005

2
推荐指数
1
解决办法
1744
查看次数