2021-09-29 16:35:12
Анемичная vs богатая модель
В DDD есть понятие модель предметной области. Она отражает модель реального мира и может быть двух видов:
анемичная, это когда модель содержит только структуру данных и
богатая - модель содержит бизнес логику, которая мапится с моделью реального мира.
Долгое время я использовал только анемичные модели и считал это правильным, а бизнес логику реализовывал в сервисах. Но погружаясь глубже в концепцию DDD, осознал, что богатая модель - это очень полезная и мощная штука. Так как позволяет по коду понять поведение и свойства модели в реальном мире, а не искать по сервисам.
Сервисы в данном случае превращаются в оркестраторы, которые реализуют use cases.
Покажу на простом примере.
class Order {
shipment: IShipment
pay: IPayment
basket: Basket
constructor(shipment:IShipment, payment:IPayment, basket: Basket) {
this.shipment = shipment
this.payment = payment
this.basket = basket
}
pay() {
this.payment.pay()
}
ship() {
this.shipment.ship()
}
}
class CreateAndPayOrderUseCase {
handle(basket: Basket) {
const order = new Order(
ShipmentFactory::create('DHL'),
basket,
PaymentFactory::create('Stripe')
)
order.pay()
}
}
Таким образом мы видим, что заказ может оплачен и доставлен.
А какую модель выбираете вы?
#архитектура #ddd
37 viewsedited 13:35