3

새로운 객체를 생성해야 일부 노드는 구조의 다른 노드에 대한 참조를 필요로합니다. 참조를 가져 오는 데 필요한 정보는 런타임에 변경 될 수 있으며 노드 객체가 생성 될 때 반드시 사용할 수있는 것은 아닙니다. 기본적으로이 메소드 서명은 동일하게 보이며 Get(int id)입니다. 이번에는 새 객체를 만들어야하지만 기존 객체를 반환해야합니다.이 공장은 항상 우리가 모든 노드는 노드가 나중에 순간 <code>Get(int id)</code></p> <p>를 사용하여 자식 노드를 만들 수 있도록 공장 주입 <code>public Node(INodeFactory nodeFactory)</code> 노드 기본 클래스에서 파생 된 계층 구조를 가지고

첫 번째 시도는 노드를 검색 할 INodeLocator을 전달하는 것이 었습니다. 우선 우리는 'locator'가 좋은 이름인지, 여기에 패턴이 없는지, 어쩌면 리포지토리 패턴을 놓쳤는 지 확신하지 못한다. 두 번째로 메소드 서명이 동일하다는 사실을 알았습니다.

초기 트리가 생성 된 후에 공장을 '생성'모드에서 '조회'모드로 전환하는 것을 고려했지만 나중에 노드를 생성해야하므로 작동하지 않습니다.

'locator'로직에 대해서는 노드를 검색 (반복) 할 생각 이었지만 평면 사전에서 추적하는 것이 더 나을 수도 있습니다. 그러나 공장이 사전에 추가 할 수 있지만 수명을 관리하지 못하는 문제가 발생합니다. 노드가 제거되면 어떻게 될 것입니다.

이 문제를 어떻게 적절하게 디자인 할 수 있습니까?

+0

질문이 맞는 곳이 아닙니다. softwareengineering.stackexchange.com –

+0

https://meta.stackoverflow.com/questions/254570/choosing-between-stack-overflow-and-software-engineering I을 읽고 나 네 말이 맞는 것 같아. 나는 결코 거기에 게시하지 않았습니다. 이 내용을 삭제해야합니까? –

+0

삭제해야한다고 생각합니다. 좋은 질문이긴하지만 소프트웨어 엔지니어링을 살펴 본다면 .stackexchange.com에 가까운 옵션이 없습니다. –

답변

0

이름으로 두 함수를 구별하고 "공장"에 두 가지를 모두 추가하십시오 (이름이 다를 수 있음). 예 :

public interface INodeFactory 
{ 
    // creates a new Node and returns it 
    Node Create(int id); 

    // retrieves an existing node 
    Node Get(int id); 

    // deletes a Node 
    void Delete(int id); 
} 

구현 키를되는 ID 및 노드 게다가 이미 값이 삭제되었는지 표시와 함께, 내부의 어떤 사전을 유지한다.

갓 생성 된 노드를 여기에 저장할 수 있으므로 쉽게 불일치를 피할 수 있으므로 두 클래스를 한 클래스에 유지하는 것을 선호합니다.