目前,我陷入了困境,试图为我正在处理的 .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 对象的那个。
你认为这些模式中的任何一个在这种情况下有什么功劳吗?
我担心如果我有两个不同的点对象,它可能会使用户感到困惑,但是构建器模式也不是那么友好,嗯该怎么做。
当然,点对象是我必须创建的最简单的对象,还有很多对象要复杂一些。
谢谢。