Supponiamo di avere un'entità Book
nella nostra libreria. Un requisito dice:
Librarian may disable 'available' flag to books published before some year. For example, librarian may 'hide' some old books from being publicly available as they are rare.
Questo comportamento è facilmente eseguibile con un singolo comando SQL. Il nome del metodo per questo comportamento potrebbe essere ad es. hideBooksPriorToYear()
.
Ma dove mettere questo metodo?
-
se lo inseriamo nel repository, presto sarà pieno di tali metodi; inoltre, questo è un metodo di business, non un metodo di repo.
-
potremmo recuperare tutti i vecchi libri e nasconderne uno per uno, ma questo è lento.
-
potremmo creare un servizio aziendale per questo, ma sembra di nuovo un modello anemico
-
potremmo mettere questo metodo in un modello, ma non voglio mettere sql lì.
Qualche saggezza su questo?
Modifica
Cercando di chiarire. Quando provo a spostare il comportamento sui metodi delle entità, ho scoperto che la maggior parte del business non è disponibile senza un repo. E non voglio iniettare istanza di repo nei modelli. In questo modo le mie entità inizieranno presto a essere: 1) oggetti dati semplici e 2) fabbriche per entità / aggregati correlati al modello.