剛剛走出大學,我遇到了一些需要減少耦合的代碼。但我不完全理解所有的概念,並希望有一個簡單的例子來幫助我。爲了讓你開始,我有一個單一的領域,名稱的人類。我在該類中有一個方法來連接一些文本。減少初學者需要的耦合簡單例子
我知道這是一個愚蠢的例子,大多數人永遠不會考慮在這種簡單的情況下減少耦合,但我只想要一個簡單的例子來幫助我完全理解代碼和概念。
在主窗口後面的代碼中,我放置了一個文本框和一個按鈕。當窗口加載時,它顯示人物x名稱字段的當前值。當按鈕被點擊時,調用x.PersonAddText方法。目前這個例子的耦合計算爲8,按鈕點擊事件爲3,窗口加載事件爲3。
有沒有什麼辦法,使用這個例子,我們可以把它降低到小於這個值,以減少它們中的任何一個或兩個。
下面是我的代碼:
我的Person類:
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)
}
我的代碼背後:
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;
}
我簡單的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>
我有很難找到通過互聯網上的教程來解釋這一點。從我看到有3種方式來做到這一點(這將是很好,如果可能的話,有我上面的代碼轉換爲三個的例子):
- 服務定位器
- 依賴注入
- 反演控制反轉(IoC)
的article解釋的東西,我讀的是優秀的,但因爲他是用VB和ASP.Net與數據庫連接字符串的例子是與我無關。這與我所需要的完全相反,我不想考慮如何翻譯代碼,同時學習概念,並考慮如何將它應用於相關的事物。雖然這個例子很好,但它太多了,我會很感激任何額外的幫助。
編輯歷史記錄:更正拼寫。增加了以下內容來澄清我的問題:
我理解耦合和共同作用背後的理論,以及爲什麼你應該減少一個,增加另一個。但我們從來沒有在大學編寫任何示例代碼。此外,雖然沒有在大學報道,我確實瞭解接口。但是,我不明白如何使用它們來減少耦合。
添加了鏈接到the article I refrenced above。
編輯2:到目前爲止,我現在已經得到如下:
public interface IPerson
{
string Name { get; set; }
string PersonAddText(string text);
}
public class Person : IPerson
{
//The code from the person class above
}
我現在該如何在主窗口代碼中使用此背後?我猜我應該
IPerson x = new Person();
更換
Person x = new Person();
這是正確的,如果是這樣,還有什麼我需要做的。我問的原因是因爲我還沒有看到visual studio報告的代碼耦合數據有所減少(事實上,它在後面的主窗口代碼中增加了1)。
什麼_exactly_你不明白嗎?你遇到什麼困難? – Oded
我知道理論上的coupeling和cohesion意味着什麼。但我不明白如何編碼。特別是因爲我們從來沒有涉及大學的接口(是的,我知道,偉大的大學)。我也理解接口,但我不知道如何使用它們來減少coupe。 –