我目前正在努力为我正在研究的.NET COM包装器项目确定一个良好的API布局,因此陷入困境之中。这主要是一个设计问题,什么会更好。
所以我有这个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.
}
}
或使用构建器模式,例如:
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对象的那个。
你认为这种模式中的任何一种都有这种情况吗?
我很担心,如果我有两个不同的点对象,可能会让用户感到困惑,但是再次构建器模式也不是那么友好,无论做什么。
当然,点对象是我必须创建的最简单的对象,还有更多的对象更复杂。
感谢。
答案 0 :(得分:1)
我相信您可以组合Builder和Factory模式,然后您可以在Refactoring Pattern书中应用“Unify接口与适配器”。如果我出错方向,请纠正我。如您所述,您将基于Point(?)创建复杂的不同对象。
您可以创建AbstractBuilder作为顶级构建器,AbstractBuilder的每个子类将负责使用公共接口(可能是COMPoint接口)创建复杂对象。
之后,您可以应用Factory模式从子类AbstractBuilder创建对象。如果使用不同的对象,则每个点对象可以是COMPoint接口或实现不同接口的适配器对象。
我希望它有所帮助。