耦,让一个类依赖一个接口,然后让另外一个类实现这个接口,通过构造注入或者属性注入的方式来实现依赖。简单来说就是抽象不依赖于细节,细节依赖于抽象。下
面我们来举例说明:
/// <summary>
/// 汽车制动系统
/// </summary>
public interface IControl
{
int UpSpeed();
bool Brake();
}
/// <summary>
/// 其他服务
/// </summary>
public interface IServer
{
bool Radio();
bool GPS();
}
具体的使用
/// <summary>
/// 汽车
/// </summary>
public class Car
{
private IControl control = null;
private IServer server = null;
public Car(IControl con, IServer ser)
{
control = con;
server = ser;
}
public void Start()
{
control.UpSpeed();
}
public void Play()
{
server.Radio();
}
public void Map()
{
server.GPS();
}
}
上面简单的举例说明,并没有给出具体的实现,只要实现上面的2个接口即可,这里就不详细说明了,希望大家能够明白。错误之处还请大家指出。
(5)、(ISP)接口隔离原则:简单的来说就是客户不关心细节的东西,他就只关心自己能够得到的服务,而面向对象的原则我想大家都知道,通过接口的方式来提
供服务。因此我们提供给客户的是一系列的接口,那么这样就具有很好的低耦合性。我们来简单的举例说明:以ORM中的简单的持久化操作来说
public interface IORM
{
/// <summary>
/// 保存
/// </summary>
/// <returns>返回影响的行数</returns>
int Save();
/// <summary>
/// 删除
/// </summary>
/// <returns>返回影响的行数</returns>
int Delet();
/// <summary>
/// 获取所有列表
/// </summary>
/// <returns>返回一个DataTable</returns>
DataTable GetList();
}
这里我们让一个实体来继承实现。
public class ORM : IORM
{
#region IORM 成员
public int Save()
{
return 1;
}
public int Delet()
{
return 1;
}
public System.Data.DataTable GetList()
{
return new System.Data.DataTable();
}
#endregion
}
业务层的实现
public class Entity
{
private IORM orm = null;
public Entity(IORM orm1)
{
orm = orm1;
}
public int Save()
{
return orm.Save();
}
public int Delete()
{
return orm.Delet();
}
}
这里我就不贴出来测试代码的实现了,后面我会把代码贴出来下载,如果有兴趣的同仁可以下载看看。当然我这里只是抛砖引玉,不足之处,还请大家多多
指出。面向对象设计中还有很多的原则,这里也不会一一复述。这里只是冰山一角,还希望大家多多提出宝贵意见。
2、面向切面编程
面向切面编程,其实就是面向方面编程,其实这个概念很早之前就提出了,但是并没有广泛的流行,这个是比较让人不解的地方,我平时其实使用的也是比
较少的。不过我们在系统架构中却是非常有用,特别是在关注点的分离的过程中起到很大的作用。AOP的主要目的呢,是将横切的关注点与核心的分层形式的或者说是
功能组件的分离。下面我们来看看AOP中的如何实现方面编程。
面向方面编程中的方面并不是直接有编译器来实现,而是通过某种特殊的方式将方面合并到常规的源代码中,然后通过编译器编译的方式。我们知道一个方
面就是一个横切关注点,在实现方面的过程中,我们通常需要定义连接点与基于这个连接点上的通知来完成。下面我们来看看AOP的处理源代码的模型:
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' src="/uploadfile/201301/12/A4122030402.png" alt="" />
AOP一般都是有框架提供注入的功能,而这里的代码注入功能与我们在面向对象的依赖注入不同。这里的注
入是将方面的代码植入到常规代码片段中。
下面我们先来介绍AOP中