Я сейчас застрял между молотом и наковальней, пытаясь выбрать хороший макет API для проекта оболочки .NET COM, над которым я работаю. Это в основном проблема дизайна и что будет работать лучше.
Итак, у меня есть этот 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-объекту.
Считаете ли вы, что какой-либо из этих шаблонов имеет какой-либо кредит в этой ситуации?
Я беспокоюсь, что если у меня есть два разных точечных объекта, это может сбить пользователя с толку, но опять же, шаблон строителя на самом деле не настолько дружелюбен, хм, что делать.
Конечно, точечный объект - это самый простой объект, который мне нужно создать, есть намного больше объектов, которые немного сложнее.
Спасибо.