7

Estoy preparando un nuevo proyecto de Windows y me pregunto qué tipo de tecnología DAL usar. Originalmente estaba buscando algo más simple para no pasar demasiado tiempo construyéndolo. Pero también entiendo que debe ser eficiente y escalable a largo plazo.Nuevo proyecto .NET 3.5: ¿Qué tecnología DAL usar?

Planeo usar el Cliente WPF (MVVM) y el Servicio WCF en un sistema de 3 niveles.

Sólo para resumir todas las tecnologías existentes que conozco:

conjuntos de datos

PRO: Puede ser un poco anticuado, pero muy fácil de usar y dejar que la mayoría de las partes se ajusten automáticamente generado para ti Un aspecto poderoso sobre los conjuntos de datos es la facilidad de atravesar datos relacionados a través de las Relaciones. También de alguna manera está desconectado de la base de datos y podría simplificar las actualizaciones al cuidar las marcas de tiempo automáticamente. Incluye validación.

CONTRA: Bastante anticuado. Algunos los consideran como objetos comerciales/modelos reales, pero solo un espejo de las tablas de datos SQL. Pasarlos entre WCF Service/Client puede ser más difícil que los objetos de negocios creados por ellos mismos.

Enterprise Library 4.1 - Acceso a datos del bloque

PRO: El DAL está muy bien puesto en un patrón de fábrica. Se ocupa de la apertura y el cierre de la conexión automáticamente. Muy fácil de usar para la mayor parte. Admite tanto los dataSets como los SQL Sps normales para crear sus propios objetos comerciales. Como parte de un Framework en curso, puede ser mucho más eficiente usarlo en combinación con el resto de Enterprise Library para obtener un producto final eficiente.

CONTRA: ??

LINQ a SQL

PRO: Auto crea las tablas SQL en objetos de negocio. Fácil de CRUD. Teóricamente una muy buena manera de hacerlo.

CONTRA: Habiendo jugado con él cuando salió, lo encontré escamoso y a veces inestable. Ya se considera una tecnología muerta después del anuncio de Microsoft que Entity Framework 4.0 - como parte de .NET 4.0 - será el camino recomendado por Microsoft. También se esperan pocas correcciones de errores en .NET 4.0, pero ya no hay más planes de ampliación de funciones.

Entity Framework 4.0

no sé nada al respecto, pero sólo que con el tiempo reemplazar todo lo demás como en .NET 4.0. También estoy tentado de usarlo, sin embargo, dado que aún está en BETA, todavía no podría hacerlo.

Estoy muy tentado de utilizar Enterprise Library 4.1 - Bloque de acceso a datos y crear mis propios objetos comerciales. La gran Con es que tomará más tiempo crear el DAL. A menos que alguien pueda convencerme de usar DataSets a través del Bloque de acceso a datos en su lugar.

¿Cuáles son sus comentarios e ideas? Muchas gracias, Kave

Respuesta

3

Menciona Entity Framework como parte de la "contra" para la opción Linq to SQL, pero debería considerarlo en lugar de Linq to SQL: proporciona prácticamente la misma funcionalidad y más. Para proyectos con bases de datos más pequeñas, definitivamente proporciona mucho dinero por el dinero. En EF puede ser un desafío gestionar el contexto para bases de datos más grandes, y los cambios de esquema pueden hacer que las cosas se rompan, pero estos desafíos están ahí con cualquier enfoque de acceso a datos.

La mayor estafa para EntLib, en mi opinión, es que todavía está rodando sus propios objetos de datos. La biblioteca Enterprise elimina gran parte del código de fontanería de una implementación directa de ADO.NET de "la vieja escuela", lo cual es agradable, pero no genera objetos de datos para usted que se puedan utilizar de inmediato para realizar consultas LINQ.

+0

Estaba pensando un poco y creo que tienes razón. Usar EntLib todavía significa mucho trabajo creando todo a mano. Cuando mencionas EF, ¿te refieres a la versión 4.0 BETA o te refieres a la versión actual 1.0? He estado probando la versión 1.0 anoche y debo decir que se ve bastante bien y hace el trabajo. Justo antes probé SubSonic, que no creaba código para mis tablas de búsqueda, que tenía el mismo nombre que uno de sus campos existentes. Esto debe haber confundido subsónico. EF 1.0 hizo el trabajo perfectamente bien y creo que iré de esta manera. ¿Qué piensas? – Houman

+0

EF 1 no es ni de lejos tan rico en funciones como LinqToSql y LinqToSql es bastante pobre en cuanto a características. A EF 1 le falta soporte para los conceptos básicos de ORM, como el soporte adecuado de carga diferida, que LinqToSql sí admite. –

+0

He usado EF 1.0 para algunas aplicaciones, las que tienen bases de datos más pequeñas y que no eran críticas para el rendimiento, y he estado satisfecho con ellas. El requisito básico era "introducir y sacar datos de la base de datos". Si las características, la escalabilidad y el rendimiento son una gran preocupación, definitivamente podría probar EF, pero podría querer abstraer el acceso a datos usando otra capa de software, o algo así como CSLA, para poder cambiar o actualizar las tecnologías de acceso a datos más adelante. Por supuesto, en ese punto, los beneficios de RAD podrían no estar más allí y es posible que desee considerar una pila personalizada completa. –

