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

    ------------恢复内容开始------------ 实例 对关联数组按照键值进行升序排序: <?php$age=array("Peter"=>"35 ...

  2. ZROI 提高十连测 Day1

    第一天的提高模拟测 考前特意睡了20min 还是歇菜了,果然自己菜是真实的. 题目质量海星 但是我都不会这是真的...题目由于是花钱买的这里就不放了 LINK:problem 熟悉我的人应该都知道账号 ...

  3. C笔记-左值与右值

    目录 前言:工欲善其事,必先利其器 两种资料 参考资料及其使用说明 官方对于左值和右值的定义 实际使用时的疑问 左值的涵盖范围 重要概念: 左值转化(lvalue conversion) 左值与指针 ...

  4. 利用python进行数据分析PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:hi2j 内容简介 [名人推荐] "科学计算和数据分析社区已经等待这本书很多年了:大量具体的实践建议,以及大量综合应用方法.本书在未来几年里肯定会成为Python领域中技术计 ...

  5. 002_解析go语言中的回调函数

    回调函数是一种特殊的函数写法,在很多场景中发挥广泛的作用.但是对于初学者来说,回调函数是比较头疼的一个东西,不太好懂,笔者研究了一番,以网上的一个例子详细说明一下 首先看一个代码示例(来源于网上) p ...

  6. 比PS还好用!Python 20行代码批量抠图

    你是否曾经想将某张照片中的人物抠出来,然后拼接到其他图片上去,从而可以即使你在天涯海角,我也可以到此一游? 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在 ...

  7. javascript逻辑判断与循环笔记

        短路运算(逻辑中断)     1.短路运算的原理:当有多个表达式(值)时,左边的表达式值可以确定结果的时候就不再继续运算右边的表达式的值     2.逻辑与 &&     如果 ...

  8. 2020-07-06:一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录

    福哥答案2020-07-06:表a和表b的字段都是id和tid,数据类型都是int.查询结果顺序上以 表a 为准.1.JOIN.SELECT * FROM a JOIN b ON a.tid = b. ...

  9. offer收割机也有方法论

    秋招的战火就像这夏天的温度一样炙热,陆陆续续很多学弟学妹问我秋招的注意事项,作为温暖型大叔的我此刻必须出场了. 看仔细了,接下来龙叔就把这offer收割机的秘密都告诉你们. 如果你还没点关注的话,记得 ...

  10. Linux命令--vi/vim复制一行,粘贴

    在光标的位置按“yy”,复制当前行: 然后再光标的行按“p”,粘贴到下一行,原来的往下顺移