系统架构师-基础到企业应用架构-服务层

本文深入探讨了服务层在系统架构中的重要性,解释了为何需要独立的服务层以实现表现层与业务逻辑层的解耦。通过实例展示了服务层如何通过装饰模式、传输对象模式和适配器模式来组织业务逻辑,强调了服务层在多层架构和企业应用中的优势。同时,文章提到了服务层的优缺点和应用场景,以及服务层的不同实现方式,如WCF中的远程调用服务。
摘要由CSDN通过智能技术生成

  本文将已架构的方式去分析分层结构中的服务层的设计,如何设计出来满足我们说的业务需求及设计规范的服务层将是我们的目标,可能我想大家在项目架构的

过程中可能有些同仁,没有用到该层,或者说是采用的是常用的分层结构的设计,而没有把服务层单独的抽出来,当然我们必须首先知道服务层是干什么用的?为什么

要单独写一个服务层呢?还有就是设计服务层我们从哪些方面入手呢?及怎么判定一个服务层设计的好坏呢?这些都是本章要讲解的具体内容,当然本文中的内容都是

本人平时在项目中的一些经验,可能在一些有丰富经验设计的大牛面前,我讲解的都是皮毛,但是我抱着能给初学者指引和为已知者温习的目的而写,错误之处再所难

免,请大家提出宝贵意见和建议。本文讲述以下内容:

        

image

 下面我们将针对上面的问题分别进行讲述。

三、本章大纲

       1、上章回顾。

       2、摘要。

       3、本章大纲。

       4、服务层的介绍。

       5、服务层实战。

       6、本章总结。

       7、系列进度。

       8、下篇预告。

四、服务层的介绍

        本节中将会对服务层的设计进行详细的分析。我们知道我们现在在软件开发的过程中,通常我们会将一些业务逻辑的代码写在表现层,当然这样的方式不是不允

许,当然一般情况下来说我们感觉没什么,但是采用这样的方式,那么表现层与业务逻辑层之间的关系是耦合性的,可能我们是属于那种希望设计简洁或者说对设计规

范严格要求的时候,那么我们就可以考虑将业务逻辑的组织通过服务层来实现,那么服务层的作用就是将表现层与业务逻辑层之间完成解耦。那么表现层中就不会出现

任何的业务代码,当然这样带来的好处也是显而易见的,就是当我们修改业务层代码时,我们不需要修改表现层的代码,当然如果服务层设计的不好,那么可能会造成

反效果。

        服务层是干什么的? 通过上面的简单介绍,我想大家都对服务层有了个简单的认识,那么下面我们还是通过图形的方式来看看服务层的位置及作用吧,可能那样

更容易理解。

        

image

 这几层之间都是通过数据传输对象来完成各层之间的数据通信。通过上图我们知道,服务层是通过数据传输对象

与业务逻辑层直接进行交互,那么业务逻辑层与服务层具体交互的方式及内容是什么呢?

        下面我们来看看,业务逻辑层中的四种模式在服务层中的表现。

         

image

         下面我们来举例说明服务层的作用。通过表现层与业务逻辑的解耦来说明服务层的作用。我们还是以B2C中的购物流程来说。

         我们先以购物流程中的添加产品到购物车来说

         

image

 可以简单的看作下面几个对象之间的交互,首先我们先要选择产品,然后将产品添加到购物车

中,然后当然这个购物车是某个会员登陆以后的购物清单,一个购物车中可能有多个产品。我们来看看代码可能如下:

         我们定义的产品信息如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

/// <summary>

/// 产品信息

/// </summary>

public class Product

{

    /// <summary>

    /// 返回所有的产品信息

    /// </summary>

    /// <returns></returns>

    public List<Product> GetAll()

    {

        return new List<Product>();

    }

    /// <summary>

    /// 返回产品信息根据产品ID

    /// </summary>

    /// <returns></returns>

    public Product GetByID(int ID)

    {

        return new Product();

    }

}

        产品信息中包含2个方法,一个是获取所有产品的列表,还有一个是获取实体的信息根据主键。我们来看看购物车的代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

/// <summary>

/// 购物车

/// </summary>

public class ShopCar

{

    /// <summary>

    /// 购物车中的产品

    /// </summary>

    Dictionary<int, Product> products = new Dictionary<int, Product>();

    /// <summary>

    /// 将指定产品ID的产品添加到购物车

    /// </summary>

    public bool Add(int ID)

    {

        Product product = new Product();

        product= product.GetByID(ID);

        if (products.ContainsKey(ID))

            return false;

        products.Add(ID,product);

        return true;

    }

}

 下面我们来看看前台调用的代码:

 public class ShopCar

{

    /// <summary>

    /// 将指定产品ID的产品添加到购物车

    /// </summary>

    public bool Add(int ID)

    {

        ShopCar cart = new ShopCar();

        return cart.Add(ID);

    }

}

        上面的代码引用了ShopCar对象,说明UI层的ShopCar与业务层的ShopCar 有依赖关系,那么我们如何解耦呢?通过引入第三方类,来实现依赖的解除。具体

的代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

public class ShopCar

{

    /// <summary>

    /// 将指定产品ID的产品添加到购物车

    /// <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值