1

A. Compruebe también NHibernate.

B. DataSet: el más rápido y fácil, pero codifica mucho.

Todo lo demás: hay mucho para usar herramientas ORM, pero hay muchos problemas con 3 niveles con ellas.

(carga lenta es un problema a tratar, haciendo un montón de árboles de objetos grandes que el rendimiento efecto, el almacenamiento en caché no es tan inteligente como sea posible)

Por lo tanto - depende de lo que es sus necesidades principales, y cuánto tiempo que desea pasar estudiando EL/LINQ o NHibernate antes de comenzar a codificar, porque hay una curva de aprendizaje con estas herramientas.

2

Hemos utilizado DataSets con EntLib 4.1 Data Application Block.

Ahora utilizamos Entity Framework. Hemos logrado una mejora masiva en la productividad con Entity Framework en comparación con EntLib 4.1. (Programe la capa de datos para 80 tablas en 10 horas en lugar de 80)

Entity Framework 4 todavía está en Beta, pero si es un tiempo antes de que su proyecto entre en funcionamiento, yo iría con EF 4. Obtiene la productividad de un ORM al mismo tiempo, la flexibilidad de utilizar POCO (objetos simples de Clr antiguo)

+0

Gracias por compartir su experiencia. ¿Esa EF 1.0 o EF 4.0 Beta has usado? – Houman

+0

@Kave, era EF 1.0, pero comenzamos a usarlo mientras estaba en Beta –

1

La mejor idea es tener la oportunidad de utilizar ambas tecnologías al mismo tiempo. ¿Cómo puedes hacerlo? Es muy simple con el patrón Repositorio. Al principio necesitas crear una interfaz genérica de IRepository. Algo le gusta esto:

public interface IERepository<E> 
{ 
    DbTransaction BeginTransaction(); 
    void EndTransaction(); 
    void Add(E entity); 
    void Delete(E entity); 
    int Save(); 

    ObjectQuery<E> DoQuery(string entitySetName); 
    IList<E> SelectAll(string entitySetName); 
    E SelectByKey(int Key); 

    bool TrySameValueExist(string fieldName, object fieldValue, string key); 
    bool TryEntity(ISpecification<E> selectSpec); 

    int GetCount(); 
    int GetCount(ISpecification<E> selectSpec); 
    int AddAndSave(E entity); 

} 

Prefiero Entity Framework. Creé 3 proyectos basados ​​en eso. Funciona muy rápido, especialmente las consultas con paginación. Por lo tanto, después de necesitar crear repositorio de clases genéricas de base con métodos virtuales, implemente la interfaz IRepository. Y eso es todo. Ahora usted tienen forma muy rápida de crear Dal escribir código simple como esto:

public class MonthRepository:Repository<Month> 
{ 

} 

Usted tiene la posibilidad de anular todos los métodos de la clase base y crear acceso a la base de datos utilizando el procedimiento almacenado donde se necesita. Y puede hacerlo sin cambiar el código en otros lugares. Tu todavía devolverá el mismo tipo de entidades pero las obtendrá de otra manera.

Reade más en http://www.codeproject.com/KB/database/ImplRepositoryPatternEF.aspx

+0

Gracias amigo. Esta solución parece realmente interesante si me da más flexibilidad para intercambiar el Repositorio. Todavía tengo que entenderlo primero sin embargo. Dame unos días para estudiarlo después de un trabajo, por favor. ; o) – Houman

1

NHibernate tiene la mejor combinación global de conjunto de características, madurez y apoyo.

NHibernate, Entity Framework, active records or linq2sql

Debe tener en cuenta LINQ apoyan una prioridad para cualquier solución se tiene en cuenta y sus dos primeras opciones anteriores no son compatibles con LINQ.

+0

Hola Michael, También estaba leyendo sobre NHibernate. Encontré la documentación no tan directa y parece ser una aplicación muy complicada de ejecutar. A menos que conozca algunos sitios web de walkthorugh que aún no conozco, me siento un poco perdido allí. Desafortunadamente, SubSonic no funcionó para mí debido a un error. Aún existe el Proyecto Castle que podría probar, o simplemente me atengo a las soluciones MS como EF 1.0 con la esperanza de actualizar pronto a v4.0 una vez que esté disponible. – Houman

+0

Si no puede encontrar su camino en NHibernate, tampoco es probable que obtenga lo que necesita de LinqToSql o EntityFramework. La documentación de NHibernate no es realmente peor que la documentación de cualquier otro ORM. Hay una curva de aprendizaje para cualquier ORM, la curva de NHibernate actualmente solo comienza más pronto. Es probable que NHibernate cumpla con sus requisitos, mientras que los demás solo cumplirán con sus requisitos hasta cierto punto y luego terminará empezando de nuevo con NHibernate. En definitiva, es su llamado y su responsabilidad. –

+0

Gracias Michael. ¿Qué piensas de ese Fluiber NHibernate? ¿Es una especie de asistente obtener automáticamente la asignación generada? ¿Hay alguna herramienta de ayuda para facilitar la vida con NHibernate? – Houman

Cuestiones relacionadas