La divisione dell'aggregato porta a incongruenze nei dati

1

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:

  1. Essendocherichiedoconsistenzatransazionale(credo?),dovreimantenerequestoaggregatodigrandidimensioni?
  2. Glieventideldominiopotrebberoaiutareilmiodesigninqualchemodo?SembrachenonaiuterannoasuperareilproblemadiaffidarsiaiserviziperimplementarelalogicadibusinessenonvogliodavveroseguirelarottadeiModellididominioanemico.

Ilmioobiettivoconquestoprogettoparalleloèdiutilizzarlocomeappdesktopeinfinespostareillivellodellalogicaaziendaleeillivellodiaccessoaidatisuunserver.Hoimplementatoun'architetturaa3livellichedovrebbeconsentirglidipassareaun'architetturaa3livelliconlaminimafacilità.

Hovistonumerosevolte Creare Modelli di Dominio Cattivi di Jimmy Bogard. Usa una proprietà List<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.

    
posta keelerjr12 04.10.2018 - 21:11
fonte

0 risposte

Leggi altre domande sui tag