Мне дали вариант использования приложения Quizz.Вариант использования предназначен только для создания новых тестов.У меня возникают проблемы с определением, какой дизайн лучше:
a)
альтернативный текст http://dl.dropbox.com/u/6187267/shooterpics/diagram1.jpg
b)
альтернативный текст http://dl.dropbox.com/u/6187267/shooterpics/diagram2.jpg
Хотя это может выглядеть как модель предметной области, на самом деле это диаграмма классов (мне было лениво добавлять методы / атрибуты в диаграммы :().
Идея, лежащая в основе всего этого, заключается в том, чтоУ меня есть QuizCatalog
с Quiz
zes. Каждый Quiz
имеет набор Question
s, который должен быть создан с помощью QuestionFactory
(Question
является абстрактным классом, а QuestionA
,QuestionB
и т. Д. Являются конкретными классами.) Каждый Question
имеет набор PossibleAnswers
.
Разница в терминах ассоциаций между Design A
и Design B
заключается в том, что в первом яучитывая, что CreateQuizController
будет просто делегировать каждую задачу, которую он должен QuizCatalog
. Если QuizCatalog
нужно что-то сделать, он будет делегировать все, что может понадобиться в иерархии. Это на самом деле хорошо, так как кажется, что уменьшает связность.
Design B
, с другой стороны, следует другой философии: ассоциации, наблюдаемые в Design A
, все еще существуютst (поскольку QuizCatalog
по-прежнему имеет Quiz
zes, Question
PossibleAnswer
s и т. д.), но теперь я сделал CreateQuizController
доступ в основном ко всем типам объектов в домене, которые могут понадобиться для созданияв процессе (я сигнализировал такого рода ассоциации с d
).Идея состоит в том, что вместо того, чтобы просить QuizCatalog
создать Quiz
, CreateQuizController
создаст Quiz
сам по себе (и если ему нужно создать Вопросы для Quiz
, он сам по себе будет таким же,происходит Question
PossibleAnwser
и т. д.).
Есть 2 вещи, которые меня беспокоят Design A
:
1.
Если мне нужно создать временные объекты, которые нужно заполнить перед тем, как положить "всистема "(например, Quiz
фактически добавляется к QuizCatalog
только после того, как он был заполнен всеми требуемыми Question
с), следуя этой схеме, мне придется хранить их в каком-то другом месте, кроме Controller
.
Например, когда я впервые создаю Quiz
, мне, вероятно, придется сохранить его в QuizCatalog
, фактически не добавляя его в текущую коллекцию тестов, которая доступна для остальной системы.Я считаю такое поведение немного неловким.Я считаю, что лучше хранить такие временные объекты в Controller
, как будто что-то не так происходит, тогда «Система» сохраняется так же, как и раньше, без проблем.
Проблема в том, чтоэто заставляет Controller
знать почти обо всем, что может быть нежелательно.С другой стороны, нет никакой разницы в том, насколько связаны остальные классы в System
.
2.
Если я собираюсь использовать Дизайн A, я на самом деле нене вижу большого смысла в использовании CreateQuizController, поскольку в принципе все можно сделать, просто имея ссылку на QuizCatalog.На мой взгляд, он просто делегирует всю свою работу в QuizCatalog, так почему она вообще стоит?
Кроме того, используя Design A
, я бы, вероятно, счел QuestionFactory
Синглтоном, в то время какесли использовать Design B
, я бы, вероятно, просто попросил конструктор CreateQuizController
принять экземпляр QuestionFactory
.
Что вы думаете об этом?
Спасибо
PS: Только после рисования диаграмм я заметил, что у Quizz есть 2 z :( Мой плохой.