Ситуация:
Есть игровой мониторинг.
Пользователь мониторинга может добавлять Сервер
И Пользователь и Сервер являются агрегатами. Сервер хранит идентификатор пользователя UserID, который его создал.
Новые сервера создаются при помощи фабричного метода RegisterServer, определенного в классе Пользователь. Конструктор Сервера не доступен (internal) за пределами сборки.
Вопрос:
Если конструктор Сервера не доступен за пределами сборки, то как тогда восстанавливать сущность Сервер в репозитории ServerRepository? В таком случае будет необходимо сначала создавать Пользователя внутри ServerRepository, чтобы потом при помощи фабричного метода RegisterServer восстанавливать объект-Сервер. А если необходимо вернуть полный список всех серверов?
Считаю, что это чрезмерное усложнение. Можно было бы сделать конструктор объекта Сервер открытым для использования за пределами сборки, но тогда сервер можно будет создать и без наличия пользователя. Нарушатся правила модели.
UPD:
К сожалению, при составлении вопроса совсем забыл указать, что пишу на C#. Посчитал этот факт не важным в контексте вопроса.
Думаю, что я нашел решение своей проблемы. В репозитории ServerRepository достаточно будет использовать AutoMapper, который сможет восстановить объект на основе информации из базы данных. AutoMapper будет применяться исключительно в репозиториях. В самой доменной модели он не будет использоваться.
В таком случае в доменной модели можно будет сохранить жесткие правила регистрации новых игровых серверов.
Да, это черезмерное усложнение.
Архитектура должна контролировать сложность, а не создавать ее.
Объект Сервер не является реальным сервером реальному серверу. Это всего лишь абстракция для представления физического сервера в вашем коде.
RegisterServer - это регистрация нового, ранее неучтенного физического сервера в системе.
Странно позволять создавать новые объекты только путем регистрации реальных серверов. Это же практически означает, что вы вынуждены держать объект живым все время существования вашего физического сервера. Сомневаюсь, что ваше приложение сможет так долго работать без остановки :)
От того, что вы создадите объект, новый сервер в реальном мире не появится. Да, абстракции дырявая, можно создать объект сервер без пользователя - но это же ваш код. Просто не делайте так, всего делов.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть две ViewModel, first и secondВ первой по ShowViewModel вызываем вторую
Так почему же при someArray = ["a", "b", "c", "d"], someArraysplice(someArray
Помогите с решением, есть калькулятор, по клику на чекбокс #chek_plit отображается плита фундамента и форма ввода, надо сделать так чтобы при...