또 다른 접근법은 문제의 대상에서 관계를 이동시키는 것입니다. 여러 번 A도 B도 서로에 대해 알 필요가 없습니다. 편리한 코드를 사용하는 코드입니다. 그래프 또는 양방향지도가 작동 할 수있는 곳입니다.
일대일 관계를 추적하기 위해 양방향 맵을 사용하는 것이 일반적입니다. 그래프는 다른 유형의 카디널리티 (대다수, 다 대다, 등)를 추적하는 데 훨씬 뛰어날 수 있습니다.
그 목적을 달성 할 수있는 몇 가지 다른 그래프 구현이 있습니다. 나는 들어 본 적이 있지만 JGraphT를 사용하지는 않았으며, Plexus (IOC 컨테이너와 관련이 없음)라는 많은 것을 사용했습니다. http://jgrapht.sourceforge.net/ 및 http://plexus.sf.net/입니다.
그래프는 서로 다른 관계가 정의되고 양방향 링크가 암시 적으로 유지되는 방식을 완벽하게 융통성있게 해주기 때문에 좋습니다.
관계의 양측이 동기화 상태를 유지해야한다는 사실은 종종 관계 자체가 종단점과 동등한 중요성을 가지며 각 쪽이 캡슐화하려고 시도해야하는 것이 아니라는 신호입니다.
부모와 자식이 실제로 일 때이 서로 작동해야하는 경우 한 가지 방법은 어느 것이 기본인지와 모든 작업을 해당 개체를 통해 수행 할 수 있는지 여부입니다. 예를 들어 부모 자식 관계에서 자식 작업은 부모 작업이 수행되는 동안 부모 작업이 자식 작업에 대한 참조를 전달할 수 있습니다. 나는 당신이 할 수 없다면 어떤 선들이 디자인에 다시 그릴 필요가 있다는 것을 좋은 지표라고 주장 할 것이다.
다시 부모 - 자식 예제를 사용하여 부모 -> 자식 관계와 자식 -> 부모 관계가 너무 동적이어서 한쪽 끝이 제어 할 수없는 경우를 찾지 못했습니다. 그리고 시간의 99 %는 내가 보조에서 기본으로 백 레퍼런스를 유지하는 것이고, 이는 편의를위한 것이며 관계의 수명주기가 잘 정립되어 있습니다.
... 그렇지 않으면 그래프를 사용합니다.
"코드를 작성하면 양쪽에서 연결을 최신 상태로 유지할 수 있습니다. 매우 지루하고 오류가 있습니다." 왜 그런 말을 해? 이것은 일반적으로 전혀 어렵지 않습니다. –
내 모든 모델 클래스에 동일한 기능을 추가해야하기 때문에 지루합니다. 나는 이것이 꽤 반복적 인 일이라고 생각한다. Errorprone. 특별한 경우를 염두에 두어야하기 때문에. 예 : B의 부모를 A의 다른 인스턴스로 설정하면 (A를 다른 A로 B를 전송하는 경우) 어떻게됩니까? 이전 링크가 제거되었는지 확인해야합니다. 그러나 같은 부모를 두 번째로 설정하면 어떨까요? 그런 다음 코드는 이미 존재하는 링크를 건드려서는 안됩니다. 기타 물론이 문제를 해결하는 것이 불가능하지는 않지만, 이미이 문제에 대한 해결책이있는 경우 왜 바퀴를 다시 만들어야합니까? – Damian