5

Estamos a punto de comenzar un nuevo proyecto similar al anterior. Podría copiar el diseño anterior, pero no estoy muy satisfecho con el diseño anterior.Uso de Entity Framework con el patrón de repositorio en WinForms MDI

Es un sistema empresarial "estándar" (ventas, inventario, almacenamiento, etc.) construido en la parte superior de .Net 3.5 (Winforms MDI) con Entity Framework en el back-end.

Todas las formas heredan de una base (que hereda Windows.Form). El formulario expone una propiedad llamada ObjectContext, que en la primera llamada crea un nuevo ObjectContext. Creo que este es un buen UnitOfWork, teniendo todo el acceso a datos aislado en cada formulario.

Sin embargo.

He encapsulado todas las consultas y CRUD comunes en "repositorios de personas pobres". Estos repositorios están expuestos como propiedades del ObjectContext.

Así que si quisiera vincular y ordenar un formulario, llamaría al OrderLinesGrid = ObjectContext.OrderRepository.GetOrderLinesByID (orderID).

El OrderRepository obtiene una referencia a la ObjectContext creado para la forma, como este

(En mi clase ObjectContext parcial)

Private _OrderRepository as OrderRepository 
Public ReadOnly Property OrderRepository as OrderRepository 
Get 
if _orderrepository is nothing then 
_orderrepository = New OrderRepository(me) 
end if 
return _orderrepository 
End Get 
End Property 

Lo que no me gusta de esto es:

  1. La llamada al repositorio se realiza mediante ObjectContext. Por lo tanto, hago no obtener la abstracción entre la consulta y el dataaccesslayer I le gustaría.

  2. Para cada nuevo tipo en mi dominio I necesito para crear una propiedad en mi ObjectContext

Mi llamado a OrderRepository sólo debe devolver los objetos de dominio y no preocuparse por la forma en que se conserva. Además, no puedo permitir que cada Repositorio tenga su propio ObjectContext, ya que eso me obligaría a Adjuntar y Separar objetos al hacer referencia a, por ejemplo, País a una propiedad Order.Country.

Agradecería cualquier ideas y comentarios en este diseño :)

Respuesta

0

sugiero que la investigación de "onion" principle, Repository pattern y el patrón Luw. Hay muchos ejemplos en la web.

Esencialmente utiliza POCO Model Core Project. Sin referencias al proyecto DAL. Usted declara las interfaces para el Repositorio y los patrones luw en el proyecto CORE.

por lo que ahora un

UI layer -> instantiate context and DAL Object eg repository -> inject into CORE services. 

También conectado a este enfoque es Inversión de Control o el patrón de inyección de dependencia.

Si utiliza el desarrollo controlado por prueba contra los repositorios falsos, puede asegurarse de que se cumplan los principios de diseño.

Cuestiones relacionadas