2011-09-02 3 views
4

내 API를 디자인하는 동안 다음과 같은 동작을 어떻게 모델링하고 싶은지 생각하고 있습니다.API 디자인 질문

옵션 1이 더 논리적 인 것처럼 보이지만 스프레드 시트가 실제로 통합 문서에 속하는지 확인하는 것과 같은 불변식이 적용됩니다.

옵션 2는 스프레드 시트에서 스프레드 시트를 제거하는 방법을 알고 있지만 사실 스프레드 시트에는 부모 통합 문서에 대한 참조가 있으며 직접 전화를 위임 할 수 있습니다.

또는 실제로 통합 문서가 스프레드 시트의 유효성을 검사해야하므로 유효하지 않습니다. 생각?

Workbook wb = new Workbook("Finances"); 
Spreadsheet ss = wb.CreateSpreadsheet("Bob's"); 

// option 1: 
wb.RemoveSheet(ss); 

// option 2: 
ss.RemoveFromWorkbook(); 

내가 wb.Sheets.Remove (SS)를 사용하는 것이 당신에게 모두

+0

왜 둘 다 있지 않습니까? 옵션 2는 단순히 옵션 1을 호출 할 수 있거나 그 반대 일 수 있습니다. – Reddog

답변

9

감사드립니다. Sheets 객체는 스프레드 시트의 모음이므로 책임을 분리 할 수 ​​있습니다. 또한 나중에 시트가 여러 통합 문서에 포함될 수 있다는 개념을 허용합니다.

+0

Aaaaaah, option 3 ... 나는 그걸 보지 못했다 :) – Reddog

+0

은 멋지게 잘 들어 맞을 것이지만 그 방법으로 공개적으로 컬렉션을 노출하지는 않는다. – Marco

+0

그런 다음 wb.RemoveSheet (ss) 메서드를 사용하는 것이 좋습니다. –

0

분명히 1입니다.

wb.CreateSpreadsheet가 있으므로 이미 사용했다면 wb 객체의 remove 함수를 찾고있을 것입니다.

1

생각해 보면 옵션 1을 사용하는 것이 좋습니다. 모든 하위 컨테이너에서 하위 엔티티를 제거해야 할 때마다 먼저 컨테이너를 참조하고 엔터티의 일부 멤버를 검색해야하기 때문입니다. 그 자체.

1

옵션 1을 사용할 것입니다. 통합 문서를 컬렉션 또는 열거 형으로 생각하십시오. 모든 컬렉션과 마찬가지로 통합 문서 작업의 일부는 해당 컬렉션 내의 항목을 관리하는 것입니다. 통합 문서에서 시트를 추가 및 제거하는 것은 시트가 아니라 통합 문서의 책임입니다.

1

통합 문서는 워크 시트가 포함 된 것으로 개인적으로는 option 1으로 머무를 것이므로 일종의 컨테이너입니다. 따라서 워크 시트를 제거하기 위해서는 통합 문서 개체를 사용하는 것이 더 자연스럽고 자연스러운 IMHO입니다.

0

옵션 1 :

은 시트, 당신은 '디커플링'찾아해야 모든 통합 문서에 대해 알고 안된다!