2008-09-22 16 views
7

Estoy comenzando un nuevo proyecto ASP.NET MVC para aprender, y me pregunto cuál es la forma óptima de configurar los proyectos para conectarlos a un servidor SQL. Por ejemplo, imaginemos que tenemos una tabla de Producto y un objeto de producto que quiero usar para completar los datos en mi opinión.¿Cuál es la mejor manera de configurar el acceso a datos para un proyecto ASP.NET MVC?

sé que en algún lugar de aquí que debería tener una interfaz que se implementa, etc, pero no puedo envolver mi mente alrededor de ella hoy :-(

EDIT: En este momento (es decir: la versión actual, mal codificado de esta aplicación) Solo estoy usando un servidor SQL simple (2000 incluso) usando solo procedimientos almacenados para el acceso a datos, pero no sería adverso agregar una capa adicional de flexibilidad para usar linq a sql o algo.

EDIT # 2: Una cosa que quería agregar es esta: escribiré esto en una V1 de la base de datos, y tendré que ser capaz de permitir que nuestro DBA vuelva a trabajar la base de datos y me proporcione una V2 más adelante, por lo que sería bueno solo tener que cambiar algunos s cosas del centro comercial que no se proporcionan a través de la base de datos ahora que será más tarde. En lugar de tener que volver a escribir un DAL completamente nuevo.

Respuesta

1

En la solución de mi sitio, tengo el proyecto de aplicación web MVC y un proyecto "común" que contiene mis POCO (objetos simples de C#), gerentes comerciales y capas de acceso a datos.

Las clases DAL están vinculadas a SQL Server (no las resumí) y devuelvo las POCO a los gerentes comerciales que llamo desde mis controladores en el proyecto MVC.

+0

Supongo que tal vez algunos de los tema que estoy tratando de llegar a un entendimiento sobre es lo que sería la diferencia de estar entre los objetos en los proyectos comunes VS objetos que deberían ir en la carpeta del modelo? ¿O este proyecto común reemplaza las cosas de relleno en modelos? –

+0

Podría estar completamente equivocado (soy nuevo en MVC), pero usaría la carpeta Models para crear combinaciones de mis objetos "comunes" para el uso específico de la vista. –

+0

¿Básicamente extendería sus objetos comunes en la carpeta de modelos si necesitaban hacer algo que no se proporciona en su objeto común básico? –

4

Realmente depende de la tecnología de acceso a datos que esté utilizando. Si está utilizando Linq To Sql, es posible que desee abstraer el acceso a los datos detrás de algún tipo de interfaz de "repositorio", como un IProductRepository. El principal atractivo para esto es que puede cambiar la implementación de acceso a datos específicos en cualquier momento (como al escribir pruebas de unidades).

He tratado de cubrir algunos de this here:

+0

No se puede abrir ese enlace .... ¿su sitio está inactivo? –

3

Me volvería a la salida Rob Conery's vídeos en su creación de un frente de la tienda MVC. La serie se puede encontrar aquí: MVC Store Front Series

Esta serie se sumerge en todo tipo de temas relacionados con el diseño, así como las prácticas de codificación/prueba para usar con MVC y otros proyectos.

0

Para nuestra aplicación planeo usar LINQ to Entities, pero como es nuevo para mí, existe la posibilidad de que desee reemplazar esto en el futuro si no funciona como me gustaría y usar algo como LINQ to SQL o NHibernate, por lo que resumiré los objetos de acceso a datos en una fábrica abstracta para que la implementación quede oculta de la aplicación.

Cómo lo hace depende de usted, siempre que elija un patrón de diseño probado y conocido para la implementación, creo que su producto final será bien compatible y robusto.

0

Echa un vistazo a Code Camp Server para una buena aplicación de referencia que hace esto mismo y como @haacked dijo resumen que se aleja para mantenerlos separados.

1

Creo que Billy McCafferty's S#arp Architecture es un buen ejemplo del uso de ASP.NET MVC con una capa de acceso a datos (usando NHibernate como predeterminado), inyección de dependencia (Ninject atm, pero hay planes para admitir el CommonServiceLocator) y prueba impulsado por el desarrollo. El marco todavía está en desarrollo, pero lo considero bastante bueno y estable.A partir de la versión actual, debe haber pocos cambios de ruptura hasta que haya una versión final, por lo que la codificación en contra de ella debería estar bien.

0

Utilice LINQ. Cree un archivo LINQ to SQL y arrastre y suelte todas las tablas y vistas que necesite. Luego, cuando llame a su modelo, todas las cosas del nivel CRUD se crearán automáticamente para usted.

LINQ es lo mejor que he visto en mucho tiempo. Aquí hay algunas muestras simples para obtener datos del blog de Scott Gu.

LINQ Tutorial

0

que acabo de hacer mi primer proyecto MVC y utilicé un patrón de diseño Servicio-repositorio. Hay una buena cantidad de información al respecto en la red en este momento. Hizo mi transición de Linq-> Sql a Entity Framework sin esfuerzo. Si crees que vas a cambiar mucho, pon en el pequeño esfuerzo extra para usar Interfaces.

Recomiendo Entity Framework para su DAL/repositorio.

1

He hecho algunas aplicaciones de MVC y he encontrado una estructura que funciona muy bien para mí. Se basa en Rob Conery's MVC Storefront Series que JPrescottSanders mencionó (aunque el enlace que publicó es incorrecto).

Así que aquí va - Por lo general, trato de restringir mis controladores para que solo contengan lógica de vista. Esto incluye la recuperación de datos para pasar a las vistas y la asignación de datos pasados ​​de la vista al modelo de dominio. La clave es intentar mantener la lógica empresarial fuera de esta capa.

Para este fin suelo terminar con 3 capas en mi aplicación. El primero es la capa de presentación: los controladores. El segundo es la capa de servicio: esta capa es responsable de ejecutar consultas complejas, así como de validación. La tercera capa es la capa de repositorio; esta capa es responsable de todo el acceso a la base de datos.

Así que en su productos ejemplo, esto significaría que tendría un ProductRepository con métodos tales como GetProducts() y SaveProduct (producto). También tendría un ProductService (que depende del ProductRepository) con métodos como GetProductsForUser (usuario de usuario), GetProductsWithCategory (categoría de categoría) y SaveProduct (producto de producto). Cosas como la validación también sucederían aquí. Finalmente, su controlador dependería de su capa de servicio para recuperar y almacenar productos.

Puede omitir la capa de servicio, pero generalmente encontrará que sus controladores engordan y tienden a hacer demasiado. He probado esta arquitectura bastantes veces y tiende a funcionar muy bien, especialmente porque es compatible con TDD y pruebas automatizadas muy bien.

0

Creo que necesita un orm.

por ejemplo marco entidad (código primero)

puede crear alguna clase de modelo.

utilice estos modelos para su lógica y visualización, y correlacionándolos con db (v1).

cuando dba le da un nuevo db (v2), solo cambie la configuración de asignación (v1 y v2 son todos rdb, servidor sql, mysql, oracel ...), si db (v1) es un rdb y db (v2) es un nosql (mongo, redis, couchbase ...), Que no hay trabajo

puede ser necesario hacer un poco de búsqueda y reemplazo

Cuestiones relacionadas