Acabo de salir de la universidad y me encuentro con algún código donde necesito reducir el acoplamiento. Pero no entiendo completamente todos los conceptos y me gustaría un simple ejemplo para ayudarme. Para empezar, tengo una clase de persona con un solo campo, nombre. Tengo un método dentro de esa clase para concatenar algún texto.Acoplamiento reductor ejemplo simple necesario para principiante
Sé que este es un ejemplo tonto, y la mayoría de las personas nunca considerarían reducir el acoplamiento en situaciones tan simples como esta, pero solo quiero un ejemplo simple que me ayude a comprender completamente el código y los conceptos.
En el código detrás de la ventana principal pongo un cuadro de texto y un botón. Cuando la ventana se carga, muestra el valor actual del campo persona x nombre. Cuando se hace clic en el botón, se llama al método x.PersonAddText. Actualmente, este ejemplo tiene un acoplamiento calculado en 8. Con un 3 para el evento de clic de botón y un 3 para el evento de ventana cargada.
¿Hay alguna manera, utilizando este ejemplo podemos bajarlo a menos de esto para uno o ambos?
continuación es todo mi código:
Mi persona Clase:
public class Person
{
//Fields
private string name;
//Properties
public string Name
{
get { return name; }
set { name = value; }
}
//Constructors
public Person()
{
name = "joe";
}
//Methods
public string PersonAddText(string text)
{
return name += " - " + text;
}
//Interfaces (or additional code below here please to aid understanding)
}
Mi código subyacente:
Person x = new Person();
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
txtname.Text = x.Name;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
txtname.Text = x.PersonAddText(txtname.Text);
txtname.Text = x.Name;
}
Mi XAML simple:
<Grid>
<TextBox Name="txtname" Margin="12,12,12,0" Height="23" VerticalAlignment="Top" />
<Button Content="Add Text" Margin="12,41,12,0" Name="button1" VerticalAlignment="Top" Click="button1_Click" />
</Grid>
estoy teniendo gran dificultad unde Comprender los tutoriales en Internet explicando esto. Por lo que veo hay 3 formas de hacer esto (que sería bueno si es posible, tener mi código convertido a un ejemplo de los tres):
- Servicio de Localización de
- inyección de dependencias
- Inversion del control (COI)
el article explicar las cosas que he leído es excelente, pero los ejemplos no son relevantes para mí como él está utilizando VB y ASP.Net con cadenas de conexión de base de datos. Esto es totalmente contrario a lo que necesito, y no quiero pensar en cómo traducir el código, al mismo tiempo que aprendo los conceptos, y también pienso en cómo aplicarlo a algo relevante. Si bien el ejemplo es bueno, es demasiado, y realmente agradecería cualquier ayuda adicional.
Editar historial: deletreos corregidos. Agregué lo siguiente para aclarar mi pregunta:
Entiendo la teoría detrás del acoplamiento y la coherencia y por qué debería reducir una y aumentar la otra. Pero nunca tuvimos que codificar ningún ejemplo en la universidad. Además, aunque no estoy cubierto en la universidad, entiendo las interfaces. Sin embargo, no entiendo cómo usarlos para reducir el acoplamiento.
Agregó un enlace a the article I refrenced above.
Edición 2: Hasta ahora lo que ahora tengo es la siguiente:
public interface IPerson
{
string Name { get; set; }
string PersonAddText(string text);
}
public class Person : IPerson
{
//The code from the person class above
}
¿Cómo utilizar ahora esta en el código MainWindow atrás?Estoy adivinando que debería sustituir a
Person x = new Person();
con
IPerson x = new Person();
Es esto correcto, y si es así, ¿hay algo más que tenga que hacer. La razón por la que pregunto es porque todavía no veo ninguna reducción en las cifras de acoplamiento de código informadas por Visual Studio (de hecho, lo aumenta en 1 en el código de la ventana principal).
¿Qué _exactly_ no lo entiendes? ¿Con qué concepto estás teniendo problemas? – Oded
Sé lo que significa coupeling y cohesión en teoría. Pero no entiendo cómo codificarlo. Especialmente porque nunca cubrimos interfaces en la universidad (sí, lo sé, excelente universidad). También entiendo las interfaces, pero no sé cómo usarlas para reducir el coupeling. –