前因
今天晚上喝了几两65°的红星二锅头,坐在沙发上回想了下我这苦逼的程序员人生,从程序员到高级工程师的成长过程。想了想主题,今天就写篇《关于架构师那些事》的文章吧。
总结
所有架构师都不是自带光环,都是是从程序员->工程师,然后跟对一个好的领导或者好的项目开始学习框架,然后结合现有的知识一步一步磨炼成就了现在架构师的光环,从来就没有一步登天的人才,都是从埋坑到填坑的过程中走过来的。
我曾经参与了很多项目的架构搭建及技术框架的选型,利用现在主流的框架搭建过平台,也利用一些开源的平台做过一些开发,其中走过的坑只有自己知道,那叫一个“爽”,包括:
- 前端ui:ligerui、layui、easyui
- 后台框架:struts2/ spring mvc、spring、 mybatis hibernate
- 其它组件:activiti、shiro、quartz等
- 数据库: mysql 、Oracle、 SQL Server
多个tomcat分布式部署如何共享session,自己也写过比较复杂的功能然后封装成组件给程序员调用,例如权限控制、自定义报表组件、打印组件、凭证组件等。随着现在技术的不断成熟,不同阶梯的程序员也越来越多,怎样既能在提高开发效率的前提下,又能节省企业的成本,成为了不少科技公司管理的一大难题,特别是刚开始创业的公司。所以我们在拿到项目需要架构之前,要先了解项目的业务和模式,今天跟大家分享下我的一些经验。
- 首先我们要先了解项目的运营模式,不同的运营模式架构必然是不一样的,例如ERP、OA、云平台、网上商城、app小程序公众号后台、网站等。
- 项目是否要支持跨平台,linuxwindows,业务数据量能达到多少,是否要同时支持SQL Server、mysql、Oracle等主流数据库
- 项目有哪些业务,某些业务是否需要内外网隔离访问,例如财务系统内网访问,其他系统外网访问等(这个时候就需要前置机程序),是否有高并发的业务等
- 项目有哪些复杂的功能需要攻克的,例如需要 工作流 、自定义表单、自定义报表、常规打印套打、上传下载、 导入导出 等
- 前端需要什么样的风格,是否需要支持主流浏览器,是否包含一些常用或者特殊的控件,例如表格、树、下拉框、表单等
- 最后一条就是打算投多少成本,有多少人员,用多少周期去开发
就暂时列这么多吧(酒劲上来了),可以根据自己的经验和业务知识扩大下范围,也可以利用一些现有的 快速开发平台 然后再搭配组装,所有的架构和选型都没有对与错,只有适合自己就是最好的。
分享
快速开发平台,就是可以使得开发更为快速的开发平台。当开发平台产生之后,虽然减少了编程人员大量的编程时间,但是很多开发平台的效果并不是很理想,比如说某些开发平台比较复杂、难以掌握;有的开发平台通用性比较差;有的开发平台在时间上并没有得到改善;还有的依然还是需要写很多代码等等。这些问题的存在促使开发者不断的摸索、不断的改进,到最后越做越成熟,以致于现在市面上出现的大部分开发平台效率都非常高,他们改善了以往的产品存在的缺陷,使得开发过程比以往更简洁、编写代码更少、开发效率越来越高。我也整理了一些开源的平台的资料,如下:
JeeSite
GitHub地址:
在线演示
- 地址:
- 账号:system
- 密码:admin
JeeSite 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring MVC、Apache Shiro、MyBatis、Beetl、Bootstrap、AdminLTE)采用经典开发模式,让初学者能够更快的入门并投入到团队开发中去。在线代码生成功能,包括核心模块如:组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、工作流等。采用松耦合设计;界面无刷新,一键换肤;众多账号安全设置,密码策略;在线定时任务配置;支持集群,支持SAAS;支持多数据源。
技术选型
- 主框架:Spring Boot 2.0、Spring Framework 5.0、Apache Shiro 1.4、J2Cache
- 持久层:Apache MyBatis 3.4、Hibernate Validation 6.0、Alibaba Druid 1.1
- 视图层:Spring MVC 5.0、Beetl 2.7 替换 JSP 、Bootstrap 3.3、AdminLTE 2.4
- 前端组件:jQuery 1.12、jqGrid 4.7、layer 3.0、zTree 3.5、jquery-validation
- 工具组件:Apache Commons、Logback 1.1、Jackson 2.8、POI 3.14、Quartz 2.2
- 技术选型详情:
JeeSite演示demo
IT榻榻米(收费)
官网地址:
IT榻榻米是一款java轻量级智能快速开发平台,可以帮助您解决项目中90%的重复工作,让您更多关注业务逻辑。由于本身轻量级特性,可根据自身需求二次开发想要的功能。
- 使用 Spring boot,主流趋势,开箱即用 。
- 使用 Maven 多模块 构建项目,方便快捷。
- 使用 Thymeleaf模板引擎,易使用,够强大。
- 使用 安全框架
- Apache Shiro,安全可靠。
- websocket实时聊天,七牛云,短信通知…
IT榻榻米演示demo
IT榻榻米套餐
JavaFast(收费)
官网地址:
- 基础架构:采用 SpringMVC + MyBatis + BootStrap + Apache Shiro + Ehcache 基础架构
- 轻标准化:简单功能由代码生成器生成使用,复杂业务采用表单自定义,只需要写极少代码,即可实现复杂的业务逻辑
- 高效稳定:经过了专业压力测试,百亿级别数据性能测试,保证后台数据的准确性和页面访问速度和稳定性.
- 代码生成:支持多种数据模型,根据表生成对应的Entity,Service,Dao,Action,JSP等,增删改查/排序/导出导入Excel/权限控制/功能生成直接使用。生成前端代码、生成后端代码、生成高性能SQL
- 多种UI支持:系统支持多种风格的自动切换,可满足企业对UI的美观要求 .Bootstrap前端框架、支持手机或平板、集成企业微信
- 简易报表配置:支持报表在线配置,通过简单配置SQL语句即可实现图形报表展示。SQL配置、图形报表、数据列表
JavaFast演示demo
Jeecg(商业收费)
官网地址:
演示地址:
JEECG (J2EE Code Generation)是一款基于代码生成器的免费开源的快速开发平台。使用JEECG可以简单快速地开发出企业级的Web应用系统。
随着WEB UI框架(EasyUi/Jquery UI/Ext)等的逐渐成熟,系统界面逐渐实现统一化,代码生成器也可以生成统一规范的界面!代码生成+手工MERGE半智能开发将是新的趋势,单表数据模型和一对多数据模型的增删改查功能直接生成使用,可节省50%工作量,快速提高开发效率!
Java编程有很多重复机械代码,生成器可以帮助解决50%的重复工作,让开发更多关注业务逻辑,从而实现代码生成+手工merge的半智能开发!JEECG智能框架可以有效解决信息孤岛问题,生成统一代码、统一规范、统一设计思路,使你能在这个平台上,快速开发出高效高质量代码,缩短项目开发周期。
平台亮点
- 1.采用主流框架,容易上手; 代码生成器依赖性低,很方便的扩展能力,可完全实现二次开发;
- 2.开发效率很高,采用代码生成器,单表数据模型和一对多(父子表)数据模型,增删改查功能自动生成,菜单配置直接使用;
- 3.页面校验自动生成(必须输入、数字校验、金额校验、时间控件等);
- 4.封装完善的用户基础权限、强大的数据权限、和数据字典等基础功能,直接使用无需修改
- 5.常用共通封装,各种工具类(定时任务,短信接口,邮件发送,Excel导出等),基本满足80%项目需求
- 6.集成简易报表工具,图像报表和数据导出非常方便,可极其方便的生成pdf、excel、word等报表;
- 7.集成工作流activiti,并实现了只需在页面配置流程转向,可极大的简化jbpm工作流的开发;用jbpm的流程设计器画出了流程走向,一个工作流基本就完成了,只需写很少量的java代码;
- 8.UI快速开发库,针对WEB UI进行标准式封装,页面统一采用自定义标签实现功能:列表数据展现、页面校验等,标签使用简单清晰且便于维护
- 9.在线流程设计,采用开源Activiti流程引擎,实现在线画流程,自定义表单,表单挂靠,业务流转
- 10.查询过滤器:查询功能自动生成,后台动态拼SQL追加查询条件;支持多种匹配方式(全匹配/模糊查询/包含查询/不匹配查询);
- 11.多数据源:及其简易的使用方式,在线配置数据源配置,便捷的从其他数据抓取数据;
- 12.国际化:支持多语言,开发国际化项目非常方便;
- 13.数据权限(精细化数据权限控制,控制到行级,列表级,表单字段级,实现不同人看不同数据,不同人对同一个页面操作不同字段
- 14.多种首页风格切换,支持自定义首页风格。(经典风格、Shortcut风格、ACE bootstrap风格、云桌面风格)
- 15.在线配置报表(无需编码,通过在线配置方式,实现曲线图,柱状图,数据等报表)
- 16.简易Excel导入导出,支持单表导出和一对多表模式导出,生成的代码自带导入导出功能
- 17.自定义表单,支持用户自定义表单布局,支持单表,一对多表单、支持select、radio、checkbox、textarea、date、popup、列表、宏等控件
平台架构
- JEECG v2 系列版本采用主流S2SH框架,容易上手;代码生成器依赖性低,很方便的扩展能力,可完全实现二次开发;
- JEECG V3 系列版本采用SpringMVC+Hibernate+Spring jdbc架构技术,
- 开发效率很高,单表数据模型和一对多(父子表)数据模型的增删改查自动生成,功能直接使用;
- 页面校验自动生成(必须输入、数字校验、金额校验、时间空间等);
- 封装完善的用户权限和数据字典等基础功能,直接使用无需修改
- 常用共通封装,各种工具类(定时任务,短信接口,邮件发送,Excel导出等),基本 满足80%项目需求
- 集成简易报表工具,图像报表和数据导出非常方便,可极其方便的生成pdf、excel、word等报表;
- 集成工作流jbpm,并实现了只需在页面配置流程转向,可极大的简化jbpm工作流的开发;用jbpm的流程设计器画出了流程走向,一个工作流基本就完成了,只需写很少量的java代码
Jeecg演示demo1
Jeecg演示demo2
EOVA
官网地址:
技术亮点
- 以元数据驱动业务为核心思想
- 使用了极速框架JFinal,站在巨人的肩膀上
- 以OOP思想结合EasyUI和Bootstrap样式自创EovaUI
- 使用Beetl融合Java和Script
- 兼容主流数据库Mysql、Oracle、Postgre…
- 可以一键完成CRUD,但不仅限于CRUD
- 灵动迅捷,多快好省,不影响你你实现任何功能
EOVA演示demo
Dorado
官网地址:
演示地址:
Dorado Presentation Middleware(即Dorado展现中间件,以下简称Dorado)致力于辅助Web应用中表现层的开发过程。Dorado主要可以为您带来如下两方面的使用价值:
- 更加美观、更加人性化的Web操作界面。
- 更加高效的表现层开发效率。
Dorado Presentation Middleware产品包含3个主要的功能部分:Web客户端、服务端引擎、IDE集成开发工具。(见下面插图)
- Web客户端 –主要利用Javascript搭建的纯浏览器前端展现系统,可支持目前较为常见的所有主流浏览器。
- 服务端引擎 –用于辅助Dorado Web客户端的自动生成,客户端与服务端的数据通信、状态同步,以及Dorado展现层与后台系统的集成等。
- IDE集成开发工具 –Eclipse插件形式的集成开发工具。用于辅助开发人员对Dorado界面及其他相关配置进行快速的定制。
主要功能特点
1. 全新的Web客户端
Dorado7提供了全新打造的Web客户端,这包括全新的基础运行框架和全新的控件库。较之Dorado的前作,新的Web客户端将带来如下的增强:
- 支持所有主流浏览器 –Dorado7将兼容所有主流的浏览器,包括IE、Chrome、Firefox、Safari、Opera以及以这5种浏览器为内核的其他浏览器。 结合目前各浏览器在性能、稳定性、功能等各方面的因素,我们推荐用户使用Chrome作为首选的浏览器。
- 更加丰富的控件库 –初始包含超过60个的界面控件,并且此数量还会不断的提高。
- 更加Ajax –由于在设计之初给予了周全的考虑,因此Dorado7可以在几乎所有的交互过程中以异步请求替代同步请求,这将使界面的操作体验获得极大的提升。 同时,Dorado7中还提供了独特的Ajax请求自动合并技术,以尽可能减少与服务端之间的实际交互次数,进一步提高界面运行效率。
- 管理 库文件 ,实现按需装载 –Dorado7提供了以资源包的形式对Javascript和CSS文件进行管理的功能,不但系统内部的库文件以此种方式进行管理,用户也可以将自己的库文件纳入这一管理机制。 通过这一功能,用户可以定义各资源包之间的依赖关系、实现库文件的运行时自动合并、以及库文件的按需装载。 这可以在性能优化、项目维护等方面带来诸多好处。
- 强大的客户端调试器 –新的客户端调试器可以提供分级日志、API测试、页面结构剖析等调试功能。 借助新的调试器您甚至还可以随时查看/修改任意Dorado对象的属性值、分析 DataSet 中的实时数据。配合Dorado7中全新的异常处理机制,相比前作开发人员将拥有更加丰富的调试手段。
- 完整的拖拽功能支持 –Dorado7中所有的控件都将支持拖拽操作的属性、事件和API接口。
2. 立体数据模型
“立体数据模型”因其相对于平面数据模型(二维数据模型)而得名。即指Dorado7推翻了Dorado前作中以DataSet为媒介、以二维表形式对于展现数据进行封装和管理的设计思路。 Dorado7不再局限数据必须以二维表结构与DataSet对接,而是可以支持非常自由的数据形式。并且也不再提供专用的数据封装对象。 这些变化使得展现层中的数据更加纯粹、更加贴切真实的业务含义。自然,也使开发变得更加便利、更加生动。
“立体数据模型”是Dorado7相对于前作最重要的概念变化,也是Dorado7最为核心的设计思想。 以上的寥寥数语并不足以阐明这一抽象概念,请参考 Dorado7方法论 中关于“立体数据模型”的更多论述。
3. 没有JSP的Web
秉承了Dorado产品的一贯风格,Dorado7仍以XML形式的视图配置文件作为定义Web界面的主要手段。 不过,在Dorado7中这里的视图配置文件被赋予了更多的内涵,视图配置文件已经可以完整的描述Web界面的所有特性,JSP不再是Dorado7的必选项。 在大多数情况下,直接访问一个视图配置文件就可以得到一个功能完整的Web界面。
可能很多开发人员对于此特性会感到一丝不安,出于某些技术人员习惯以及页面需求等原因,开发人员可能仍然需要以HTML形式来实现页面的布局。 Dorado7同样对此种使用方式提供了完善的支持。开发者可以很方便的使用JSP、Velocity或者其他类似的技术来为视图配置文件定义布局方式。 并且,新的开发方式让美工人员与开发人员的合作变得更为可行和便利。以JSP为例,Dorado7不再引入繁多的Taglib标签库,而是以纯HTML方式的占位符来辅助Web页面的布局。
4. 智能方法适配
“智能方法适配”是指允许开发人员尽可能按照自己的意愿、业务的需要来定义他们的业务方法,然后由Dorado引擎自动根据场景、参数名、参数类型等因素来判断应当怎样调用该业务方法。 “智能方法适配”是Dorado7提供的一个非常有特色的功能,提供此功能的主要目的是尽量减少开发人员所需要掌握的Dorado API,让业务方法的代码更加“业务化”,更加易于阅读。
通过“智能方法适配”也可以很好的体验出Dorado7所提倡的“基于约定而非配置”进行开发的理念。在实际的应用场景中大部分实现了Dorado前端的功能中可能并不需要引入任何Dorado的API。
5. 扩展和重用
为提高Dorado7产品的扩展性和可重用性我们在Dorado7中提供了很多新的特性,这些特性主要包括:
- 叠加式配置 –当用于需要设置或改变Dorado中的某运行参数时,通常不需要直接修改Dorado提供的缺省配置文件,而是增加一个新的、只包含最小参数集合的配置文件。 由Dorado引擎对这些配置文件进行叠加是的读取和处理,此特性可以有效的降低升级Dorado引擎可能带来的额外成本、提供项目的可维护性。
- 利用Spring搭建的Dorado引擎 –Dorado7自身的服务就是利用Spring搭建起来,不过Dorado7并不因此要求用户的项目一定要使用Spring。
- 这个特性使得开发人员有能力利用Spring的特性来替换几乎所有Dorado自身的内部服务。
- 数据模型对象 –Dorado7中的数据模型对象既支持全局、私有、匿名等可见性,又支持类似面向对象的继承和复写。这些特性可以为配置信息的重用和维护提供很多的便利。
- 视图配置文件模板 –Dorado7中的视图配置文件支持多级模板功能,这非常有利于降低项目的管理和维护成本。
- 视图配置的Import和Export –Dorado7的视图配置文件允许开发人员利用Import和Export这两个标记。引入来自于其他视图配置文件中的一段配置信息。
- 用户自定义控件 –Dorado7允许用户将一段已有的、具有一个通用性视图配置信息注册为一个新的自定义控件,并且Dorado的IDE也可以非常方便的支持这一新添加的控件。
6. Client Edition
Dorado7提供Dorado7 Client Edition这样一个特性的产品打包方式,Dorado7 Client Edition中只包含了Dorado7 Presentation Middleware中的Web客户端部分(即Javascript和CSS的部分)。
发布此版本的目的是为了满足各种Web项目中前端界面增强的需求。这里提到的Web项目包括基于JEE的Web项目和其他非基于JEE的Web项目,如.Net、PHP等,其定位类似于Ext。 Dorado7 Client Edition从一个侧面体现出了Dorado7产品在设计上的封装度和灵活性。
7. 不仅仅是展现中间件
虽然Dorado7的主要功能都是围绕展现层这一主题展开的,可是我们认为Dorado7连同配套的SampleCenter提供给用户的并不仅仅是对Web应用展现层的简单补充。 通过Dorado7即相关的示例所承载的是一种非常实用的Web开发最佳实践、一种新的开发模式。
因此可以说,使用Dorado您得到的可能并不是仅仅是对展现层的改良,也是对整体应用开发模式的一次度量和重铸。
Dorado演示demo
代码生成工具
地址:
根据数据库结构,按照用户的要求,动态生成可执行代码
生成的maven结构。spring mvc + spring + mybatis传统接口
前端多技术: easyui, bootstrap + jsp, bootstrap + freemarker, javafx ui, flutter(android + ios)
技术亮点
- spring boot + spring + mybatis + mysql + 各种前端
- 支持mybatis一对一,一对多,多对多关系查询,并支持动态选择是否生成
- 支持mybatis分页查询,唯一索引删除,查询,更新等
- 支持表中字段枚举生成
- 支持表中字段重注释,并且同步到POJO的注释上
- 支持对表筛选,筛选中的表可以不生成对应的pojo + mybatis mapper + dao + service + controller;
- 表对应的前端可以动态控制,控制只显示需要的字段
- 支持Swagger2
- 支持vertx + sync + quasar + freemarker
- web端支持shiro权限控制
- 支持metrics.对系统增加了监控
- 支持flutter版的android + ios
代码生成工具1
代码生成工具2
代码生成工具3
代码生成工具4
代码生成工具5