Estoy tomando mi primera aplicación de nivel empresarial y quiero que mi equipo modele toda la aplicación ASP.NET MVC C # incluso antes de que toquemos una línea de código.
ACTUALIZACIÓN: Esto no pretendía ser una discusión filosófica sobre cuándo documentar / modelar una aplicación. Solo proporcione respuestas para "cómo" documentar / modelar.
La verdad es que siempre he escatimado en este departamento y nunca antes había modelado una aplicación. ¿Cuál es la forma estándar de hacer esto? ¿Qué tipo de diagramas deberían usarse y cómo se vería la documentación? Se agradecen los enlaces a diagramas de muestra y documentación.
Cuando busco, puedo encontrar numerosas cosas en la red, pero quería ver si existe un consenso moderno actual sobre cómo hacerlo.
¡Gracias por adelantado!
Frase de cierre
No tenía idea de que este era un tema tan difícil. Gracias a todos los que pudieron dejar de lado la controversia obvia y proporcionar respuestas útiles. Fue una discusión interesante por decir lo menos :)
Otro enlace útil que descubrí es este: /programming/61487/do-you-use-uml-in-agile-development-practices/61519#61519
fuente
Respuestas:
La verdad es que, actualmente, eso es algo de lo que carece el desarrollo moderno de software: un consenso sobre el modelado. UML parece ser algún tipo de divisor común más pequeño, pero en realidad solo hay consenso sobre la notación, no sobre la semántica. Existen docenas de opiniones diferentes sobre cómo se debe interpretar UML para crear código (tal vez pueda encontrar una interpretación que esté bien para su equipo).
Por otro lado, hay una guerra santa entre esas personas "ágiles" que dicen "no hagas modelos formales, mejor escriban código de trabajo" y esas personas "BDUF" (gran diseño por adelantado) que piensan en herramientas como " MDA "(arquitectura basada en modelos) son la solución.
Otras personas (re) descubrieron la programación basada en flujo para el diseño de software moderno como una alternativa para UML. Lea aquí y aquí para obtener más información al respecto.
fuente
El problema que generalmente encuentro con este enfoque es que mi comprensión de la solución siempre es incompleta al principio. Solo a través del refinamiento a medida que avanza el trabajo, llego a una solución final.
Tratar de diseñar toda la aplicación por adelantado, antes de que cualquier código (en todas las aplicaciones, excepto las más simples) sea generalmente una locura.
¿Realmente cree que puede diseñar cada clase y método y estructura de datos en detalle de antemano?
En cuanto a las herramientas reales para hacer modelos, he probado algunas y siempre termino en Microsoft Visio.
De todos los productos que he probado, parece el más sencillo y, de hecho, estable (mi experiencia con las herramientas de modelado es que tienen muchos errores). Para ser justos, hago muy poco modelado, así que tome esta recomendación con un grano de sal.
EDITAR: En realidad, debería decir que la mayor parte de mi modelado se realiza en un bloc de notas que se encuentra en mi escritorio. Debido a que modelo poco, trato de mantenerlo ligero y al grano. Dibujar un diagrama con lápiz y papel es mucho más eficiente para mí que usar un software.
Puede encontrar diagramas escritos a mano útiles para formar sus ideas, antes de presentarlas en un software de diagramación.
La mayoría de lo que modelo en estos días son diagramas de interacción. Nuevamente, no hago mucho modelado, solo donde realmente siento que el ejercicio de dibujar el modelo ayuda a consolidar mi comprensión.
fuente
Los diagramas UML son un buen lugar para comenzar, hay muchas maneras fáciles de hacerlo con software gratuito o de pago. Un ejemplo simple de una herramienta para hacer un UML es algo así como dibujos de Google Docs, los paquetes más avanzados serían Visio u OmniGraffle.
EDITAR: Como mencionan muchos, si tuviera que seguir el camino de UML, eso no significa que tenga que modelar completamente todo, pero puede llegar a un consenso sobre lo que está modelando y qué tan detallados necesitan los modelos para ser. Los diagramas UML simples a menudo pueden ayudar a diseñar su código antes de escribirlo, y aclarar algunos problemas potenciales antes de que surjan.
fuente
Como sugirió @Brett, los diagramas UML son los mejores. Con UML es bueno tener diagramas de clase y diagramas de flujo de trabajo. Estos dos cubrirían la mayoría de las necesidades de diseño.
Con el diagrama de clases, puede modelar los miembros de cada entidad, su nivel de seguridad, etc.
Con el diagrama de flujo de trabajo, puede modelar qué método llama a qué llamadas, cuál es el resultado del flujo de trabajo y cuál sería la excepción que puede aparecer.
fuente
Si bien creo firmemente en hacer algunos dibujos arquitectónicos básicos antes de escribir el código, creo que hacer un dibujo detallado de toda la aplicación es demasiado trabajo.
Por lo general, creo algunas imágenes de esquema en Visio, a menudo utilizando los bloques de construcción del "diagrama de flujo" para visualizar lo que quiero decir. El uso de UML a menudo se siente formalizado e invita a demasiados detalles. Los dibujos de Visio muestran los componentes básicos de la aplicación y qué tipo de funcionalidad va a dónde. Si está utilizando el marco MVC, la mayoría de las veces se realiza con solo tomar un dibujo de muestra de la web y copiarlo.
Una buena idea es hacer algunos dibujos desde otros puntos de vista. En lugar de dibujar todo, a menudo prefiero tomar una función específica del sistema y luego visualizarla como:
Entonces comenzamos a codificar. Mientras codifico, uso doxygen con la integración de puntos para obtener diagramas de clase sobre la marcha, herencia, etc. Ver la descripción general generada por doxygen es a menudo una muy buena manera de ver la estructura del código.
fuente