Cohesion y acoplamiento

Solo disponible en BuenasTareas
  • Páginas : 34 (8301 palabras )
  • Descarga(s) : 0
  • Publicado : 9 de mayo de 2011
Leer documento completo
Vista previa del texto
Cohesión y acoplamiento
Jeremy Miller
 Contenido
Disminución del acoplamiento
Aumento de la cohesión
Eliminación de la intimidad inapropiada
La Ley de Demeter
Diga, no pregunte
Dígalo una vez, sólo una vez
Conclusión
Gran parte del diseño de software implica una pregunta constante: ¿a dónde quiero llegar con este código? Siempre estoy buscando la mejor manera de organizar micódigo para hacerlo más fácil de escribir, más fácil de comprender y más fácil de modificar después. Si consigo estructurarlo bien, me traerá fama y gloria. Pero si lo estructuro mal, los desarrolladores que me sucedan maldecirán mi nombre por toda la eternidad.
Me gustaría, en particular, alcanzar tres objetivos específicos en la estructura de mi código:
1. Mantener los elementos quenecesiten modificarse a la vez lo más juntos posible dentro del código.
2. Permitir que elementos no relacionados en el código sean modificados de forma independiente (lo que también se conoce como ortogonalidad).
3. Minimizar la duplicación en el código.
Para lograr estos tres objetivos, necesito algunas herramientas que me ayuden a saber dónde incluir código nuevo y de otras que me ayuden areconocer cuándo pongo código en el lugar incorrecto.
Por lo general, esas metas están estrechamente relacionadas con las cualidades clásicas de código conocidas como cohesión y acoplamiento. Consigo alcanzarlas cuando avanzo hacia una mayor cohesión y menor acoplamiento. Lógicamente, primero necesitamos entender lo que estas cualidades significan y por qué el acoplamiento y la cohesión sonconceptos útiles. Después me gustaría abordar un poco lo que llamo "vectores de diseño", que nos ayudan a obtener mejores estructuras y a reconocer cuándo es necesario deshacerse de malas estructuras que se cuelan en nuestro código.
Sólo a título de observación, soy el desarrollador principal de una herramienta IOC (inversión del control) de código abierto llamada StructureMap. Voy a utilizaralgunos ejemplos reales de StructureMap para ilustrar los problemas de diseño tratados por esos vectores. O sea, no cometa los mismos errores que yo cometí.

Disminución del acoplamiento
Es inevitable oír las expresiones "acoplamiento débil" o "acoplamiento fuerte" en casi todos los debates sobre diseño de software. El acoplamiento entre clases o subsistemas es una medida de interconexiónentre esas clases o subsistemas. El acoplamiento fuerte significa que las clases relacionadas necesitan saber detalles internos unas de otras, los cambios se propagan por el sistema y el sistema es posiblemente más difícil de entender. La figura 1 muestra una ejemplo ficticio de un módulo de procesamiento de negocios con fuerte acoplamiento a otras cuestiones que van más allá de la lógica denegocios.
 Figura 1 Código con acoplamiento fuerte
public class BusinessLogicClass {
public void DoSomething() {
// Go get some configuration
int threshold =
int.Parse(ConfigurationManager.AppSettings["threshold"]);

string connectionString =ConfigurationManager.AppSettings["connectionString"];

string sql =
@"select * from things
size > ";

sql += threshold;

using (SqlConnection connection =
new SqlConnection(connectionString)) {connection.Open();

SqlCommand command = new SqlCommand(sql, connection);
using (SqlDataReader reader = command.ExecuteReader()) {
while (reader.Read()) {
string name = reader["Name"].ToString();
string destination =...
tracking img