Je viens de sortir du collège et je rencontre un code où je dois réduire le couplage. Mais je ne comprends pas complètement tous les concepts et voudrais un exemple simple pour m'aider. Pour vous aider à démarrer, j'ai une classe de personne avec un seul champ, nom. J'ai une méthode dans cette classe pour concaténer du texte. Je sais que c'est un exemple idiot, et la plupart des gens n'envisageraient jamais de réduire le couplage dans des situations aussi simples, mais je veux seulement un exemple simple pour m'aider à comprendre le code et les concepts ensemble.Réduire le couplage simple exemple nécessaire pour le débutant
Dans le code derrière la fenêtre principale, j'ai mis une zone de texte, et un bouton. Lorsque la fenêtre est chargée, elle affiche la valeur actuelle du champ de nom de personne x. Lorsque vous cliquez sur le bouton, la méthode x.PersonAddText est appelée. Actuellement, cet exemple a un couplage calculé à 8. Avec un 3 pour l'événement de clic de bouton et un 3 pour l'événement chargé de la fenêtre.
Y at-il un moyen, en utilisant cet exemple, nous pouvons descendre à moins de cela pour l'un ou l'autre ou les deux.
Ci-dessous est tout mon code:
Ma personne Classe:
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)
}
Mon code Derrière:
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;
}
My Simple XAML:
<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>
J'ai grande difficulté unde rstanding les tutoriels autour d'Internet expliquant cela. D'après ce que je vois, il y a 3 façons de le faire (ce serait bien si possible, d'avoir mon code ci-dessus converti en un exemple de trois):
- Locator Service
- injection de dépendances
- Inversion de contrôle (IoC)
le article expliquant les choses que j'ai lu est excellent, mais les exemples ne sont pas pertinents pour moi qu'il utilise VB et ASP.Net avec des chaînes de connexion de base de données. C'est totalement à l'opposé de ce dont j'ai besoin, et je ne veux pas penser à la façon de traduire le code, tout en apprenant les concepts, et en pensant aussi à la façon de l'appliquer à quelque chose de pertinent. Alors que l'exemple est bon, c'est juste trop, et j'apprécierais vraiment toute aide supplémentaire.
Modifier Historique: Corrigé orthographes. J'ai ajouté ce qui suit pour clarifier ma question:
Je comprends la théorie derrière le couplage et la cohésion et pourquoi vous devriez réduire l'un et augmenter l'autre. Mais nous n'avons jamais eu à coder des exemples au collège. Aussi, bien que n'étant pas couvert à l'université, je comprends les interfaces. Cependant, je ne comprends pas comment les utiliser pour réduire le couplage.
Ajout d'un lien vers the article I refrenced above.
Edit 2: Jusqu'à présent, ce que j'ai maintenant obtenu est la suivante:
public interface IPerson
{
string Name { get; set; }
string PersonAddText(string text);
}
public class Person : IPerson
{
//The code from the person class above
}
Comment puis-je utiliser maintenant ce dans le code mainwindow derrière?Je suppose que je devrais remplacer
Person x = new Person();
avec
IPerson x = new Person();
Est-ce exact, et si oui, est-il autre chose que je dois faire. La raison pour laquelle je demande est parce que je ne vois toujours aucune réduction dans les chiffres de couplage de code signalés par Visual Studio (en fait, il augmente de 1 sur le code de la fenêtre principale derrière).
Qu'est-ce que _exactement_ ne comprenez-vous pas? Quel concept rencontrez-vous des difficultés? – Oded
Je sais ce que signifie le coupeling et la cohésion en théorie. Mais je ne comprends pas comment le coder. Surtout que nous n'avons jamais couvert les interfaces au collège (oui, je sais, super collège). Je comprends aussi les interfaces, mais je ne sais pas comment les utiliser pour réduire le coupeling. –