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:
- Aggiorna saldo, ad esempio chiamando il servizio web di una banca.
- 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?)?