Sto considerando l'implementazione di Clean Architecture di Robert Martin in un progetto e sto cercando di scoprire come gestire casi d'uso non banali.Architettura pulita - Robert Martin - Use Case Granularity
Mi risulta difficile scalare l'architettura in casi d'uso complessi/composti, in particolare casi d'uso in cui l'attore è il sistema in contrapposizione a un utente, come nel sistema che esegue una sorta di elaborazione in batch.
A scopo illustrativo, supponiamo che un caso d'uso come "sistema aggiorna tutti i saldi dei conti", realizzata in pseudocodice come
class UpdateAllAccountBalancesInteraction {
function Execute() {
Get a list of all accounts
For each account
Get a list of all new transactions for account
For each transaction
Perform some specific calculation on the transaction
Update account balance
}
}
Inoltre, "ottenere una lista di tutti i conti", "Get un elenco di tutti nuove transazioni per conto "," Esegui qualche calcolo specifico sulla transazione "," Aggiorna saldo conto "sono tutti casi d'uso validi e ognuno di essi è già implementato nella propria classe di interazione.
Alcune domande sorgono:
- È il caso d'uso "aggiornamenti di sistema tutti i saldi dei conti", anche un caso uso valida o dovrebbe essere suddiviso in casi d'uso più piccoli (anche se da un business prospettiva esso sembra avere senso, è uno scenario aziendale legittimo )?
- Is UpdateAllAccountBalancesInteraction un'interazione legittima?
- un'interazione è consentita/supposta di orchestrare altre interazioni?
- Il codice che orchestra altre interazioni appartiene davvero da qualche altra parte?
- È solo bene avere UpdateAllAccountBalancesInteraction come un'interazione, ma hanno esso funzioni di chiamata condivise dagli altri interattori piuttosto che agire come un orchestratore di altri interattori?
Ho dovuto prendere una decisione e andare avanti con il mio progetto, quindi ho concluso che gli esempi forniti nella presentazione/[articolo] (https://blog.8thlight.com/uncle-bob/2012/08/ 13/the-clean-architecture.html) sono banali e che la separazione delle dipendenze si riferisce ai livelli, penso che sia facile essere d'accordo. Con questo in mente, ho concluso che il metodo 'Execute()' di un'interazione non dovrebbe chiamare il metodo 'Execute()' di un'altra interazione, ma possono sicuramente condividere il codice nello stesso livello. – PlusInfinite