zoukankan      html  css  js  c++  java
  • 一个电商项目的Web服务化改造5:面向服务的分层架构设计(有图有真相)

     最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA。
        有点挑战,做完了,会有很大进步。

        本篇,以我亲自画的3个图,阐述一下架构设计。 


       一、分层架构-总体图


        1.服务提供方和服务调用方,通过接口交互,调用方并不需要知道怎么实现的。
        2.层次划分
           mapper:Mybatis接口映射,原子数据库操作
           dao:数据访问层(或者换个更合适的名字)调用mapper,组装数据,比如商品详情信息,除了需要商品信息,还需要知道商品的品牌信息
           service:业务逻辑层:订单支付,金额是否足够,是否能够参加这个优惠活动等
           webservice: 由于我们的业务逻辑比较简单,直接把业务层的接口,稍微包装下,就暴露出去了,逻辑上可以说是一个层的。有些大型项目,可能把WebService作为service的上层,而非平级的。
       3.同层之间不能相互调用,上层可以调用1个或多个下层的接口
       4.面向接口编程
          通过接口定义操作,不需要关注实现
     
    二、分层架构-类图


       1.以品牌Brand为例,针对外界3套系统,定义了3套WebService接口,FrontBrandService针对前端商城系统、MobileBrandService针对移动端App,BackendBrandService针对后端运营系统。
         每个系统的接口,都是单独定义的,互补影响,前端商城系统调用方,只需要它应该有接口服务。
       2.内部实现类BrandServiceImpl,一次性实现了3个接口,当然也可以定义3个实现类,分别实现。
      

    三、系统架构图


    1、接口服务,有商品、订单、用户等,每个服务都会针对3套系统,有3个接口实现。
    2、接口服务,启动的时候,把服务信息注册到Zookeeper。
    3、服务调用方,启动的时候,去Zookeeper查找服务。
    4、服务调用方,比如前端商城系统,有自己的Controller和Service。
        Controller响应请求,调用Service,在Service中调用WebService中的1个或多个服务,组装数据。
        也就是说,服务调用方,基本没有业务逻辑,业务逻辑全部在接口提供方统一处理了。
        另外,前端商城系统,虽说有自己的service,但是从实质上来说,这个地方的service和Controller都可以理解成是“展现层”的。
     5.接口提供方,负责业务逻辑和底层实现,其它3个系统,只是响应URL,做下展示罢了。

    个人观察
      最近自己画了不少图,感觉画图比较费时间,但是效果会比较好,可以把总体的思路,清晰地展示出来。
      具体到上面3个图,在做培训的时候,部分哥们有一些疑问,费了很大劲,才解释清楚。
      对新人来说,反而更容易理解一些,因为他没有自己固有的思维定势,更容易接受新的架构思路。

      怎么样,哥的架构设计还行吧。。。
      感谢若干大牛对小弟的耐心指点。。。 
      大笑奋斗大笑
  • 相关阅读:
    滚动计算基础知识
    Javascript继承
    提取URL字符串的搜索字符串中的参数
    C++编程练习(13)----“排序算法 之 堆排序“
    常见网络端口 和 常见网络协议
    TCP协议中的三次握手和四次挥手(图解)
    C++编程练习(14)-------“单例模式”的实现
    编程练习------C/C++分别实现字符串与整数的转换
    IPv4地址学习总结
    C/C++中的联合体
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462426.html
Copyright © 2011-2022 走看看