技术框架篇--第4篇

用日志记录“开源软件”的诞生

赤龙ERP开源地址:

点亮星标,感谢支持,加微信与开发者交流 kzca2000

码云:https://gitee.com/redragon/redragon-erp

GitHub:https://github.com/redragon1985/redragon-erp

准备工作

搭建基础框架前,一定要准备好开发环境。先安装软件(以我本地环境为例),包括:

  • IDE(Eclipse最新版)
  • JDK1.8
  • Tomcat8.5
  • MySQL8.0
  • Redis最新版
  • SVN、Git

安装流程不做详细说明。说几个需要注意的地方:

(1)Tomcat安装好后需要对server.xml做一些配置和优化(端口、应用、域名、NIO、线程池、SSL等)

(2)对JVM做必要的内存配置优化

(3)MySQL安装时注意编码UTF-8

(4)Redis需要配置密码和持久化(AOF)

框架的基本要求

搭建应用的底层框架,总是要或多或少的根据情景考虑一些问题,而不能是框架和技术的简单堆砌。那么搭建框架要满足哪些要求呢?

(1)安全性:由于是信息化管理系统,使用的用户是企业内部的职员和高管,那么对于安全性和权限的考虑就要提升一个层次了。比如:谁能访问哪些功能、谁能做哪些操作,谁能看到什么数据、又使用什么方式可以更便捷的实现各种安全性的考虑。

(2)降低信息流的复杂性:简单解释一下,ERP系统是一个很特殊的系统,因为它是企业中复杂管理流程、业务流程、财务流程的实现。所以它有着严密的逻辑与流程,系统中几乎没有独立的模块或功能,系统内部各部分互相依赖的复杂程度难以想象。如何降低这些依赖关系的复杂度,就是框架中迫不及待解决的问题。

(3)提高开发效率:信息化系统开发时的一大特点就是代码复用程度高,无论是重复的增删改查,还是表单处理,设置是各种报表,太多的重复工作会浪费太多的时间。开发人员应该把工作集中在逻辑和算法上面,而不是这些简单的复制粘贴修改上。

(4)灵活的可配置可扩展:信息化系统的另一个特色就是个性化需求非常高,即使对于一个简单的流程,也可能出现多样化的各种要求。这往往根据企业的管理情况而定。如何竭尽所能在减少客户化开发的前提下,满足更多的需求是我们要考虑的问题。

(5)降低学习成本和维护成本:由于这是一款开源软件,我们要考虑的不能仅仅是高大上的技术使用,而是要能让更多的开发者和使用者,可以快速部署,并进行个性化开发。无论在展示层、控制层、持久层,还是在各第三方组件的使用中都要尽量考虑到如何让更多的人可以使用我们的软件。

如何解决问题

针对以上的要求,我们如何设计系统,解决问题,并最终搭建满足我们需求的底层框架呢?我们一起来尝试摸索一下。

  1. 说到安全性,就离不开登陆、权限、加密这些场景。
    (1)登陆我使用了cas,它是一个SSO框架,采用票据验证机制保证了,认证的安全。
    (2)授权我采用了shiro框架与cas无缝整合,根据三类权限的设置,保证了菜单、按钮、数据的精细控制
    (3)加密包括对HTTP头的加密(SSL),对关键业务数据的加密(AES、SHA1)
  2. 降低信息流的复杂性,最核心的是如何梳理,如何切分业务,模块之间如何互相调用。
    (1)梳理和切分业务其实更多的是经验问题,但有个通用的大原则,高内聚;也就是把关联性极高的功能放在一起,而对外暴露必要的接口供调用即可。其中还要考虑到一些基础数据的通用化设计。比如:组织信息、职员信息、主数据、数据字典等,单独设计并对外提供有双层缓存的接口。(其中也要考虑到缓存的更新策略)
    (2)模块间我用Maven父子项目做了划分,也为直接的接口调用和REST风格的API调用做了不同方式的设计
  3. 如何提高开发效率,应该是我们认真思考的话题。因为这真的很重要。如果处理得当甚至会节省30%-40%的研发时间。
    (1)代码自动生成工具:我研发了一套可以自动生成Controller、Service、Dao、Model以及所有配置及注解的工具。当前这是基于我指定的代码规范。只需要修改两到三个配置项,即可一键在项目下生成我们所需的代码。本来至少要编写半小时的代码,现在只需要10秒钟。
    (2)可复用的工具包:十几年积累的所有工具类可提供快速的静态调用方式
    (3)抽丝剥茧,独立的功能设计:很多常用的第三方组件或技术的处理方式,抽象出来,加以复用。比如:线程、Redis、JMS、Socket、Json、Groovy、Mongo等。
    (4)多功能的AOP处理:基本思路是通过AOP及自定义注解灵活加入各种辅助处理功能。比如:方法缓存、自动set基础字段值、日志处理、数据权限控制等。
    (5)必要的通用功能:通过Spring提供的技术,实现异常处理、类型转换、数据验证、API请求拦截等各种处理要求。
  4. 可配置可扩展其实说起来简单做起来难。可能很多软件都是这么宣传的,但真正做到的并不多。其实我认为主要做到如下几点就可以了:
    (1)字段的可扩展,即可以通过配置的方式增加辅助字段,并且能实现1对1结构,和1对多结构的两种方式。
    (2)流程的灵活处理。软件往往设计上会固定某一主流程,只要设计上让这一流程的组织不固定,而相对松散的实现即可。
    (3)功能性模块的高度可配:比如权限系统、报表系统、工作流、数据字典
  5. 最后一个是有关降低学习成本和维护成本的问题。我觉得这更多是因为要匹配开源的要求,开源的使用者多数是个人或小团体,这对于普及一款开源产品显得尤为重要。怎么做呢?
    (1)用最普及的技术、最少的技术种类、实现更多的需求。
    (2)提供最简单的配置文档以实现程序部署。

