如何以比C#中的接口更松散的方式定义模板

时间:2010-12-30 10:22:57

标签: c# oop design-patterns

假设我有一组从模板生成文档的类。例如......

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中是否有一种机制可以指定一组类以这种方式命名的方法?我真的想要有一种方法来强制执行一组相似对象的一致实现和命名,因此它们对于消费者来说更直观。像这样的案例会被认为是对任何此类技术的有效/有价值的使用吗?

2 个答案:

答案 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

的静态方法(任何签名),

(应用于合适的命名空间)会发出警告