共计 2604 个字符,预计需要花费 7 分钟才能阅读完成。
技术框架篇 – 第 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)登陆我应用了 cas,它是一个 SSO 框架,采纳票据验证机制保障了,认证的平安。
(2)受权我采纳了 shiro 框架与 cas 无缝整合,依据三类权限的设置,保障了菜单、按钮、数据的精密管制
(3)加密包含对 HTTP 头的加密(SSL),对要害业务数据的加密(AES、SHA1) - 升高信息流的复杂性,最外围的是如何梳理,如何切分业务,模块之间如何相互调用。
(1)梳理和切分业务其实更多的是教训问题,但有个通用的大准则,高内聚;也就是把关联性极高的性能放在一起,而对外裸露必要的接口供调用即可。其中还要思考到一些根底数据的通用化设计。比方:组织信息、职员信息、主数据、数据字典等,独自设计并对外提供有双层缓存的接口。(其中也要思考到缓存的更新策略)
(2)模块间我用 Maven 父子我的项目做了划分,也为间接的接口调用和 REST 格调的 API 调用做了不同形式的设计 - 如何进步开发效率,应该是咱们认真思考的话题。因为这真的很重要。如果解决切当甚至会节俭 30%-40% 的研发工夫。
(1)代码主动生成工具:我研发了一套能够主动生成 Controller、Service、Dao、Model 以及所有配置及注解的工具。以后这是基于我指定的代码标准。只须要批改两到三个配置项,即可一键在我的项目下生成咱们所需的代码。原本至多要编写半小时的代码,当初只须要 10 秒钟。
(2)可复用的工具包:十几年积攒的所有工具类可提供疾速的动态调用形式
(3)抽丝剥茧,独立的功能设计:很多罕用的第三方组件或技术的解决形式,形象进去,加以复用。比方:线程、Redis、JMS、Socket、Json、Groovy、Mongo 等。
(4)多功能的 AOP 解决:基本思路是通过 AOP 及自定义注解灵便退出各种辅助解决性能。比方:办法缓存、主动 set 根底字段值、日志解决、数据权限管制等。
(5)必要的通用性能:通过 Spring 提供的技术,实现异样解决、类型转换、数据验证、API 申请拦挡等各种解决要求。 - 可配置可扩大其实说起来简略做起来难。可能很多软件都是这么宣传的,但真正做到的并不多。其实我认为次要做到如下几点就能够了:
(1)字段的可扩大,即能够通过配置的形式减少辅助字段,并且能实现 1 对 1 构造,和 1 对多构造的两种形式。
(2)流程的灵活处理。软件往往设计上会固定某一主流程,只有设计上让这一流程的组织不固定,而绝对涣散的实现即可。
(3)功能性模块的高度可配:比方权限零碎、报表零碎、工作流、数据字典 - 最初一个是无关升高学习老本和保护老本的问题。我感觉这更多是因为要匹配开源的要求,开源的使用者少数是集体或小团体,这对于遍及一款开源产品显得尤为重要。怎么做呢?
(1)用最遍及的技术、起码的技术品种、实现更多的需要。
(2)提供最简略的配置文档以实现程序部署。
对将来的思考
为了思考单体需要的激增,不得不应答高并发以及高可用的情景。所以当初技术抉择以及底层搭建时就肯定要有所考量。以后框架肯定要能够疾速引入新技术并能够高效整合。我认为 Springboot 肯定是 Java 语言当下是最优的抉择,也为 SpringCloud 的降级做了足够筹备。
当然其中还有很多要思考的内容,比方:负载平衡、音讯队列、数据总线、读写拆散、异步并发、降级限流等。在此不展开讨论,如果有趣味可与开发者间接沟通。
后记
明天的日志写的比拟长,但还没有包含很多中间件的优化和配置阐明,为了给开源软件的使用者简化他们的部署工作,我会在前面附加一个技术补充文章。
心愿您读完本文能够帮忙笔者进入【码云】或【GitHub】点点星标。感激大家的反对!