对未来的考虑

为了考虑单体需求的激增,不得不应对高并发以及高可用的情景。所以现在技术选择以及底层搭建时就一定要有所考量。当前框架一定要可以快速引入新技术并可以高效整合。我认为Springboot一定是Java语言当下是最优的选择,也为SpringCloud的升级做了足够准备。

当然其中还有很多要考虑的内容,比如:负载均衡、消息队列、数据总线、读写分离、异步并发、降级限流等。在此不展开讨论,如果有兴趣可与开发者直接沟通。

后记

今天的日志写的比较长,但还没有包括很多中间件的优化和配置说明,为了给开源软件的使用者简化他们的部署工作,我会在后面附加一个技术补充文章。

希望您读完本文可以帮助笔者进入【码云】或【GitHub】点点星标。感谢大家的支持!

SpringBoot2搭建基础架构——开源软件诞生4的更多相关文章

  1. 工作流引擎Activiti与SpringBoot2整合--开源软件诞生17

    开源ERP技术整合系列--第17篇 用日志记录"开源软件"的诞生 [点亮星标]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redragon/r ...

  2. JAVA开源软件的技术选型--开源软件诞生2

    技术准备--第2篇 用日志记录“开源软件”的诞生 赤龙ERP开源地址,点亮星标,支持一下,万分感谢 码云:https://gitee.com/redragon/redragon-erp github: ...

  3. ERP与EHR系统的恩怨纠葛--开源软件诞生13

    ERP中需要EHR的存在吗--第13篇 用日志记录"开源软件"的诞生 [点亮星标]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redragon ...

  4. ERP订单管理的操作与设计--开源软件诞生19

    赤龙ERP订单模块讲解--第19篇 用日志记录"开源软件"的诞生 [点亮星标]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redragon/r ...

  5. ERP收付款的操作与设计--开源软件诞生22

    赤龙ERP收款付款讲解--第22篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redra ...

  6. ERP的财务凭证的操作与设计--开源软件诞生23

    赤龙ERP财务凭证讲解--第23篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redra ...

  7. ERP中HR模块的操作与设计--开源软件诞生26

    赤龙ERP的EHR功能讲解--第26篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/red ...

  8. ERP制造模块操作与设计--开源软件诞生30

    赤龙ERP制造模块讲解--第30篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redra ...

  9. 为什么要做一款ERP软件——开源软件诞生7

    技术之外的探讨--第7篇 用日志记录“开源软件”的诞生 赤龙ERP开源地址: 点亮星标,感谢支持,与开发者交流 kzca2000 码云:https://gitee.com/redragon/redra ...

随机推荐

  1. AtCoder Beginner Contest 173 E Multiplication 4 分类讨论 贪心

    LINK:Multiplication 4 害怕别人不知道我有多菜 那就上张图: 赛时 太慌了 (急着AK 题目不难却暴露我的本性 根本不思考无脑写 wa了还一直停不下来的debug 至少被我发现了1 ...

  2. P5468 [NOI2019]回家路线 斜率优化 dp

    LINK:回家路线 (文化课 oi 双爆炸 对 没学上的就是我.(我错了不该这么丧的. 不过还能苟住一段时间.当然是去打NOI了 这道题去年同步赛的时候做过.不过这里再次提醒自己要认真仔细的看题目 不 ...

  3. windows:跨进程读数据

    外挂.木马.病毒等可能需要读取其他进程的数据,windows提供了OpenProcess.ReadProcessMemory等函数.但越是大型的软件,防护做的越好,大概率会做驱动保护,比如hook S ...

  4. x86架构:保护模式下利用中断实现抢占式多任务运行

         站在用户角度考虑,一个合格的操作系统即使在单核下也能 "同时" 执行多个任务,这就要求CPU以非常快的频率在不同任务之间切换,让普通人根本感觉不到任务的切换.windwo ...

  5. 看了这篇文章,我搞懂了StringTable

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 String应该是Java ...

  6. property补充

    property补充 # class Foo: # @property # def AAA(self): # print('get的时候运行我啊') # # @AAA.setter # def AAA ...

  7. Java日志框架(二)

    最流行的日志框架解决方案 按笔者理解,现在最流的日志框架解决方案莫过于SLF4J + LogBack.其有以下几个优点: LogBack 自身实现了 SLF4J 的日志接口,不需要 SLF4J 去做进 ...

  8. jquery 效果笔记

    jquery效果 显示隐藏     show()     语法     show([speed,[easing],[fn]])     参数可以省略,无动画直接使用     hide()     to ...

  9. 深度强化学习:Policy-Based methods、Actor-Critic以及DDPG

    Policy-Based methods 在上篇文章中介绍的Deep Q-Learning算法属于基于价值(Value-Based)的方法,即估计最优的action-value function $q ...

  10. Spring Boot自定义错误视图

    Spring Boot缺省错误视图解析器 Web应用在处理请求的过程中发生错误是非常常见的情况,SpringBoot中为我们实现了一个错误视图解析器(DefaultErrorViewResolver) ...