我们的B2C可以简单按照如下方式进行分层,业务逻辑层与界面通过服务层来调用,这样可以避免UI层与业务层之间的耦合,而业务
逻辑层通过数据访问层与数据库进行交互。当然可能我这里的部分设计还存在不合理之处,还请大家多多提出宝贵意见,好让这个设计更加完善。
那么我们下面来看下横切分离方式的情况,我们知道,我们系统中可能会对管理员或者任何操作人员的操作的详细信息进行详细的记录,那么我们
就会通过日志的方式来处理,横切的方式就是系统从头到尾的任何一个功能处都会用到,这是一个横向分离关注点的过程。那么我们在设计系统操作日志时就会记录相应
的操作日志或者系统的错误日志等等相关信息。
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' src="/uploadfile/201301/12/FB122030588.png" alt="" />
操作日志与错误日志贯穿每个分层结构、分离关注点横向分离的方法实现就是AOP(面向方面编程)。当然我们后面会介绍AOP的具体实现方式细节。
五、相关设计方法
本节将会详细的阐述分层与横切分离关注点的二种编程方式的实现,通过编程方法实现关注的不同切面来分析设计方法的实现。这里介绍的二种编程方法是面向
对象的编程方法实现分层方式的分离关注点与面向切面的编程方法实现横切分离关注点的方式。
1、面向对象设计
首先、面向对象作为一种编程思想,我想在园子里面的大多数同仁都比较熟悉,我这里也不详细谈面向对象的设计,这里我们只是谈谈面向对象设计中的几个
原则和需要注意的方面。
我们知道面向对象的编程思想是把世界万物都看作是对象,而复杂的功能可以看作对象与对象之间的关系组成。那么我们在分离关注点后,那么每个关
注点可以进一步细化为多个对象及对象之间的关系。
那么我们来看看面向对象设计中的几个基本的原则,并且分别的举例说明:
a、首先必须先从分离关注点中分析出对象及对象之间的关系。例如我们以B2C系统中的店铺管理来说。
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' src="/uploadfile/201301/12/2B122030147.png" alt="" />
图中简单描述了店铺管理中应有的对象。
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' src="/uploadfile/201301/12/45122030861.png" alt="" />
图中简单的描述了对象之间的关系,店铺信息依赖店铺等级与店铺类型信息,店铺认证信息
依赖店铺信息。
b、对象分离出来之后,那么我们先来看看对象对应的类的几个相关原则:
(1)、(SRP)单一职责原则,简单来说就是一个类只提供一种功能和仅有一个引起它变化的因素。如果我们发现一个类具有多个引起它变化的因素时就必须想办
法拆分成单独的类。下面来举例说明。我们这里以ORM中的实体接口层来说。
public interface IEntity
{
/// <summary>
/// 保存
/// </summary>
/// <returns>返回影响的行数</returns>
int Save();
/// <summary>
/// 删除
/// </summary>
/// <returns>返回影响的行数</returns>
int Delete();
/// <summary>
/// 写入日志信息
/// </summary>
/// <param name="message">写入信息</param>
/// <returns>返回影响的行数</returns>
int WriteLog(string message);
}
很明显这里的写入日志与前面的对实体的持久化的操作明显不搭边,这样的可能会造成2中引起类发生改变的因素时就必须分离,那么就必须把它抽出来,单独定义一个接口。修改后结果如下:
public interface IEntity
{
/// <summary>
/// 保存
/// </summary>
/// <returns>返回影响的行数</returns>
int Save();
/// <summary>
/// 删除
/// </summ