Ver Mensaje Individual
  #3 (permalink)  
Antiguo 19/06/2015, 00:37
Avatar de Malenko
Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: [Aporte] Sistema de Ventas en C# y SQL Server

Un aporte interesante, aunque me gustaría comentar varios puntos...

Capa de datos:
- En Dconexion tienes la cadena de connexión hard-coded. Lo más correcto sería obtenerla del app.config. Además te recuerdo que los usuarios que aparezcan en la cadena de conexión han de tener la menor cantidad de privilegios posibles y, opcionalmente, puedes encriptar la cadena de conexión.
- Tendrías que separar las entidades en POCO's e implementar el acceso a BBDD mediante repositorios. Mi recomendación además sería que usaras toda la potencia que te pueden dar los ORM como NHibernate o Entity Framework. Por otro lado, veo que no estás haciendo el Dispose de las connexiones ni de los commands (SqlConnection y SqlCommand).
- Otro tema aparte es que tendrías que evitar tener lógica de aplicación/negocio en la BBDD. Tendrías que mirar de pasar, en la medida de lo posible, los storeds a métodos de tu aplicación.

Capa de Negocio:
- Tienes un error bastante importante y es que en la capa de datos en caso de excepción la lanzas hacia la capa de arriba, pero en la capa superior (la de Negocio) no las estás tratando.
- Los métodos insertar tienen una gran cantidad de parámetros con los que luego montas la entidad. Sería bastante más limpio recibir la entidad (de ahí la importancia de usar POCOs para usarlos como DTO's entre capas de la aplicación).
- En cambio con el eliminar el método obtiene un Id pero luego montas una entidad "dummy" para pasarla a la capa de datos y de ahí solo volver a obtener el Id. No sería mejor pasar directamente el Id?

Capa de Presentación:
- No la he podido revisar a fondo

Notas generales:
- No veo ningún summary ni ningún tipo de documentación del código
- No hay tests de ningún tipo.
- Tendrías que usar tu propia implementación de la Excepción (extender la clase base)
- Personalmente, por trazabilidad, guardaría un registro de los errores en un log.
- No usas interfaces por ningún lado y tampoco contenedores de inyección de dependencias. Usando ambas cosas podrías hacer la aplicación más extensible y poder cambiar modulos "en caliente", etc.

Como me parece un "ejercicio educativo" interesante y dará bastante valor añadido al hilo, voy a mirar de crear una versión "mejorada" (según mi punto de vista, claro) y la subiré aquí mismo (bueno, el enlace al github).
__________________
Aviso: No se resuelven dudas por MP!