繁体   English   中英

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

[英]How to define a template in a looser way than interfaces in C#

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

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

不,没有构造。 静态方法尤其无法强制执行任何共性。 如果是接口,您可以使用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的静态方法(任何签名),那么(应用于合适的命名空间)会发出警告

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM