您现在的位置是:首页 > .NET

.NET

高内聚低耦合的实现原则-分离关注点

2020-11-11 09:07:34 .NET admin
分注关离点现在已经了解了在设计系统时需要考虑耦合和内聚两个因素,那么有没有一种方法可以一劳永逸地解决这两个问题呢?如何在设计软件系统时做到低耦合和高内聚呢?一个有助于实现低耦合和高内聚的原则上是分离关注点(SeparationofConce
分注关离点

现在已经了解了在设计系统时需要考虑耦合和内聚两个因素,那么有没有一种方法可以一劳永逸地解决这两个问题呢?如何在设计软件系统时做到低耦合和高内聚呢?一个有助于实现低耦合和高内聚的原则上是分离关注点(SeparationofConcerns,SoC)。

1、鉴别关注点
分离关注点的核心在于将系统拆分成各不相同且最好没有重叠的功能。每个系统中的功能都表示了一个关注点,即系统的一个方面。上面提到的诸如功能、关注点和方面等词语可以看做是同义词。关注点可以映射到软件模块,且应该尽可能地保证模块之间没有功能上的重复。

分离关注原则建议我们一次只处理一个关注点。这并不代表此时要将所有系统其他的关注点都抛在脑后,而是说当你决定用某个模块来实现某个关注点之后,只需要全神贯注于实现该模块即可,从这个模块的角度考虑,其他的关注点都是不相关的。

2、模块化
具体来说,分离关注点是通过模块化代码以及大量运用信息隐藏来实现的。

模块化编程鼓励我们使用不同的模块来实现不同的功能。模块拥有自己的公开接口,可以和其他模块通信,模块同时也包含大量的内部信息,供自身使用。

模块中只有公开接口暴露出的成员才能被其他模块使用。内部数据要么被彻底隐藏起来,要么必须经过特定的筛选过滤才能暴露给外部。这种用公开接口实现模块的方式定义了模块的行为,即模块的实现细节并不会被其他模块知晓或访问。

3、信息隐藏
信息隐藏(InformationHiding,IH)是一条能用的设计原则,指用固定的公开接口隐藏软件模块的实现细节,以降低未来修改可能造成的影响。按照这样的设计原则,每个模块仍可以使用固定的接口来通信,而不会受到修改具体实现的影响。

信息隐藏的一个常见的典型实现就是C#或VisualBasic.NET中类的属性(参见下面的代码实例)。属性名称表示一个固定的接口,调用者可以通过该接口获取内部值。而类型内部可以通过很多方式(例如,使用私用字段,控件属性,缓存,ASP.NET的视图状态等)为外部提供值,甚至在修改实现细节的同时仍不破坏外部代码。
//应用了信息隐藏的软件模块
PublicclassCustomer
{
//隐藏的实现细节
Privatestring_name;

//公开固定的接口
PublicstringCustomerName
{
//隐藏了实现细节
Get{return_name;}
}
}