2009-07-10 12 views
0

現時点では、私が取り組んでいる.NET COMラッパープロジェクトの優れたAPIレイアウトを決定しようとしています。これは主に設計上の問題で、何がうまくいくのでしょうか。ラッパーライブラリー - POCOを使用したビルダーとファクトリー

だから私は、このCOMポイントオブジェクトを持っている:

public class COMPoint 
{ 
    internal COMPoint(MyComObject comobject) {} 
    public SomeCollection Nodes {get; set;} 
} 

は今、私のCOMオブジェクトに点オブジェクトを作成するために、私はいくつかの文字列コマンドを呼び出す必要がある、と私は困っ決定を抱えている場所ですこれを指摘する。

これでプロパティを持つPOCOを使用して、このような何らかのファクトリメソッドに渡すことを考えました。

public class Point 
{ 
    public SomeCollection Nodes {get;set;} 
} 

public class GeometryFactory 
{ 
    public GeometryFactory(MyComObject comobject) {} 
    public CreateCOMPointFrom(Point point) 
    { 
     // Do COM work here and return new COMPoint. 
    } 
} 

またはBuilderパターンを使用して、のようなもの:

public class COMPoint 
{ 
    internal COMPoint(MyComObject comobject) {} 
    public SomeCollection Nodes {get; set;} 

    public class Builder 
    { 
     public Builder(MyComObject comobject) {} 
     public SomeCollection Nodes {get; set;} 
     public COMPoint Create() 
     { 
     // Do COM work here and return new COMPoint. 
     } 
    } 
} 

またはその両方の組み合わせ:

public class COMPoint 
{ 
    internal COMPoint(MyComObject comobject) {} 
    public SomeCollection Nodes {get; set;} 

    public class Builder 
    { 
     public Builder(MyComObject comobject) {} 
     public SomeCollection Nodes {get; set;} 
     public COMPoint Create() 
     { 
     // Do COM work here and return new COMPoint. 
     } 

     public COMPoint CreateFrom(Point point) 
     { 
     // Set builder properties and call. 
     this.Create(); 
     } 
    } 
} 
POCOを使用しての背後にある考え方は、人々がポイントを作成することができるようにした

古いものを使用しているオブジェクト

Point point = new Point() 
point.Nodes <- Set nodes 

をコードの周りに渡してから、それを構築して、COMオブジェクトに戻ってくるものを取り戻してください。

あなたはこれらのパターンのいずれかがこのような状況でクレジットを持っていると思いますか?

2つの異なるポイントオブジェクトがあると、ユーザーを混乱させる可能性がありますが、ビルダーのパターンはあまり面白くないことが心配です。

もちろん、ポイントオブジェクトは私が作成しなければならない最も単純なオブジェクトです。さらに複雑なオブジェクトがたくさんあります。

ありがとうございました。

答えて

1

ビルダーパターンとファクトリパターンを組み合わせて、Refactoring Patternブックに「アダプタでインターフェイスを統一」を適用できると思います。私が間違った方向に進むと、私を修正してください。あなたが言及したように、ポイント(?)に基づいて複雑な異なるオブジェクトを作成しようとしています。

トップレベルビルダーとしてAbstractBuilderを作成することができます.BusilBuilderの各サブクラスは、共通のインターフェース(COMPointインターフェースかもしれません)を持つ複雑なオブジェクトの作成を担当します。

その後、Factoryパターンを適用して、サブクラスAbstractBuilderからオブジェクトを作成できます。各ポイントオブジェクトは、COMPointインターフェイスまたは異なるオブジェクトを使用する場合は異なるインターフェイスを実装するアダプタオブジェクトにすることができます。

私はそれが役に立ちそうです。

関連する問題