2010-12-30 7 views
3

テンプレートからドキュメントを生成するクラスのグループがあるとします。たとえば...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には、このようにしてクラスのグループが持つメソッド名を指定するメカニズムがありますか?私は、一貫した実装と同様のオブジェクトのグループの命名を実施する方法を持っていることを本当に考えているので、消費者にとってより直感的です。このようなケースは、そのようなテクニックの有効で価値のある使用とみなされますか?

+0

特定のルールについては、リフレクションチェックを使用できます。しかし、可能であれば、私はジェネリックスベースのソリューションMarcが提案した – CodesInChaos

答えて

3

いいえ、それのための構成はありません。静的メソッド特にには共通性を強制する方法がありません。もしあなたがCreate(object)またはCreate(T)(ジェネリックインターフェイスで定義されたいくつかのT)のようなものを持っていて、teの状態を表すための単一のパラメータを取ることができたのは、インターフェイスだった。

2

一貫した実装と類似したオブジェクトのグループをaccross命名ので、彼らはあなたのAPIの公共インタフェースを確保する話をしているので、消費者

ため、より直感的には、特定のシステムに準拠、私は必ずしもOOPの構築に役立つとは思えません。

のデザインを制御するツールのいずれかが役立つでしょうか。私はStyleCop、FxCop、NDependのようなものを考えています。これらはすべてカスタムルールの作成を可能にします(痛みの量が変わります)。特に、NDependのは、任意の特定のクラスは、すべての署名の静的メソッドを(持っていなかった場合は警告するでしょう(適した名前空間に適用される)

WARN IF Count == 0 IN SELECT METHODS WHERE NameIs "Create" AND IsStatic 

の線に沿ってコードクエリ言語のルールを設定することができるようになります)名前付きCreate

+0

私はNDepend、おかげで調べるでしょう。 – fearofawhackplanet

関連する問題