저는 트리 구조의 저장소에서 작업하고 있으며 현재 트랜잭션 구조를 사용하여 트리 구조를 수정하고 있습니다. 나는 항상 Command Pattern을 사용하는 것이 적절하다고 생각했다. 그러나 난 그냥 작은 동작을 변경하고 난 (() 속성을 제외하고 삽입 된 노드에있는 트랜잭션 인스턴스를 반환)을 좋아한다 :API 디자인/명령 패턴 대 "일반 구현"
wtx.insertText(EInsert.ASRIGHTSIBLING, "value").insertElement(EInsert.ASRIGHTSIBLING, new QName("bla").insertElement(EInsert.ASFIRSTCHILD, new QName("blubb")).insertAttribute(new QName("foo"), "bar").insertAttribute(new QName("bar"), "foo"));
을 나는이 방법은 아주 좋은 작업을 체인 생각하지만, 우리의 트랜잭션을 제공 현재 트랜잭션 인스턴스 대신 부울 값을 반환하는 트리 (moveTo(long)
, moveToParent()
,......)의 메서드와 같은 커서가 있지만이 방법을 피할 수는 없다고 생각합니다. 내가 조금 더 장황
new InsertText(EInsert.ASRIGHTSIBLING, "value").execute(wtx);
new InsertElement(EInsert.ASRIGHTSIBLING, new QName("bla")).execute(wtx);
...
만 아니라, 그것은 것 "지원"오픈 될 것이라고 명령 패턴에 대해 생각하지만 그렇지 않으면 우리는 성가신
wtx.method();wtx.method();wtx.method();
없이 간 이동을 할도 수/정말 좋은 폐쇄 원칙.
그래서 어떻게 생각하십니까?
"빌더 사용의 아이디어는 기본 구현에서 복합 트랜잭션 빌드를 추상화하는 것입니다." 트리 구조 자체는 거대한 복합 객체입니다 ("포인터"포함). 노력할만한 가치가 있는지 확신 할 수 없습니다. 우리는 내부적으로 메소드를 자주 사용했기 때문에 많은 코드를 다시 작성해야합니다. 그러나 운좋게도 우리는 지금 현재 외부 사용자가 없습니다 ;-) 그래서 나는 거의 모든 것을 바꿀 수 있고 깨끗한 멋진 API를 제공하고자합니다. – Johannes
BTW : 일반적으로 XML 문서에서 가져온 일종의 가져 오기를 사용하고 Java API 또는 어쩌면 XQuery 업데이트 등으로 일부 변경을 수행 할 수 있습니다. – Johannes
@Johannes - 복합체는 일반적으로 빌더를 사용하여 작성됩니다. 따라서 트리 구조가 문서 또는 단일 데이터 소스가 아닌 복합 객체로 간주되는 한 고려해 볼 가치가 있습니다. 아이디어는 적절한 구성을 보장 할 수 있도록 감독관에게 구성을 추상화하는 것입니다. – Joe