Appena usciti dal college mi sto imbattendo in un codice in cui ho bisogno di ridurre l'accoppiamento. Ma non capisco pienamente tutti i concetti e vorrei un semplice esempio per aiutarmi. Per iniziare ho una classe di persona con un singolo campo, nome. Ho un metodo all'interno di quella classe per concatenare del testo.Riduzione del semplice esempio di accoppiamento per principianti
So che questo è un esempio stupido e la maggior parte delle persone non prenderebbe mai in considerazione la possibilità di ridurre l'accoppiamento in situazioni così semplici, ma desidero solo un semplice esempio per aiutarmi a comprendere appieno il codice ei concetti insieme.
Nel codice dietro la finestra principale ho inserito una casella di testo e un pulsante. Quando la finestra viene caricata mostra il valore corrente del campo x persona del nome. Quando si fa clic sul pulsante, viene chiamato il metodo x.PersonAddText. Attualmente questo esempio ha l'accoppiamento calcolato a 8. Con un 3 per l'evento click del pulsante e un 3 per l'evento caricato in finestra.
C'è un modo, utilizzando questo esempio possiamo ridurlo a meno di questo per entrambi o entrambi.
Qui di seguito è tutto il mio codice:
La mia persona 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)
}
My Code Dietro:
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;
}
mio semplice 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>
Sto avendo grande difficoltà unde sostenere i tutorial su internet spiegando questo. Da quello che vedo ci sono 3 modi per fare questo (sarebbe bello, se possibile, di avere il mio codice di cui sopra convertito in un esempio di tutti e tre):
- Service Locator
- Dependency Injection
- Inversion del controllo (IOC)
il article spiegare le cose che ho letto è eccellente, ma gli esempi non sono rilevanti per me come lui sta usando VB e ASP.Net con le stringhe di connessione al database. Questo è totalmente opposto a quello di cui ho bisogno, e non voglio pensare a come tradurre il codice, imparando i concetti e pensando anche a come applicarlo a qualcosa di rilevante. Mentre l'esempio è buono, è davvero troppo, e apprezzerei davvero ogni ulteriore aiuto.
Cronologia delle modifiche: Correggere le ortografie. Aggiunto il seguente per chiarire la mia domanda:
Capisco la teoria dietro l'accoppiamento e la coheasion e perché si dovrebbe ridurre uno e aumentare l'altro. Ma non abbiamo mai potuto codificare alcun esempio al college. Inoltre, mentre non sono al college, comprendo le interfacce. Tuttavia, non capisco come usarli per ridurre l'accoppiamento.
Aggiunto un collegamento a the article I refrenced above.
Edit 2: Finora quello che ho ora ottenuto è la seguente:
public interface IPerson
{
string Name { get; set; }
string PersonAddText(string text);
}
public class Person : IPerson
{
//The code from the person class above
}
Come faccio ora utilizzare questo nel codice MainWindow dietro?Sto indovinando che dovrei sostituire
Person x = new Person();
con
IPerson x = new Person();
E 'corretto, e se è così, c'è qualcos'altro che devo fare. Il motivo per cui lo chiedo è perché non vedo ancora alcuna riduzione delle figure di accoppiamento del codice riportate da Visual Studio (infatti, aumenta di 1 il codice della finestra principale dietro).
Che cosa esattamente non capisci? Con quale concetto hai difficoltà? – Oded
So che cosa significa coupeling e coesione in teoria. Ma non capisco come codificarlo. Soprattutto perché non abbiamo mai parlato di interfacce al college (sì, lo so, ottimo college). Capisco anche le interfacce, ma non so come usarle per ridurre il coupeling. –