В контексте DDD сеттеры на доменной модели - это запах кода.Их следует избегать по той простой причине, что они на самом деле не являются частью домена.В нем нет существительных, которые эксперт по домену может понять, и изменения в данных должны проходить через определенные методы.
Пример:
customer.StreetName = ...
customer.City = ...
Хотя правильный способ сделать это будетиметь метод customer.ChangeAddress
, который мог бы затем публиковать событие и т. д. и т. д. По крайней мере, насколько я понимаю, это все теория звука, и я могу полностью понять, почему сеттеры в доменной модели на самом деле нежелательны.
НО: без сеттеров в вашей доменной модели эти методы довольно сложно протестировать.
Как мне заставить экземпляр Customer выполнять мои тесты, если я не могу его создать, не имея конструктора с большой задницей, который принимает ВСЕ аргументы, или использует магию отражения?Я использую NHibernate в бэкэнде, поэтому NHibernate уже использует магию отражения, чтобы в первую очередь заполнить эти поля.
Но очень плохо иметь ctor с 10 аргументами ... (И то же самое будет верно для фабричного метода).
Есть какие-нибудь советы по этому поводу?
привет Даниил