我知道这是一个愚蠢的例子,大多数人永远不会考虑在这种简单的情况下减少耦合,但我只想要一个简单的例子来帮助我完全理解代码和概念。
在主窗口的后面代码中,我放了一个文本框和一个按钮。当窗口加载时,它显示人物x名称字段的当前值。当点击按钮时,调用x.PersonAddText方法。目前,此示例的耦合计算为8。按钮单击事件为3,窗口加载事件为3。
使用此示例,我们是否可以将其降低到少于这两个事件之一或两者都少于此?
以下是我的所有代码:
我的人类:
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>
我很难理解互联网上关于这方面的教程。据我所见,有三种方法可以做到这一点(如果可能的话,最好将我的代码转换为这三个示例之一):
- 服务定位器
- 依赖注入
- 控制反转(IoC)
编辑历史记录:更正了拼写。增加以下内容以澄清我的问题:
我理解耦合和内聚背后的理论以及为什么应该减少一个并增加另一个。但我们在大学里从未编写过任何示例。此外,虽然没有在大学里涉及,但我确实了解接口。然而,我不知道如何使用它们来减少耦合。
我在上面提到的文章中添加了一个链接。
编辑2:目前我得到的是以下内容:
public interface IPerson
{
string Name { get; set; }
string PersonAddText(string text);
}
public class Person : IPerson
{
//The code from the person class above
}
我现在该如何在mainwindow代码后台使用它?我猜我应该替换。
Person x = new Person();
使用
IPerson x = new Person();
这是否正确,如果是,我还需要做些什么。我问的原因是因为我在Visual Studio报告的代码耦合图中仍然看不到任何减少(事实上,在主窗口代码后面它增加了1)。