2009-11-29 10 views
5

Sto avviando un nuovo progetto basato su WCF composto da un "Motore" e alcune applicazioni desktop. Ma ho trovato difficile strutturare il mio progetto.Struttura dei progetti DDD con WCF

  • Engine (Windows Service, che ospitano servizi WCF per l'accesso delle applicazioni desktop e ospitare tutta la mia logica di business)
  • Desktop Application (Presentation)

  • comune

  • MyProject .Core (clienti/clienti, clienti/ICustomerService)

  • motore

    • MyProject.Engine (clienti/CustomerService, Clienti/ICustomer, clienti/ICustomerRepository)
    • MyProject.Infrastructure.SqlServer (clienti/clienti (LinqToSql specifico), i clienti/CustomerRepository)
  • WinForm Applicazione

  • MyProject.Core
  • MyProject.UI

Ho ragione?

risposta

21

Se si esegue DDD, trovo strano che non si disponga di un modello di dominio. Hai un cosiddetto motore, che ha più problemi. Implementa la tua logica aziendale e sa di ospitare la tua logica di business come servizio Windows.

vorrei proporre una struttura di progetto come segue:

MyProject.Model: Definisce repository astratte, soggetti, oggetti di valore, i servizi (termine DDD) e altra logica di dominio. Non ha riferimenti ad altri progetti

MyProject.DataAccess: implementazione di repository tramite linq2sql. Ha un riferimento a MyProject.Model

MyProject.ServiceModel: contiene contratti di servizio e altre informazioni correlate che espongono il modello di dominio come servizi WCF. questo progetto conterrà anche rappresentazioni specifiche del servizio di quelle dei tuoi oggetti di dominio che il servizio serve e accetta. La ragione di ciò potrebbe essere che probabilmente non dovresti decorare le tue classi di dominio con gli attributi necessari nei contratti di dati WCF. Questo progetto fa riferimento a MyProject.Model.

MyProject.Service: contiene app.config per il servizio ed esegue l'iniezione delle dipendenze, tramite un ServiceHost personalizzato e ServiceHostFactory. Fa riferimento a MyProject.Model MyProject.ServiceModel e MyProject.DataAccess + il tuo framework DI preferito (ad esempio il Castello di Windsor)

MyProject.PresentationModel: Definisce vari modelli di visualizzazione e comandi da utilizzare nell'interfaccia utente. Dispone di riferimenti ai servizi esposti da MyProject.Service

MyProject.WinUI: l'app WPF. Riferimenti MyProject.PresentationModel.

Nota che la maggior parte di ciò che hai probabilmente letto nel libro di Eric Evans su DDD riguarda solo i contenuti di MyProject.Model. Gli altri progetti compongono strati aggiuntivi non direttamente indirizzati in mr. Il libro di Evans.

Ricordare che avendo una chiara separazione di preoccupazioni e utilizzando l'iniezione di dipendenza si otterrà un codice facilmente testato. Con la struttura che ho proposto sopra, dovresti riuscire a testare quasi tutto, dal momento che l'interfaccia utente conterrà solo XAML.

Ad ogni modo, questo è solo il mio punto di vista. Non esitate a chiedere se alcuni di questi hanno bisogno di chiarimenti.

Buona fortuna con il progetto.

/Klaus

+0

+1 ben scritto. –