Actualmente tengo una buena comparación porque estoy trabajando en dos proyectos usando diferentes enfoques. Estoy lejos de afirmar que "esto es malo y esto es bueno" porque está escrito en algunos patrones. Conozco patrones, me gustan los patrones, pero nunca los sigo ciegamente para estar en lo cierto. Siempre uso lo que necesito actualmente para alcanzar los objetivos actuales.
En la primera aplicación, usando objetos de dominio a la vista, el desarrollo es muy rápido. Pocos cambios en pocos lugares y usted tiene propiedades adicionales, entradas de formularios, etc. No se preocupa por las capas, solo extiende/cambia el código y pasa a otro problema.
En la segunda aplicación, donde siempre hay un objeto para usar aquí, allí y en otro lugar, hay docenas de clases con el mismo aspecto, haciendo lo mismo y un montón de código de conversión entre varias versiones de los mismos objetos. Más malo es que algunos desarrolladores hacen algo de lógica en "esta versión" de clase, y otra lógica se hace en "esa versión". El desarrollo es muy doloroso y requiere una gran cantidad de pruebas después. Cambiar algo simple requiere mucha atención y es necesario cambiar mucho código. Realmente no me gusta esta aplicación porque todavía no he visto beneficios comerciales de este enfoque, al menos durante el año pasado (y estamos en la etapa de producción del año). Esta aplicación es tres-cuatro veces más costosa de desarrollar y mantener que la primera.
Por lo tanto, mi respuesta divertida sobre la pregunta es: depende. Si trabajas en equipo de 10 a 20 personas, te gusta venir al trabajo, tomar algunas cafeterías, hablar con un amigo, hacer algunas cosas simples e ir a casa, una gran cantidad de objetos intermedios y el código de conversión serán buenos para ti. Si tu objetivo es ser rápido y barato, si quieres enfocarte en la capa de negocios, nuevas funciones, cambios rápidos y mucho más si tocas el negocio del software y quieres cobrar tu proyecto (hacemos todo esto para finalmente venderlo, ¿verdad?), el segundo enfoque sería probablemente mejor.
+1, pero ¿qué pasa con objetos de dominio simple, como una Categoría, que solo tiene Id y etiqueta? Para algunas aplicaciones con muchos de estos, puede ser bastante molesto crear MyEntity {Id, Label} y MyDto {Id, Label}, donde lo único que difiere es el nombre. – mathieu
@mathieu - Obviamente puedes usar tu discreción cuando se trata de ejemplos como este :). Los objetos de dominio como su ejemplo no contendrían ninguna lógica de dominio y, por lo tanto, serían aceptables. – GenericTypeTea
bien eso es lo que pensé. si tiene algo de tiempo, ¿podría echarle un vistazo a este: http://stackoverflow.com/questions/3539108/asp-net-mvc-model-inheritance? No soy realmente nuevo con las cosas técnicas de asp.net mvc, pero para el diseño "filosófico", ¡podría usar algunos consejos! – mathieu