Pregunta

Creé una aplicación de escritorio simple en C# 3.0 para aprender algo de C#, wpf y .Net 3.5.Básicamente, mi aplicación lee datos de un archivo csv y los almacena en una base de datos CE del servidor SQL.Utilizo sqlmetal para generar el código ORM para la base de datos.Mi primera versión de esta aplicación es tremendamente fea y estoy en el proceso de refactorizarla.

Lo cual me lleva a mi pregunta.¿Cómo diseñarías una aplicación de base de datos de escritorio en C#?¿Cuáles son las mejores prácticas?

¿Crea una capa de abstracción de base de datos (DAL) que utiliza el código generado por sqlmetal?¿O el código generado es una abstracción suficiente?

Si utiliza el patrón DAL, ¿lo convierte en un miembro único o estático?¿Utiliza el patrón View-Model-ModelView con el patrón DAL?

Disculpas si esto parece una pregunta abierta y larga, pero he estado pensando mucho en esto últimamente.Veo muchos ejemplos sobre cómo diseñar una aplicación empresarial de n niveles en C#, pero no tantos sobre cómo diseñar aplicaciones de escritorio independientes.

¿Fue útil?

Solución

Yo comenzaría con el Guía de aplicación compuesta para WPF (tos PRISMA tos) del equipo de P&P de Microsoft.Con la descarga viene una excelente aplicación de referencia que es el punto de partida para la mayor parte de mi desarrollo actual de WPF.

El Equipo DotNetRocks recién entrevistado Glenn bloque y Brian Noyes sobre esto si está interesado en saber más de ellos.

Aún mejor, Prism no es tan pesado como lo era el CAB, si está familiarizado con él desde los días de WinForms.

Otros consejos

La respuesta es "depende", como siempre.

Algunas cosas en las que pensar:Es posible que desee convertir esta aplicación de cliente pesado en una aplicación web (por ejemplo) en algún momento.Si es así, debes asegurarte de mantener la separación entre la capa empresarial (y la inferior) y la presentación.La forma más sencilla de hacer esto es asegurarse de que todas las llamadas a la lógica empresarial pasen por una interfaz de algún tipo.Una forma más compleja es implementar una configuración MVC completa.

Otra cosa que puede considerar es hacer que la capa de acceso a datos sea independiente de la lógica empresarial y la interfaz de usuario.Con esto quiero decir que todas las llamadas desde la lógica de negocios al DAL deben ser genéricas "obténme estos datos" en lugar de "obtén estos datos de SQL" o, peor aún, "ejecute esta declaración SQL".De esta manera, puede reemplazar su DAL por uno que acceda a una base de datos diferente, a archivos XML o incluso a algo asqueroso como archivos planos.

En definitiva, separación de preocupaciones.Esto le permitirá crecer en el futuro agregando una interfaz de usuario diferente, segmentando las tres áreas en su propio nivel o cambiando la tecnología relevante.

Antes de diseñar cualquier cosa, debes definir los requisitos para tu aplicación.
Es un error común de los desarrolladores principiantes: comenzar a escribir código antes de pensar en su rendimiento.Mi consejo será intentar describir alguna característica de su aplicación.Le ayudará a sentir cómo se debe implementar.

En cuanto a recursos de aprendizaje útiles, le recomiendo que eche un vistazo a CompuestoWPF Es un proyecto diseñado específicamente para enseñar a los desarrolladores las mejores prácticas en el desarrollo de aplicaciones de escritorio.

Yo empezaría con el de Jeremy Miller. Construya su propia cabina serie.

Fui uno de los primeros en adoptar CAB.Aprendí mucho profundizando en esa tecnología y leyendo todos los blogs de .NET sobre arquitectura de aplicaciones.

Pero recientemente tuve la oportunidad de comenzar un nuevo proyecto y, en lugar de usar CAB, elegí StructureMap y NHibernate y tomé prestados algunos de los patrones que usa Jeremy (en particular, su forma de manejar la agregación de eventos).El resultado fue un marco realmente simplificado y hecho a mano que hace todo lo que necesito y me encanta trabajar con él.

En cuanto a los detalles de su pregunta:Utilizo un repositorio para acceder a los datos.Inicialmente escribí algo de código ADO.NET, usé lectores de datos y mapeé mis objetos.Pero eso se volvió obsoleto muy rápido, así que tomé NHibernate y quedé muy satisfecho.Los repositorios usan NHibernate para acceder a los datos y mis necesidades de acceso a los datos son bastante simples en esta aplicación en particular.

Tengo una capa de servicio (expuesta a través de WCF, canales dúplex) que utiliza los repositorios.Mi aplicación es básicamente cliente-servidor con actualización en tiempo real (y sé que su pregunta era solo sobre clientes, pero usaría las mismas tecnologías y patrones).oh

En el lado del cliente, utilizo MVP con StructureMap para IoC y algunas estrategias de agregación de eventos muy simples para comunicaciones entre clases.Codifico interfaces para casi todo.Lo único que hice fue tomar prestada del CAB la idea de un "espacio de trabajo" flexible para mostrar vistas dinámicamente.Sin embargo, escribí mi propia interfaz de Workspace e implementé mi propio DeckWorkspace y TableWorkspace para usarlos en mi aplicación (estas eran cosas realmente simples de escribir).

Muchas de mis decisiones en esta aplicación más reciente fueron el resultado de la experiencia y el dolor que sentí al usar otros marcos y herramientas.Esta vez tomé decisiones diferentes.Quizás la única manera de entender realmente cómo diseñar una aplicación es sentir el dolor de hacerlo mal de antemano.

Yo diría que sí, que podría estructurarse fácilmente hacia aplicaciones más pequeñas.Hay una curva de aprendizaje para comenzar, pero, sinceramente, me ayudó a comprender mejor WPF que intentar empezar desde cero.Después de comenzar un proyecto con CompositeWPF y luego comenzar otro proyecto sin él, me encontré intentando duplicar funciones de CompositeWPF por mi cuenta porque me perdí esas funciones.:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top