假设我有一组从模板生成文档的类。例如......
class CustomerInvoice
{
public satic string TemplatePath
{
get { return @"C:\Templates\InvoiceTemplate.doc"; }
}
public static DocumentType DocumentType
{
get { return DocumentType.WordDocument; }
}
public static void Create(Customer customer, int orderNumber)
{
//...
}
}
所有这些类共享相同的方法名称,但不一定是方法签名。
例如,我可能有
CustomerInvoice.Create(Customer customer, int orderNumber);
DespatchNote.Create(Customer customer, int orderNumber, Warehouse warehouse);
PackingLabel.Create(int orderNumber);
...或其他任何事情(努力想出合理的例子)。
OO中是否有一种机制可以指定一组类以这种方式命名的方法?我真的想要有一种方法来强制执行一组相似对象的一致实现和命名,因此它们对于消费者来说更直观。像这样的案例会被认为是对任何此类技术的有效/有价值的使用吗?
答案 0 :(得分:3)
不,没有构造。静态方法特别是无法强制执行任何共性。如果是接口,则可以使用Create(object)
或Create(T)
(对于通用接口上定义的某些T),并使用单个参数来表示te状态。
答案 1 :(得分:2)
一组相似对象的一致实现和命名,因此它们对消费者更直观
由于您正在讨论确保API的 public 接口符合某个系统,我认为不一定会有任何OOP结构可以提供帮助。
然而,可能有用的是用于控制样式和设计的许多工具中的任何一个。我正在考虑像StyleCop,FxCop和NDepend这样的东西,所有这些都允许创建自定义规则(带来不同程度的痛苦!)。特别是,NDepend允许您按照
的方式设置代码查询语言规则WARN IF Count == 0 IN SELECT METHODS WHERE NameIs "Create" AND IsStatic
如果任何特定类没有名为Create
的静态方法(任何签名),(应用于合适的命名空间)会发出警告