Проблемы, с которыми вы сталкиваетесь, связаны не с дизайном, управляемым доменом, а с отсутствием разделения проблем. Управляемый доменом дизайн - это не просто объединение данных и поведения.
Первое, что я бы порекомендовал, это взять один день или около того и прочитать Дизайн, управляемый доменом. Быстро , доступный для бесплатной загрузки с Info-Q. Это обеспечит обзор различных типов объектов домена: сущностей, объектов стоимости, сервисов, репозиториев и фабрик.
Второе, что я бы порекомендовал, - это прочитать «Принцип единой ответственности» .
Третье, что я бы порекомендовал, - это начать погружаться в Test Driven Development . Хотя обучение дизайну с помощью написания тестов вначале не обязательно делает ваши проекты великолепными, они, как правило, ведут вас к слабосвязанным проектам и выявляют проблемы проектирования раньше.
В приведенном вами примере у WebsiteUser определенно слишком много обязанностей. На самом деле, вам вообще может не потребоваться WebsiteUser
, поскольку пользователи обычно представлены ISecurityPrincipal
.
Довольно сложно предположить, как именно вы должны подходить к своему дизайну, учитывая отсутствие бизнес-контекста, но я сначала рекомендовал бы провести мозговой штурм, создав несколько учетных карточек, представляющих каждое из основных существительных в вашей системе например, Клиент, Заказ, Квитанция, Продукт и т. д.). Запишите названия классов-кандидатов вверху, какие обязанности, по вашему мнению, присущи классу слева, и классы, с которыми он будет сотрудничать справа. Если какое-то поведение не относится к какому-либо объекту, это, вероятно, хороший кандидат на обслуживание (т.е. AuthenticationService). Разложите карточки на столе со своими коллегами и обсудите. Не делайте из этого слишком много, так как это действительно предназначено только для мозгового штурма. Иногда это может быть немного проще, чем при использовании доски, потому что вы можете перемещать вещи.
В долгосрочной перспективе вы действительно должны взять книгу Эрика Эванса Domain Driven Design *1022*. Это большое чтение, но оно того стоит. Я бы также порекомендовал вам забрать либо
Agile Software Development, Принципы, Шаблоны и Практики или Agile Принципы, Шаблоны и Практики в C # в зависимости от ваших языковых предпочтений.