Dove mettere la logica aziendale comune in DDD con MVC

1

Fornendo il seguente scenario: Ho un'applicazione Web in cui gli utenti possono depositare denaro sui loro conti (bonifico bancario). Quando un utente deposita denaro sul proprio account, deve fare clic sul pulsante "Aggiorna il mio saldo" per aggiornare il proprio saldo.

La logica aziendale dietro "Aggiorna il mio saldo" è la seguente:

  1. Aggiorna saldo, ad esempio chiamando il servizio web di una banca.
  2. Se ci sono nuovi soldi, sottrarre una% da essa a titolo di pagamento.

Il fatto è che non vorrei permettere un bilanciamento rinfrescante senza procedere a nuove commissioni di deposito.

Ho due servizi:

class AccountService
{
    //The following calls the bank webservice to get the new balance and updates the account entity
    public function refreshBalance(Account account);
}

class FeeService
{
    //The following checks if there are deposits, and if there are it subtract a fee
    public function proceedNewFees(Account account);
}

L'azione del mio controller MVC è la seguente in questo momento:

public function refreshBalanceAction()
{
    $account = $this->accountService->getAuthenticatedAccount();
    $this->accountService->refreshBalance($account);
    $this->accountService->proceedNewFees($account);
}

Come puoi vedere, nel controller ho una logica aziendale. Vorrei spostarlo sul livello Dominio. Dov'è il posto migliore per mettere questa logica aziendale dal controller? Creare un nuovo CommonLogicService? Implementalo nell'AccountModel (e in tal caso, come fare riferimento all'istanza di AccountService che si trova nell'AccountModello? DI?)?

    
posta Darxis 03.11.2015 - 18:44
fonte

1 risposta

2

Nel modo in cui lo descrivi, inserisco il codice per aggiornare il bilancio in una classe UpdateBalanceService separata. Quindi creare una nuova classe 'RefreshBalanceService' che contenga sia UpdateBalanceService che ProcessNewFeesService. La classe UpdateBalanceService chiamerebbe quindi entrambi i servizi ed eseguirà le azioni necessarie. Si tratta quindi di implementare il codice di aggiornamento in modo che utilizzi la classe UpdateBalanceService per svolgere il proprio lavoro, che a sua volta delegherà ai sottoservizi per eseguire le proprie attività.

    
risposta data 03.11.2015 - 20:20
fonte

Leggi altre domande sui tag