Sto lavorando su un sistema di magazzino legacy. C'è una radice Aggregate, Product
che ha il suo corrispondente ProductRepository
.
In questo momento ho un nuovo requisito che dice quanto segue:
Some Products are Purchasable and need to keep track of the datetime they have become purchasable.
Quindi, al fine di implementare questo requisito, ho deciso di adottare il seguente approccio che, dal momento che posso vedere una relazione "è-a", ho deciso di creare una nuova classe chiamata PurchasableProduct
che eredita Product
e aggiunge questo nuovo attributo.
class PurchasableProduct(Product):
def __init__(product_properties, purchasable_datetime):
super().__init__(product_properties)
self.purchasable_datetime = purchasable_datetime
Ciò che mi turba in questo momento sono i repository. ProductRepository
, ovviamente, dovrebbe ancora restituire istanze di Products
(anche se potrebbero essere PurchasableProducts
), ma ho bisogno di un modo per recuperare e salvare quei Prodotti acquistabili. Aggiungere una PurchasableProductsRepository
sembra una soluzione, ma è strano che io possa avere due repository, ProductRepository
e PurchasableRepository
, che posso usare per salvare istanze di PurchasableProducts
.
In un paradigma DDD, quale sarebbe il modo migliore per implementare questa situazione in cui una radice aggregata è una specializzazione di un'altra?