Sto affrontando un problema molto interessante qui, e mi piacerebbe vedere alcune idee di progettazione dal punto di vista del design guidato dal dominio.
Per facilitare l'espressione di ciò di cui ho bisogno, ho seguito una situazione ipotetica. Dispongo di un contesto limitato denominato Cliente , che viene utilizzato per gestire la creazione di nuovi clienti, l'aggiornamento del cliente, la ricerca dei clienti e così via. Ho un aspetto della classe del cliente
public class Customer
{
public int Id { get; set ; }
public int SocialInsuranceNumber { get; set ; }
public bool IsValid()
{
// my logic to validate social insurance number
}
}
Quindi ho una logica diretta nella mia entità per convalidare i dati. La regola di convalida del numero di previdenza sociale canadese indica che tutti i valori iniziano con 0 non devono essere utilizzati, ma il governo canadese potrebbe usarlo per qualche ragione. Quindi ora ci sono 2 regole di convalida.
L'azienda ha il requisito di una singola applicazione - per la maggior parte delle situazioni in cui l'utente inserisce un numero di assicurazione sociale dobbiamo assicurarci che il valore non possa iniziare con 0 e il valore deve essere un SIN valido, ma in qualche situazione unica dobbiamo consentire un SIN valido a partire da 0.
Il mio codice di servizio del dominio è simile a
public class CustomerService
{
public void AddCustomer(Customer customer)
{
if (customer.IsValid())
{
// save to database
}
}
}
Se aggiungo un parametro booleano alla funzione Customer
della classe IsValid()
per fare apparire come IsValid(bool allowLeadingZero)
, potrei far funzionare il codice. Ma penso che sembri brutto.
Dal punto di vista del design, come suggeriresti un modo più elegante per gestire tale requisito?