Диаграмма классов для простого приложения - PullRequest
1 голос
/ 03 марта 2012

Предположим, у нас есть 3 объекта: библиотека, раздел и книга.

A Library состоит из нескольких Sections. A Section имеет несколько Books.

A Book может принадлежать только 1 Section. И, наконец, Section может принадлежать только 1 Library.

На мой взгляд, класс Library агрегирует набор Sections, а класс Section агрегирует набор Books.

Теперь мне нужно загрузить все книги на сервер. Я строю класс BookUploader, который принимает объект Book в своем конструкторе. На сервере я создал папку для каждой библиотеки, а внутри каждой библиотеки я создам папку Раздела и поместу в нее Книгу.

Проблема в том, что, поскольку я передал объект Book в BookUploader, я понятия не имею, что это за раздел. Кроме того, я не знаю, какой раздел принадлежит какой библиотеке.

Поэтому я подумал, что я просто передам объект Library в BookUploader, затем зациклю весь раздел, затем зациклю все книги в каждом разделе, но кто-то сказал мне, что теперь BookUploader зависит от 3 классов для загрузки Book, что является плохим дизайном.

Он предположил, что каждый объект Книги должен содержать свой раздел, а каждый раздел должен содержать свою библиотеку, что полностью противоположно моему первоначальному дизайну.

Кто-нибудь может поделиться своими мыслями о том, какой дизайн лучше и почему?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 04 марта 2012

Нет ничего плохого в том, чтобы определять агрегацию как один конец двунаправленной ассоциации. (Смотрите здесь или здесь для примеров.)

Если вам нужны подробности реализации, смотрите, например, в ecore EOppverse в EReferences.

0 голосов
/ 04 марта 2012

Прочитав комментарий Чеда, я понял, что сам дизайн нуждается в некоторых модификациях для рассматриваемых сущностей. в каждом дочернем классе отсутствовала функция, которая возвращала бы ссылку на своего родителя.

...