La reutilización es una característica del buen diseño de software .
¿Es la reutilización un brillo aceptable ("breve notación del significado") para un buen diseño de software? ¿Por qué?
design
terminology
Matthew Rodatus
fuente
fuente
Respuestas:
No.
La reutilización es un indicador de buen diseño. Indica que el acoplamiento del sistema es lo suficientemente flexible y la cohesión de una unidad en particular es lo suficientemente alta como para facilitar la reutilización sin tener problemas de dependencia o tener que reescribir la mayor parte del código.
La reutilización es en gran medida una ilusión. Es verificablemente imposible medir la "reutilización" de una unidad sin saber de antemano dónde o cómo se va a utilizar. Muchos desarrolladores intentarán diseñar componentes "reutilizables" y a menudo descubrirán más tarde que los aspectos específicos que intentaron hacer "flexibles" son exactamente los que no tenían que ser.
Yo usaría un "brillo" diferente: Testabilidad.
Ahora no soy un defensor de TDD, ni siento la necesidad de probar algo y todo. Pero escribir pruebas para un componente le dará una muy buena idea de sus características de acoplamiento / cohesión, y muy rápidamente. Si depende de abstracciones, entonces eso es acoplamiento flojo; le resultará fácil burlarse de las dependencias y eso sugiere un buen diseño. Si tiene un propósito claro (vea también el Principio de responsabilidad única ), entonces su comportamiento será relativamente intuitivo, le resultará fácil descubrir qué probar, lo que nuevamente sugiere un buen diseño.
Eso, por supuesto, no garantiza un buen diseño; la implementación real o incluso toda la arquitectura puede ser completamente inapropiada para su propósito declarado. Pero al menos te dice que no estás trabajando con código de espagueti ni con Objetos de Dios.
Por favor, no intente hacer suposiciones descabelladas sobre la "reutilización" de un componente, especialmente para no usarlo como evidencia de "buen diseño". Eso es algo que solo puede establecer en retrospectiva, una vez que realmente se reutiliza, y para entonces el diseño puede haber cambiado significativamente.
fuente
No.
La reutilización es una buena característica, ya que puede acelerar el desarrollo futuro. (Aunque en la práctica muy pocas organizaciones ven el desarrollo futuro acelerado casi tanto como esperaban que fuera). Sin embargo, cualquier pieza importante de software tiene partes que son específicas de esa aplicación. Y, además, cuando las personas sin experiencia en el dominio intentan escribir software reutilizable, generalmente ofuscan esa pieza y reducen el rendimiento sin tener éxito en hacerlo reutilizable.
Por lo tanto, el buen diseño es modular y reutilizable solo donde puede ver que la pieza se puede reutilizar y donde tiene la experiencia para lograr la reutilización. En otros lugares, debe intentar limpiar todo pero no se preocupe por la reutilización. (Excepto en la parte posterior de su cabeza donde está tomando notas para que en algún sistema futuro tenga una idea de cómo hacer que sea reutilizable).
fuente
Creo (y esta es mi creencia personal) que la relación entre la reutilización y el buen diseño no es reflexiva, por lo que la respuesta básica y simple es no . Si está interesado en algunas buenas guías de diseño, consulte este artículo de Wikipedia.
Un buen diseño de software debe ser reutilizable, al menos en algunas partes centrales, creo que muy poca gente hace una reutilización real del código fuente, debido al hecho de que es extremadamente complejo diseñar el núcleo de un sistema para que sea reutilizable en muchos contextos diferentes (Y lo digo por experiencia)
Considere una clase con una gran cantidad de responsabilidades (también conocida como Blob) que realiza bien todas las tareas que necesita, pero sin ningún tipo de consideraciones de diseño, tal vez haya visto el caso. La mayoría de las personas con una clase como esa la usarían una y otra vez y creo que tendremos que aceptar que es reutilización, reutilización sin diseño.
Espero no haber estropeado mis explicaciones demasiado
fuente
Creo que un mejor indicador del buen diseño es la adhesión a ideas fundamentales, como el principio de responsabilidad única y el mantenimiento de la cohesión de cada componente. Al usar abstracciones con una interfaz limpia y concisa y mantener el cumplimiento con el Director de sustitución de Liskov , alentamos la reutilización sin tratar de predecir qué se reutilizará y qué no.
Cumplir con estos principios de diseño fundamentales hace que el código sea más fácil de probar y más fácil de reutilizar.
Buen diseño == buen diseño, la reutilización es un subproducto.
fuente
La reutilización es a menudo un objetivo de diseño implícito. Si puede crear un componente, o un diseño completo, de tal manera que pueda reutilizarse más tarde, parece obvio que debería hacerlo. Lo que no siempre es obvio es que puede llevar mucho tiempo y esfuerzo (y dinero) hacer que algo sea reutilizable, por lo que el beneficio de la reutilización debe sopesarse frente a su costo.
Un diseño reutilizable que cuesta el doble y / o toma el doble de tiempo de lo que el cliente necesita no es un buen diseño desde la perspectiva del cliente, particularmente si el cliente no necesita reutilización.
Hay una serie de atributos similares que a menudo se consideran objetivos de diseño implícitos porque parecen obviamente buenos:
minimizando el costo
minimizando el tiempo de desarrollo
minimizando la complejidad
maximizando la confiabilidad
Todas estas cosas son objetivamente buenas, pero puede que no siempre sean importantes para un cliente en particular en un momento determinado, por lo que es importante comprender completamente lo que su cliente necesita (incluso si ese cliente es solo su jefe). Hay una serie de aforismos destinados a recordarnos este hecho (por ejemplo, "Listo es mejor que perfecto" y "Bueno, barato, rápido: elige cualquiera de los dos"), pero aún así es fácil caer en la trampa de intentar haga un software que sea excelente en todos los aspectos cuando de hecho no siempre es necesario en todos los aspectos.
Para llegar a la pregunta del título, entonces: No , la reutilización no es sinónimo de buen diseño. La reutilización puede ser un componente útil de un buen diseño en particular, pero solo cuando es necesario.
fuente
No necesariamente. Si haces algo reutilizable que claramente nunca se reutilizará, entonces ese es un mal diseño.
Por ejemplo, si está escribiendo un archivo lleno de datos que es exclusivo de su empresa y esos datos deben importarse una vez a otro lugar, ¿por qué molestarse en volverlos reutilizables?
Dicho esto, si su marco aún no tiene uno, el código para escribir en un archivo puede necesitar ser reutilizable. Eso sería un buen diseño.
fuente
Yo diría que no, principalmente porque solo describe un pequeño segmento de código. He descubierto que donde la usabilidad es más importante es en el núcleo y en los bordes exteriores del territorio de servicios públicos, no tanto en el medio. Daré algunos ejemplos de cosas en las que creo que la reutilización es una métrica útil de diseño de calidad.
Cosas centrales
Cosas de utilidad
Para las cosas CRUD que ocupan el 70-80% de la mayoría de las aplicaciones, simplemente no creo que la reutilización sea una métrica valiosa en absoluto.
fuente