Definitivamente no.
Creo que parte de la razón por la que uno podría pensar es que hay 2 tipos diferentes de reutilización y muchas, si no la mayoría de las personas, parecen centrarse en solo una de ellas.
Un tipo es la reutilización genérica. Este es el tipo de reutilización que obtiene de bibliotecas, marcos y estándares. Esta reutilización ha existido y ha tenido éxito casi siempre que la gente haya escrito software. Este es principalmente el tipo de reutilización que los otros comentarios han abordado.
- ¿Existe realmente mucho ageism en la industria del desarrollo de software?
- Soy un graduado de CS y quiero convertirme en un buen arquitecto de software. ¿Qué tengo que hacer?
- ¿Cuál es la diferencia entre un desarrollador de software y un investigador?
- Soy estudiante de ingeniería mecánica y me encargo del desarrollo de software. ¿Me equivoco?
- ¿Cuáles son las mejores prácticas para que una persona no técnica se comunique con los desarrolladores?
El otro tipo de reutilización es más difícil de etiquetar pero mucho más importante para la gran mayoría de los desarrolladores. Se reutiliza específicamente para su maravillosa aplicación personalizada. Espero que un buen ejemplo de lo que quiero decir sea la reutilización de UIView en las plataformas móviles de Apple. Las vistas proporcionadas por los marcos de Apple son muy genéricas y muy reutilizables. La clase UIView se usa como una clase base de casi toda la interfaz de usuario. UILabels, UITextFields y UITextViews están en casi todas partes donde hay texto. Muy reutilizable
Apple ha hecho un muy buen trabajo al proporcionar los elementos básicos para una aplicación. El problema es que los desarrolladores parecen centrarse en crear más tuercas y tornillos para su aplicación en lugar de piezas personalizadas reutilizables específicas de la aplicación. Por ejemplo, los desarrolladores parecen ser reacios a crear vistas reutilizables personalizadas en la aplicación basadas en los componentes reutilizables proporcionados por el marco.
Cómo lo veo hecho:
Vamos a crear una aplicación de Contactos. Uno debería asumir que una vista fundamental en una aplicación de Contactos son los nombres de las personas. La aplicación mostrará este texto en la vista de lista, una vista de tabla, una vista de detalle, una vista de búsqueda y más. Cuando miro las implementaciones de las aplicaciones de contactos de demostración por individuo e incluso por Apple, esto se maneja con etiquetas “genéricas reutilizables” en todas partes con el formato y el contenido de esas etiquetas configuradas en controladores y guiones gráficos. Piensan que se supone que la vista no debe conocer los modelos, por lo que su etiqueta de nombre genérico no sabe nada sobre el nombre de una persona. Cada controlador debe saber cómo extraer el nombre del usuario del modelo de persona y establecerlo en una etiqueta genérica específica. Una y otra y otra vez. Esto da como resultado toneladas de contenido específico de modelo y vista en controladores y vistas tontas (¡pero reutilizables!) Que deben reconfigurarse para cada caso de uso. Dado que el desarrollador de la aplicación no programó las bibliotecas de framework, muy poco del código específico de su aplicación se está reutilizando. El desarrollador está usando las reglas para crear una biblioteca genérica ( no incluya código específico del modelo, sea lo más genérico posible) cuando debería usar las reglas para crear una hermosa aplicación personalizada (solo escriba lo que sea específico para su aplicación. Eso es lo que la convierte en tu aplicación)
Cómo debe hacerse:
Esa vista genérica de la biblioteca no era la intención de las vistas orientadas a objetos. En el nivel de la aplicación, están destinados a ser vistas específicas de un objeto específico . En nuestro caso, el nombre de una persona. Lo primero que debe hacer el desarrollador es crear una vista específica del modelo para ver el nombre de una persona. Es por eso que se llaman ‘puntos de vista’. Esta vista toma un modelo de persona y sabe todo sobre el nombre de una persona. Se ocupa del formato, la apariencia, el orden de las palabras del nombre. Todo lo que hace el controlador es pasar el modelo personNameView a person. Eso es. Nada mas. Ahora el desarrollador puede reutilizar su personNameView en todos los lugares donde se muestra el nombre de una persona en la aplicación. AHORA tiene una fácil reutilización del código específico de la aplicación que da como resultado controladores más pequeños, guiones gráficos más genéricos y una vista muy fácil de modificar del nombre del contacto. Si desea cambiar la fuente del nombre. Lo cambia una vez para personNameView y toda la aplicación usa la nueva fuente para el nombre de la persona. No es necesario realizar ningún cambio en un guión gráfico. También obtienes consistencia fácil en apariencia en toda tu aplicación.
Estas vistas personalizadas específicas del modelo se pueden componer. Una vista de resumen de persona personalizada puede consistir en la persona personNameView y una persona personAvatarView. Este personSummaryView ahora se puede reutilizar en una celda de vista de colección, una celda de vista de tabla, la parte superior de la vista de contacto y en cualquier otro lugar donde de repente necesite un personSummaryView. En el nivel del controlador, el controlador todavía solo pasa un modelo de persona. Si el controlador está manejando un personNameView o un personAvatarView o un personSummaryView, no es necesario realizar cambios en el controlador. Todas las vistas solo toman un modelo de persona. La vista conoce personas, no controladores. Más reutilización del código del desarrollador de la aplicación.
Crear bibliotecas reutilizables es difícil. Crear componentes personalizados reutilizables específicos de la aplicación es fácil. Hace que el desarrollo de aplicaciones sea más rápido y fácil. Y, según lo que veo en el código de muestra de GitHub y Apple, casi no lo practican suficientes desarrolladores.