Como esta pregunta parece ser bastante subjetiva, la publico aquí.
Digamos que usted está escribiendo su propia versión de Stackoverflow usando ASP.NET MVC, por lo que hay clases como Question
, Answer
, User
, etc Dado que usted es perezoso, ha decidido usar marco de la entidad. Por lo tanto, todas las clases mencionadas anteriormente tienen propiedades de navegación: Question
conoce sus Answer
s, Answer
sabe User
quién lo publicó, etc.
Usted ha leído muchos libros de Martin Fowler, por lo que seguramente tendrá una capa de servicio para implementar toda la lógica de negocios allí. Utilizará ASP.NET MVC solo para la interfaz de usuario y la funcionalidad relacionada con la lógica de la aplicación.
Hay 2 preguntas:
- Va a exponer directamente los objetos de
Question
,Answer
y otros a los controladores? - ¿Harás lo mismo para las vistas?
Básicamente, no voy a proporcionar una API REST a mi aplicación, ni soy demasiado conservador para tener miedos como "oye, MI VISTA es consciente de lo que Question
es, no sé si es malo o no, ¡Simplemente no me gusta! ".
Tengo especial curiosidad sobre el caso cuando la Question
clase tiene un campo como TimePosted
y vincula su PostNewQuestion
vista a esa clase. Sé que en caso de que no enlace ese campo a ningún control de la página, no se publicará, por lo que tendré ese campo configurado null
cuando tenga el objeto en el lado de mi controlador. ¿Se considera bien o es una mala idea? Dos enfoques opuestos en los que estoy pensando son "usar DTOs / ViewModels en todas partes" y "¡Wtf, menos clases siempre es mejor!"
¿Cuál crees que es un enfoque correcto ? (Sé que no hay una respuesta directa, por lo que la pregunta es "¿qué se debe considerar para decidir si usar DTO / ViewModels / Cualquier otra cosa es buena para la arquitectura de su aplicación?")
También tenga en cuenta que estamos considerando un clon muy simplificado de Stackoverflow, así que:
- Es un proyecto solo web (no vamos a exponer REST API o cualquier otra cosa)
- Hay usuarios, preguntas, respuestas, etiquetas y funcionalidad de búsqueda (sin lógica de negocios excepcional)
- Hay como 100 usuarios activos por día (sin requisitos especiales de rendimiento)
- El código debe ser legible y no debe haber sorpresas o lugares de especial interés en caso de que un nuevo miembro se una al equipo de desarrollo.
También puede expresar su opinión en caso de que alguno de los primeros 3 puntos cambie: "el cliente ahora quiere que nuestro servicio permita 10000 usuarios simultáneos" o "ahora solo debemos permitir que cada usuario publique una vez cada 15 minutos", etc.
¡Gracias!
fuente