Quello che sto cercando è qualcosa come GNUCash o qualsiasi tipo di software per il monitoraggio delle finanze personali che assomigli a questo:
Questaèlapaginaprincipalecheelencatuttiituoiaccount;quindiquandosifaclicsuunaccountsiapreunagrigliadidaticheconsentediaggiungerenuovetransazioni.Quindi,ovviamente,vuoicheiltuosaldovengaaggiornatoimmediatamente(cioènonsiusalacoerenzafinale).
InizialmenteavevounaggregatocostituitodaAccount
checontenevaunelencodiTransaction
s.Sembravaqualcosadelgenere:
publicclassAccount{publicAccount(AccountIdid){_id=id;}publicvoidAddSubAccount(AccountsubAccount){//dowork}publicvoidRemoveSubAccount(AccountIdsubAccountId){//dowork}publicvoidAddTransaction(Transactiontransaction){//dowork}publicvoidRemoveTransaction(TransactionIdtransactionId){//dowork}publicdecimalBalance=>computeBalance();privatedecimalcomputeBalance(){//loopthroughallsubaccounts//loopthroughalltransactions//addbalances//returnbalance}privateAccountId_id;privateList<Account>_subAccounts=newList<Account>();privateList<Transaction>_transactions=newList<Transaction>();}
SiconsigliavadiseguireDDDesuddividerequestoaggregato[potenziale]digrandidimensioniin2aggregatiseparati:
publicclassAccount{publicAccount(AccountIdid){_id=id;}publicvoidAddSubAccount(AccountsubAccount){//dowork}publicvoidRemoveSubAccount(AccountIdsubAccountId){//dowork}publicdecimalBalance=>computeBalance();//ISSUE:nolongerhaveaccesstotransactionsprivatedecimalcomputeBalance(){//loopthroughallsubaccounts//loopthroughalltransactions//addbalances//returnbalance}privateAccountId_id;privateList<Account>_subAccounts=newList<Account>();}
Inquestosplitaggregatononèfacileperilclientechiamaresemplicementeaccount.Balance
perottenereilsaldo.Richiedeunqualchetipodiservizioperottenerel'equilibrio.AmesembrastranodoverchiamaretransactionService.computeBalance(accountId)
.SembramoltoModellodidominioanemico.
Ilprossimonumerochehocreatoèchequandounatransazionevieneaggiornata,comefaccioafarsapereatutticheilsaldoècambiato?Ciòrichiedechel'interfacciautenteraggiunganuovamenteTransactionService
percalcolareunsaldo.
Quindilemiedomandesono:
- Essendocherichiedoconsistenzatransazionale(credo?),dovreimantenerequestoaggregatodigrandidimensioni?
- Glieventideldominiopotrebberoaiutareilmiodesigninqualchemodo?SembrachenonaiuterannoasuperareilproblemadiaffidarsiaiserviziperimplementarelalogicadibusinessenonvogliodavveroseguirelarottadeiModellididominioanemico.
Ilmioobiettivoconquestoprogettoparalleloèdiutilizzarlocomeappdesktopeinfinespostareillivellodellalogicaaziendaleeillivellodiaccessoaidatisuunserver.Hoimplementatoun'architetturaa3livellichedovrebbeconsentirglidipassareaun'architetturaa3livelliconlaminimafacilità.
HovistonumerosevolteList<Offer> AssignedOffers
all'interno di Member
. Questo gli consente di gestire NumberOfActiveOffers
dall'interno di Member
. E sembra molto vicino a quello che sto cercando di ottenere.