10 架构设计文档-致远OA

架构设计

一:现状

       1. 致远代码的运行环境:只有spring mvc ,没有spring boot/spring cloud 场景

行号 技术名称 备注
1 spring 版本 4.3.29.RELEASE

         2. 运行容器:tomcat 单体项目

二:目标

  1. 背景中所希望的目标。
  2. jsp 页面和静态资源共享问题。

    目前我们的项目中,还有大量的前端界面是用JSP写的。我们希望提供前后端界面均可"覆盖“的能力。同时:二次开发者开发时,可以引用我们已经存在静态资源,比如:图片,css等。
    由于:jsp 由controller 指定视图名称,同时前端没有组件化和组件组合策略,
    ​
    由此:我们规定前端jsp 界面,只能整体重写,随后重载视图名称来达到重写的目的。
    ​
    当然:也要考虑前后端分离的情况,针对于前后端分离,那仅仅就是功能覆盖。

      3. 二次开发者使用场景:

          a.共享数据库的场景:

   10 架构设计文档-致远OA_第1张图片

     b.独享数据库的场景:

     总的来说:可升级方案,不能约束二次开发对数据库的使用:是共享数据库,还是独享数据库,由业务开发者自己决定。   

  4. 兼容spring mvc/spring boot/spring cloud 原生的注解,如: @Autowried,@Resource

  5. 兼容 JSR 330 注解:@Inject,@Name

  6. 需要提供类覆盖,sql 语句覆盖,国际化功能

三:架构方案

1.技术策略:

        用新增的方式来添加没有的功能
        用新增的方式来修改已有的功能。
        用不显示的方式来删除已有功能。

2.架构图:

10 架构设计文档-致远OA_第2张图片

3.技术方案:动态接口包含:扩展接口和bean替换两种技术方式。

  3.1 扩展接口
       
        a.定义:我们将在标准产品中,根据客开需求,以预埋:接口 的形式,提供客开自定义实现的能力,在 运行期(RunTime):回调 客开bean实现的方法来达到执行“客开”逻辑的目的。
        
        b.适用场景:
        
            b.1 不修改标准产品流程,只修改标准产品步骤的表现:如提交订单后,我们需要通知某人。标准产品预埋接口后,客开自定义实现即可。
            
            b.2 产品功能: 有且仅有通用功能,才会埋点(防止定制化需求过渡到标准产品,造成标准产品,业务接口膨胀)。不提供定制化埋点。标准产品没有埋点的业务,不提供客开实现。
            
        c. 技术提供者: 平台业务组提供接口定义,架构组提供接口与实现正确关联。 
        
  3.2 bean 替换   
    
        a.定义:提供以继承或者组合某个bean或者某些bean的能力,替换指定bean的形式来达到运行时期(Runtime),执行客开“逻辑”的目的。
        它是一种"颠覆性"的操作方案,是一种可以替换“任何功能”的方案。
        
        b.使用场景:
            
                b.1 标准产品没有埋点的定制化场景:是标准产品需求,但还未埋点的需求。
                
                b.2 不是标准产品需求: 标准产品经理判断此需求不是通用需求,不能在标准产品埋点。
                
                b.3 需要修改或者颠覆整个业务逻辑流程的。
                
        c. 技术提供者:架构组。
        
        d. bean 覆盖逻辑图

10 架构设计文档-致远OA_第3张图片

        说明:Bean 的注入选择只会发生在有多个实现或者多个继承的情况下。才会去选择指定bean 来注入。
        如注入IA,候选者有:A1,A2,A3,A1-2,A-Replace1,A-Replace2 最后被注入得是:A-Replace1 (order 值最小)  

你可能感兴趣的:(致远OA知识分享,java,开发语言,致远OA架构)