Sto cercando un modello di dominio più flessibile in cui v'è una separazione di dati e comportamento, ma non credo che il livello di servizio è il livello appropriato per il comportamento . Invece, forse, si potrebbe adottare un semplice approccio Business Logic Layer in cui gli oggetti Business Entity espongono solo i dati e gli oggetti Business Process espongono solo il comportamento e, tra questi, i metodi di convalida.
Un vantaggio, a seconda di quanto sia lenta l'accoppiamento del processo aziendale, è possibile applicare la convalida a un più ampio intervallo di covarianti e, eventualmente, anche a tipi invarianti.Prendi in considerazione per un momento la convalida dei campi "FirstName" e "LastName" e considera inoltre che questi campi possono, in qualsiasi sistema di grandi dimensioni, esistere su una mezza dozzina o più entità differenti. Separare il processo dai dati garantirebbe di poter implementare i processi di convalida una sola volta e applicarli su molti oggetti che forniscono gli stessi dati.
Ho notato che l'ideale che il modello di dominio "dovrebbe essere" composto da oggetti di dominio che sono una fusione di dati e comportamento è un concetto di Fowler/Evans, circa 2000-2002 (che segue una rapida migrazione verso sistemi di informazione distribuiti invece di applicazioni a 2 livelli.)
Pensieri?
fonte
2012-07-12 11:13:53
Vorrei anche aggiungere che alcuni oggetti di business possono esistere per fare anche il coordinamento. Ad esempio, non si scriverebbero i comportamenti necessari per convertire un ordine in una fattura, si avrebbe un OrderConverter che controllerà un ordine e se valide lo convertirà. Quello che di solito vedo come oggetti "di servizio" sono fondamentalmente una discarica di metodi a malapena correlati. Fanno tutti qualcosa in un negozio, ma a parte questo non sono correlati. In Csla questi metodi verrebbero tipicamente incapsulati in classi separate che hanno piena conoscenza dell'uso di caselthat, sa tutto su come fare un ordine una fattura – Andy