Sto lavorando con un'applicazione web abbastanza complessa. È suddiviso nei seguenti livelli:
- Presentazione - HTML
- Livello di servizio: API REST e SOAP in comunicazione con il livello aziendale
- Livello aziendale: contiene la logica aziendale.
- Accesso ai dati: fornisce accesso allo spazio di archiviazione (SQL ecc.)
I livelli aziendali contengono classi che incapsulano aree specifiche, come la registrazione dei clienti, la gestione degli utenti e altro ancora. Il problema che stiamo vedendo è che il livello aziendale inizia a diventare un po 'disordinato. Abbiamo un'unica classe che gestisce la gestione dei clienti, ma man mano che quest'area dell'applicazione diventa sempre più complessa, la classe cresce, cresce e diventa disordinata.
Ad esempio, potremmo avere le seguenti classi
-
class CustomerManager
- void CreateCustomer (...)
- void DeleteCustomer (...)
-
class UserManager
- void CreateUser (..)
- void DeleteUser (...)
- void ActivateUser (...)
- void InactivateUser (...)
- void ResetPassword (...)
La creazione di un cliente comporta anche la creazione di utenti. Quindi, CustomerManager chiama i metodi misc nella classe UserManager. Con l'evolversi dell'applicazione, la creazione di un nuovo cliente implica circa 10 operazioni diverse, ad eccezione della registrazione del cliente nel database, come l'informazione sulle vendite, la registrazione degli audit, la configurazione degli account utente predefiniti, la creazione di una configurazione predefinita per il cliente, la notifica utenti finali delle loro password generate automaticamente e altro ancora. Quindi CustomerManager.CreateCustomer cresce fino a ~ 100 linee di codice piuttosto peloso.
Sto cercando di pensare a un buon modo per gestirlo, ma presumo che ci sia un modo comune per farlo, di cui non sono a conoscenza.
Ho preso in considerazione la creazione di classi "Task" / "Command" che implementano piccoli sottoprocessi e quindi consentono a CustomerCreation.CreateCustomer di eseguire semplicemente una serie di attività. Avrei più lezioni ma farebbero ognuna meno cose.
Ho anche preso in considerazione l'implementazione di alcuni tipi di sistemi di eventi / plug-in a livello di applicazione globale in cui CustomerManager.CreateCustomer crea semplicemente il cliente nel database e quindi pubblica un evento creato dal cliente. I plug-in / qualcosa possono quindi iscriversi a questi eventi e fare cose come informare le vendite e registrare il fatto. Usando questo metodo, non dovrei effettivamente aggiornare CustomerManager.CreateCustomer quando voglio fare più cose che è qualcosa che mi sembra attraente.
Quale modello di progettazione ovvio mi manca?