Мне нужен объект денежного значения на уровне домена, и я пытаюсь понять, что сегодня считается лучшей практикой.
Похоже, существует несколько возможных подходов, каждый из которых имеет существенные недостатки:
- Реализовать свой собственный неизменяемый объект денежного значения с помощью таких операций, как сложение, вычитание, умножение и т. д.
- Это дает полный контроль, но создается ощущение, будто заново изобретаешь что-то, что уже является решенной проблемой.
- Использовать существующую библиотеку (например, кирпич/деньги) непосредственно внутри уровня домена.
- Это вводит прямую зависимость от сторонней реализации внутри основного домена.
- Скройте стороннюю библиотеку за интерфейсами/адаптерами.
- Это позволяет избежать прямого связывания, но может привести к появлению ненужной абстракции и шаблона для объекта значения.
- Сохраните Money как простой держатель данных и переместите арифметические операции в отдельные сервисы.
- Это может привести к анемическому домену модель и разбросанные бизнес-правила.
P.S. Речь идет не только о деньгах, но и о других сложных объектах-значениях с нетривиальным поведением.
Мобильная версия