C# 如何以比C中的接口更宽松的方式定义模板#
假设我有一组从模板生成文档的类。例如C# 如何以比C中的接口更宽松的方式定义模板#,c#,oop,design-patterns,C#,Oop,Design Patterns,假设我有一组从模板生成文档的类。例如 class CustomerInvoice { public satic string TemplatePath { get { return @"C:\Templates\InvoiceTemplate.doc"; } } public static DocumentType DocumentType { get { return DocumentType.WordDocum
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中是否有一种机制可以指定一组类的方法名称?我真的在想,只要有一种方法来实施一致的实现,并对一组相似的对象命名,这样对消费者来说就更直观了。像这样的案例是否被认为是任何此类技术的有效/有价值的使用?不,没有这样的构想。尤其是静态方法无法强制实现任何通用性。如果is是一个接口,您可以使用类似于
Create(object)
或Create(T)
(对于在通用接口上定义的某些T),并使用单个参数来表示te状态
一致的实现和命名跨一组相似的对象,因此对消费者来说更直观
既然您所说的是确保API的公共接口符合特定的系统,我不认为一定会有任何OOP构造会有所帮助
然而,可能有帮助的是用于控制样式和设计的许多工具中的任何一个。我想到了StyleCop、FxCop和NDepend,所有这些都允许创建自定义规则(痛苦程度各不相同!)。特别是,NDepend允许您按照
WARN IF Count == 0 IN SELECT METHODS WHERE NameIs "Create" AND IsStatic
如果任何特定类没有名为
Create
的静态方法(任何签名),则(应用于合适的名称空间)将发出警告。您可以使用反射检查您的类型以了解某些规则。但如果可能的话,我会选择马克建议的基于泛型的解决方案