Estoy tratando de aprender GRASP y encontré esto explicado ( aquí en la página 3 ) sobre Acoplamiento bajo y me sorprendió mucho cuando encontré esto:
Considere el método
addTrackpara unaAlbumclase, dos métodos posibles son:
addTrack( Track t )y
addTrack( int no, String title, double duration )¿Qué método reduce el acoplamiento? El segundo sí, ya que la clase que usa la clase Álbum no tiene que conocer una clase Track. En general, los parámetros de los métodos deben usar tipos base (int, char ...) y clases de los paquetes java. *.
Tiendo a estar de acuerdo con esto; Creo que addTrack(Track t)es mejor que addTrack(int no, String title, double duration)por varias razones:
Siempre es mejor que un método tenga la menor cantidad de parámetros posible (de acuerdo con el Código de limpieza del tío Bob, ninguno o uno preferiblemente, 2 en algunos casos y 3 en casos especiales; más de 3 necesitan refactorización; estas son, por supuesto, recomendaciones, no reglas de acebo) .
Si se
addTracktrata de un método de una interfaz, y los requisitos necesitan queTrackse tenga más información (por ejemplo, año o género), entonces la interfaz debe cambiarse y el método debe admitir otro parámetro.La encapsulación está rota; si
addTrackestá en una interfaz, entonces no debe conocer los elementos internos deTrack.En realidad, está más acoplado en la segunda forma, con muchos parámetros. Supongamos que el
noparámetro necesita ser cambiado deintalongporque hay más deMAX_INTpistas (o por cualquier razón); entonces, tanto elTrackmétodo como el método deben cambiarse, mientras que si el método fueraaddTrack(Track track)solo elTrack, se cambiaría.
Los 4 argumentos están realmente conectados entre sí, y algunos de ellos son consecuencias de otros.
¿Qué enfoque es mejor?