2009-11-29 24 views
5

Estoy comenzando un nuevo proyecto basado en WCF que está compuesto por un "motor" y algunas aplicaciones de escritorio. Pero me resultó difícil hacer la estructura de mi proyecto.DDD Projects Estructura Con WCF

  • motor (servicio de Windows, que albergan los servicios WCF para acceder con aplicaciones de escritorio y alojar toda mi lógica de negocio)
  • aplicación de escritorio (Presentation)

  • compartido

  • MiProyecto .Core (Clientes/Cliente, Clientes/ICustomerService)

  • motor

    • MyProject.Engine (Clientes/a Cliente, los clientes/ICliente, Clientes/ICustomerRepository)
    • MyProject.Infrastructure.SqlServer (Clientes/cliente (LinqToSql específico), Clientes/CustomerRepository)
  • aplicación WinForm

  • MyProject.Core
  • MyProject.UI

Am i right?

Respuesta

21

Si está haciendo DDD me parece extraño que no tenga un modelo de dominio. Usted tiene un llamado motor, que tiene múltiples preocupaciones. Implementa su lógica de negocios y sabe cómo alojar su lógica de negocios como un servicio de Windows.

propondría una estructura de proyecto de la siguiente manera:

MyProject.Model: Define repositorios abstractos, entidades, objetos de valor, servicios (plazo DDD) y otra lógica de dominio. No tiene referencias a otros proyectos

MyProject.DataAccess: implementación de repositorios utilizando linq2sql. Tiene una referencia a MyProject.Model

MyProject.ServiceModel: Contiene contratos de servicio y otras cosas relacionadas que exponen su modelo de dominio como servicios WCF. este proyecto también contendría representaciones específicas del servicio de aquellos objetos de su dominio que el servicio sirve y acepta. La razón de esto sería que probablemente no debería decorar sus clases de dominio con los atributos necesarios en los contratos de datos de WCF. Este proyecto hace referencia a MyProject.Model.

MyProject.Service: Contiene app.config para su servicio y realiza la inyección de dependencia, a través de ServiceHost y ServiceHostFactory personalizados. Hace referencia a MyProject.Model MyProject.ServiceModel y MyProject.DataAccess + su marco DI preferido (Windsor Castle, por ejemplo)

MyProject.PresentationModel: define varios modelos de vista y comandos para usar en su UI. Tiene referencias de servicio a los servicios expuestos por MyProject.Service

MyProject.WinUI: Su aplicación WPF. Referencias MyProject.PresentationModel.

Tenga en cuenta que la mayoría de lo que probablemente haya leído en el libro de Eric Evans sobre DDD solo se relaciona con los contenidos de MyProject.Model. Los otros proyectos están formando capas adicionales que no se abordan directamente en mr. El libro de Evans.

Recuerde que al tener una clara separación de preocupaciones y al usar la inyección de dependencia, obtendrá un código que se puede probar fácilmente. Con la estructura que he propuesto anteriormente, debería poder probar casi todo, ya que su UI contendrá solo XAML.

De todos modos, esto es solo mi opinión. Por favor, siéntase libre de preguntar si algo de esto necesita aclaración.

Buena suerte con el proyecto.

/Klaus

+0

+1 bien escrito. –