2009-06-10 10 views
8

Martin Fowler suggests utilizzando un livello di servizio come limite tra il modello di dominio e "Caricatori di dati". Tuttavia, Rockford Lhotka suggerisce di costruire la convalida nell'oggetto business stesso e questo è esattamente ciò che fa CSLA.NET.Validazione e in Service Layer o Business Objects?

I vantaggi di astrarre questo in un livello di servizio è ovviamente che il livello di servizio può coordinare l'attività/operazione tra più oggetti di business. Ma quali sono gli altri vantaggi e svantaggi dell'utilizzo di un livello di servizio sull'utilizzo diretto degli oggetti di business per la logica e la convalida aziendale?

risposta

3

Sono sicuramente nel campo di Rocky Lhotka. Credo che i tuoi oggetti di business dovrebbero essere molto facili da "portare" tra le applicazioni e i livelli dell'interfaccia utente. Aggiungere un ulteriore "livello di servizio" molto probabilmente aggiungerà una dipendenza con gli oggetti e quindi renderli meno "portatili".

Se si scrive correttamente il framework dell'oggetto business, gli oggetti business devono essere in grado di gestire correttamente la convalida tra vari oggetti business. CSLA.NET lo fa correttamente avendo relazioni parent/child e il concetto di validazione della proprietà dipendente.

+0

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

4

Non sono sicuro di averlo capito.

Il suggerimento di Martin Fowler nel PEAA è il livello di servizio un'API tra l'interfaccia utente (oi client) ei livelli Dominio/Dati. esporrà qualsiasi funzionalità che può essere consumata da un cliente.

Se si guarda al modello di dominio (Here)

Un modello a oggetti del dominio che incorpora sia il comportamento e dati.

Il livello di dominio conterrà questi oggetti, che avranno le azioni/validazione (comportamento) e lo stato (dati)

Questi oggetti possono essere riutilizzati in altre applicazioni, questo dipenderà anche il vostro disegno. il livello dominio non dovrebbe dipendere dal livello di servizio

Considerando quindi che gli oggetti Dominio hanno un comportamento (questo include la convalida) e dati. il livello di servizio è ciò che l'applicazione deve esporre (a funzionalità). IE aggiunge un cliente, o un account, calcola i pagamenti per la fine del mese.

Dai un'occhiata alla disposizione tagliente di architure (http://www.sharparchitecture.net/)

Questa è la mia comprensione di questa meterial.

HTH

ossa

0

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?