Mencionas los patrones de diseño y el acoplamiento. Estos son conceptos separados, así que los trataré por separado. La única conexión real es que los patrones de diseño tienden a promover el acoplamiento suelto (ya que es un aspecto importante del buen diseño).
Patrones de diseño
El concepto de patrones de diseño es bastante simple: son solo un conjunto de plantillas sobre cómo tratar varios problemas comunes. Hay 2 razones principales por las que son populares:
- Están 'probados': se han usado muchas veces y los beneficios / inconvenientes de cada uno son generalmente conocidos, en particular, se conocen problemas sutiles que podrían causar grandes problemas.
- Proporcionan un conjunto común de terminología y, por lo tanto, permiten una comunicación más fácil. Si alguien dice que "la clase X desempeña el papel de observador en el patrón de observador", los desarrolladores que están familiarizados con el patrón pueden comprender de inmediato lo que está pasando.
¿Cómo sabes que lo has implementado correctamente? Esa es una trampa difícil. Para la mayoría de los patrones es simple: o lo has mezclado o no. Algunos patrones están menos definidos que otros, por ejemplo, model-view-controller . Los patrones de este tipo se utilizan mejor como pautas generales. Los detalles específicos de cómo implementarlo son menos importantes que la comprensión de las razones por las que existe el patrón y lo que se pretende lograr.
Los patrones de diseño no son "la única manera verdadera". A menudo, tendrá que adaptarlos para sus propósitos específicos o, a veces, simplemente no habrá ningún patrón que se ajuste a los requisitos. Forzar un patrón de diseño donde no encaja es una mala idea; Es como usar un martillo realmente bueno cuando lo que realmente quieres es un destornillador.
Acoplamiento
Esta es una idea muy importante en informática. Dado que los requisitos para la mayoría de los proyectos de software cambian con el tiempo (a veces de manera significativa), entonces la capacidad de un diseño para enfrentar los cambios es importante. El acoplamiento es básicamente la medida de "¿qué tan difícil sería cambiar este componente por otro?" El 'componente' podría ser un método, clase, paquete, biblioteca, etc.
Hay varios tipos de acoplamiento listados en este artículo de Wikipedia .