2009-07-10 4 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. 
    } 
} 

또는 빌더 패턴을 사용하여, 같은 :

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 개체로 돌아가는 코드를 다시 가져옵니다.

이러한 패턴 중 하나라도이 상황에서 어떤 신용도 있다고 생각하십니까?

두 개의 서로 다른 점 객체가 있으면 사용자를 혼란스럽게 할 수 있지만 다시 빌더 패턴이 무엇을해야하는지 걱정하지 않습니다.

물론 포인트 객체는 내가 만들어야하는 가장 간단한 객체입니다. 더 복잡한 객체가 많이 있습니다.

감사합니다.

답변

1

저는 Builder와 Factory 패턴을 결합한 다음 Refactoring Pattern book에 "Adapter with interfaces"를 적용 할 수 있다고 생각합니다. 내가 잘못한 방향으로 가면 나에게 정정 해주세요. 언급했듯이, Point (?)를 기반으로 복잡한 다른 객체를 만들 것입니다.

최상위 레벨 작성기로 AbstractBuilder를 만들 수 있습니다. AbstractBuilder의 각 하위 클래스는 공통 인터페이스 (COMPoint 인터페이스 일 수 있음)가있는 복잡한 객체를 생성합니다.

그런 다음 Factory 패턴을 적용하여 AbstractBuilder 하위 클래스에서 객체를 만들 수 있습니다. 각 포인트 객체는 COMPoint 인터페이스이거나 다른 객체를 사용하는 경우 다른 인터페이스를 구현하는 어댑터 객체 일 수 있습니다.

도움이되기를 바랍니다.

관련 문제