技术框架篇--第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. PHP xml_set_character_data_handler() 函数

    定义和用法 xml_set_character_data_handler() 函数为 XML 解析器建立字符数据处理器. 该函数规定当解析器在 XML 文件中找到字符数据时所调用的函数.高佣联盟 ww ...

  2. luogu P4632 [APIO2018] New Home 新家 线段树 set 二分

    写了一种比较容易理解 但是常数很大的sol. 容易发现可以扫描线. 维护好序列之后发现很难查距离 考虑二分. 这里二分可以在线段树上进行 当然可能存在一些问题 如果离散化的话需要处理一些比较麻烦的细节 ...

  3. 剑指 Offer 53 - II. 0~n-1中缺失的数字

    本题 题目链接 题目描述 我的题解 二分法 思路分析 排序数组中的搜索问题,首先想到二分法 当nums[center] > center 时,缺少的数在左区间 当nums[center] = c ...

  4. 开源后端数据校验插件Validate.Net,类似Validate.js

    介绍 Validate.Net将Validate.js移植到.Net平台,可以更方便.更快捷的校验实体内属性值是否合法.内置多种常规数据校验规则(校验必填.校验字符串长度区间.校验最大最小值.校验值区 ...

  5. Nginx的基本使用和配置

    2.1什么是Nginx Nginx 是一款高性能的 http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师伊戈尔·西索夫(Igor Sysoev)所开发,官方 ...

  6. boost之signal的使用

    文章目录 简介 代码 模板实现: 测试代码 运行结果 简介 boost是C++的一个扩展库,被称为C++准标准库,里面的组件很丰富,并且引用方便,85%的组件只需要引用头文件即可使用. 并且在嵌入式系 ...

  7. 100行Python代码实现一款高精度免费OCR工具

    近期Github开源了一款基于Python开发.名为 Textshot 的截图工具,刚开源不到半个月已经500+Star. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语 ...

  8. java_Collection、Map、泛型的使用

    Collection集合 集合按照其存储结构可以分为两大类,分别是 单列集合 java.util.Collection 双列集合 java.util.Map Collection:单列集合类的根接口, ...

  9. 2020-06-27:ACID是什么?描述一下?

    福哥答案2020-06-27: 福哥口诀法:事原一隔持(事务属性ACID:原子性.一致性.隔离性.持久性) 用银行数据库来举例子解释一下这四个特性 原子性: 一个事务可能会包含多种操作,比如转账操作包 ...

  10. Flutter 容器Container类和布局Layout类

    1.布局和容器 [布局]是把[容器]按照不同的方式排列起来. Scaffold包含的主要部门:appBar,body,bottomNavigator 其中body可以是一个布局组件,也可以是一个容器组 ...