务层来完成的话,那么服务层只是完成任务的转发,并没有实际行的好处及减少开销,那么此时不推荐使用服务层。
我们来总结下服务层的优势与劣势,已衡量我们在系统中使用服务层的必要性:
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/0612210996.png" />
五、服务层实战
前面已经讲述了服务层的优缺点及应用场景的介绍,那么我们本节中将要详细的讲解服务层设计的几种模式,主要是体现出服务层设计实现的几个思路,方便我
们在项目的实践过程中少走弯路。为我们的系统带来更好的适应性及扩展性要求。我们闲来将第一类模式
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/1212210890.png" />
装饰模式在服务层的含义,跟设计模式中的装饰模式可以说是有着异曲同工之妙,就是将服务层的一系列方法包装成干净
的接口,以供外部调用,通过该模式,我们能够将细粒度的服务包装成粗粒度的服务,这样可以更方便的为表现层服务,并且可以通过装饰模式将服务包装成远程调用
服务的方式,具体内部的实现都不是主要的关注点,对客户来说,他们可以以统一的方式不管客户端的形式是怎么样的。
我们都知道面向对象的设计原则是要求某个对象功能单一,尽可能的简单,但是通常我们在表现层中的一些业务流程中要求有多个实体之间进行交互时,那么我
们通过服务来组织就会显得比较好,我们通过装饰模式来实现这样的业务要求就会比较好,我们将一系列细粒度比较复杂的业务逻辑放在一个服务的API方法中,表现层
通过调用这个方法来完成复杂的业务逻辑交互。
服务层中的装饰模式更关心的是如何为表现层提供更好的服务,隐藏内部的细节,下面我们来看看相关的例子吧,我们这里还是以购物流程来说吧。
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/2012211728.png" />
购物流程的简单流程可能如此,那么当然我们在购物流程中还有其他的服务,比如我们在购物的过程中的
短信提醒给卖家,或者说是发送邮件给卖家。等这些是我们系统提供的服务,包括一些日志性的服务。那么这些我们如何去做呢?当然在上面的流程中,用户只需要关
系最后的一步,提交订单,付款的环节,当用户付款后会给用户发送短信,那么显然我们在服务中就可以把下单的过程中默认提供系统日志,系统安全,权限等等问题
一并处理,而给客户提供的方法则只包含支付的接口。
- public interface IPay
- {
- /// <summary>
- /// 支付接口
- /// </summary>
- /// <param name="product"></param>
- void Pay(Rule.Product product);
- }
上面我们定义了支付的接口,来看业务层中的订单操作:
- public class Order
- {
- /// <summary>
- /// 添加产品
- /// </summary>
- /// <returns></returns>
- public int Add(Product product)
- {
- return 0;
- }
- /// <summary>
- /// 保存
- /// </summary>
- /// <returns></returns>
- public int Save()
- {
- return 0;
- }
- /// <summary>
- /// 删除
- /// </summary>
- /// <returns></returns>
- public int Delete()
- {
- return 0;
- }
- /// <summary>
- /// 更新
- /// </summary>
- /// <returns></returns>
- public int Update()
- {
- return 0;
- }
- }
我