Давайте предположим, что я отвечаю за разработку игры Scrabble, так как одним из основных требований клиента является возможность позже опробовать различные способы и режимы игры.Я уже сделал дизайн, который достаточно гибок, чтобы поддерживать такие изменения.Остается только один вопрос: что выставить клиенту (модификаторы доступа к объектам) и как его организовать (как выставить мои объекты в пространствах имен / пакетах).
Как определить вещи так, чтобы клиентМогут ли оба легко использовать мою стандартную реализацию (стандартную игру Scrabble), и при этом иметь возможность вносить все изменения, которые ему нужны? Я думаю, что мне нужно, это своего рода фреймворк, над которым он может работать.
Я организовал свои классы / интерфейсы в нестрогой многоуровневой системе:
Типы данных
Содержит основные типы данных, которые могут использоваться во всей системе. Доступ к этому пакету и его членам возможенКто-нибудь в системе. Все ее члены являются общедоступными.
Домен
Содержит все определенные мной интерфейсы, и это может быть полезно, чтобы иметь возможность создавать новые реализации Scrabble клиента. Также содержит значениетипы, такие как Piece, которые используются в игре. Все ее участники являются открытыми.
Реализации
Содержит всеl необходимые классы / код для реализации моей стандартной игры Scrabble в пакете Implementations.StandardScrabble.Если клиент решит реализовать другие варианты игры, он может создать их, например, в Implementations.XYZ.Все эти классы защищены пакетом, и единственное, что доступно снаружи пакета, - это игровой фасад.Используются пакеты «Домен» и «Типы данных».
UI
Содержит класс пользовательского интерфейса, который я реализовал, чтобы и клиент, и пользователи программы могли запустить игру (моя реализация).Доступ ко всем остальным слоямв основном реализую почти все сам (разделяю в Домене интерфейсы, но он почти ничего не может с ними сделать).Я чувствую, что, возможно, мне следует передать все классы Реализации в Домен, а затем иметь только Фасад, который создает мой стандартный Scrabble в пространстве имен Реализации?
Как бы вы подошли к этому?Есть ли рекомендуемые материалы о том, как создавать программы такого типа (в основном, фреймворки)?
Спасибо