刚从大学毕业,遇到了一些我需要减少耦合的代码。但我并不完全理解所有的概念,并且想要一个简单的例子来帮助我。为了让你开始,我有一个带有单个字段的人员类,名称。我在该类中有一个方法来连接一些文本。
我知道这是一个愚蠢的例子,大多数人永远不会考虑在如此简单的情况下减少耦合,但我只想要一个简单的例子来帮助我完全理解代码和概念。
在主窗口后面的代码中,我放置了一个文本框和一个按钮。当窗口加载时,它会显示人员 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>
我很难理解互联网上解释这一点的教程。据我所知,有 3 种方法可以做到这一点(如果可能的话,将上面的代码转换为所有这三种方法的示例会很好):
- 服务定位器
- 依赖注入
- 控制反转 (IoC)
解释我读过的东西的文章非常好,但这些例子与我无关,因为他正在使用带有数据库连接字符串的 VB 和 ASP.Net。这与我所需要的完全相反,我不想在学习概念的同时考虑如何翻译代码,也不想考虑如何将其应用到相关的东西上。虽然这个例子很好,但它太多了,我真的很感激任何额外的帮助。
编辑历史:更正拼写。添加以下内容以澄清我的问题:
我理解耦合和内聚背后的理论,以及为什么你应该减少一个并增加另一个。但是我们在大学里从来没有编写过任何例子。另外,虽然在大学里没有涉及,但我确实了解接口。但是,我不明白如何使用它们来减少耦合。
添加了我上面引用的文章的链接。
编辑2:到目前为止,我现在得到的是以下内容:
public interface IPerson
{
string Name { get; set; }
string PersonAddText(string text);
}
public class Person : IPerson
{
//The code from the person class above
}
我现在如何在后面的主窗口代码中使用它?我想我应该更换
Person x = new Person();
和
IPerson x = new Person();
这是正确的吗?如果是,我还需要做什么。我问的原因是因为我仍然没有看到 Visual Studio 报告的代码耦合数字有任何减少(事实上,它在后面的主窗口代码上增加了 1)。