Для первого выстрела это не плохо.При запуске дизайна важно не зацикливаться на мелких деталях.Сколько времени вы потратите на заботу об устойчивости дизайна, будет главным фактором важности проекта.Вы будете постоянно учиться по мере сборки, и со временем ваш старый код потребует рефакторинга, чтобы включить новые детали.
Возьмем, к примеру, ваш класс FourSome, который, как я полагаю, состоит из четырех игроков.Могли бы вы вместо этого иметь класс Team, который имеет ограничение на размер, так что коллекция Players может быть ограничена таким количеством игроков?Должен ли быть класс Player (или, возможно, это тип Player1?)?
Ответы на эти вопросы будут влиять на расширяемость вашей системы.
Я рекомендую вам написатькаждый из ваших сценариев в тесты (вы можете использовать пользовательские истории или варианты использования, но разработчики любят писать код), и, когда вы пишете тесты, заполните реализацию класса Registration, Player и Foursome / Team, чтобы тесты были успешными.,По мере расширения вашей системы ваши тесты будут меняться, как и ваш дизайн.
После добавления 1:
Домен-ориентированный дизайн предназначен для того, чтобы стать подходом к разработке классов и структур данных.приложение будет использовать такое, что оно «моделирует» проблемную область.В вашем случае вы работаете с системой регистрации на выезд в гольф.Поэтому, когда вы думаете о сущностях, которые могут составлять такую систему, вы можете описать, как капитан команды регистрирует свою команду (включая других игроков), предоставляя свою регистрацию.Регистрация может быть для события, которое само по себе может содержать такие данные, как организатор, спонсор и т. Д. Как видите, каждое из названий с большой буквы становится вашими сущностями (классами).По крайней мере, для первого проекта вашего дизайна.По мере того как вы узнаете больше информации об отношениях между вашими классами, особенно о том, как они взаимодействуют (в команду добавлен игрок), вы уточните методы вашего класса.
В ходе этого процесса вы можете непреднамеренно представитьнедостатки дизайна.Например, FourSome, технически, это тип команды, ограниченный четырьмя игроками.Имеет ли смысл выводить класс из Team и устанавливать лимит в четыре игрока, или имеет смысл накладывать ограничения на Team?Это дизайнерское решение, определяемое ... вашими бизнес-правилами и вами.Является ли ошибкой использование одного подхода над другим?Время покажет, так как вам потребуется постоянно проводить рефакторинг для расширения системы.
В процессе проектирования вы найдете много шаблонов, которые могут упростить процесс проектирования, но у нового дизайнера обычно нетопыт, чтобы узнать, когда их использовать.Если вы делаете, слава тебе.Вы не найдете идеальный дизайн в самый первый раз, когда вы проектируете.Я все еще оглядываюсь назад (15 лет назад) на проекты, которые я думал, были удивительными, и качаю головой в моем юном изобилии.
Вы должны описать свою проблему (себе или на бумаге).Подчеркните существительные.Это ваши кандидаты в классы.Расскажите историю для каждого взаимодействия пользователя с системой, и глаголы должны помочь вам понять, какие методы используются в каждом классе.Избегайте использования Регистрации для выполнения всей работы, но разделяйте ответственность классов там, где это необходимо.Например, вы можете добавить игрока в команду, или вы можете добавить игрока в команду.Определение, где лежит эта ответственность, должно руководствоваться (но не диктоваться) ПСП, наряду с другими рекомендациями по проектированию.
Наконец, в дизайне нет правильного ответа.Я мог бы сказать вам, основываясь на своем обширном опыте проектирования, но ограниченном опыте игры в гольф, что я думаю, что это должно быть, но в конечном итоге ваш лучший дизайн зависит от функций, области применения и целей дизайна (таких как расширяемость).Начните с лучшего снимка, напишите тесты против него, и ваши недостатки в дизайне проявятся еще до того, как вы об этом узнаете.: D
После редакции 2:
Я думаю, вы слишком много читаете под руководством Эрика Эвана.Я не верю, что он говорит, что вы не можете выставить Игрока из Четверки.