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).
InizialmenteavevounaggregatocostituitodaAccountchecontenevaunelencodiTransactions.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.Balanceperottenereilsaldo.Richiedeunqualchetipodiservizioperottenerel'equilibrio.AmesembrastranodoverchiamaretransactionService.computeBalance(accountId).SembramoltoModellodidominioanemico.
Ilprossimonumerochehocreatoèchequandounatransazionevieneaggiornata,comefaccioafarsapereatutticheilsaldoècambiato?Ciòrichiedechel'interfacciautenteraggiunganuovamenteTransactionServicepercalcolareunsaldo.
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.
