Envisagez le scénario suivant:DDD - Obtenir l'entité par agrégat, invoquer la méthode ou cacher la méthode de l'entité derrière la méthode aggegrate?
class Order:
def __init__(self):
self.lines = []
def order(self, product_id, amount, price, discount=None):
item = OrderItem(product_id, amount, price)
self.lines.append(item)
class OrderItem:
def __init__(self, product_id, amount, price, discount=None):
self.product_id = product_id
self.amount = amount
self.price = price
self.discount = discount or decimal.Decimal(0)
def discount(self, amount):
self.discount = discount
Dans le scénario que nous voulons ajouter un rabais à un élément de ligne spécifique, après l'agrégat Order
a été créé, ai-je besoin pour obtenir l'entité OrderItem
de l'agrégat, ou exposer une méthode sur l'agrégat?
E.g.
class Order:
...
def discount_item(self, index, amount):
self.lines[index].discount(amount)
Et si je peux appeler la OrderItem.discount()
directement - comment puis-je garder une trace des événements de domaine publiés à la suite de cela?