現時点では、私が取り組んでいる.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つの異なるポイントオブジェクトがあると、ユーザーを混乱させる可能性がありますが、ビルダーのパターンはあまり面白くないことが心配です。
もちろん、ポイントオブジェクトは私が作成しなければならない最も単純なオブジェクトです。さらに複雑なオブジェクトがたくさんあります。
ありがとうございました。