提交 0493f2e8 编写于 作者: O OSWorks

no commit message

上级 460199f1
### :fa-book: AOSuite G1开发手册
### :fa-book: AOSuite开发手册
[阅读文档](http://git.oschina.net/osworks/AOS/tree/master/doc)
### :fa-cogs: AOSuite G1在线演示
### :fa-cogs: AOSuite在线演示
[http://121.41.231.94/aosuite](http://121.41.231.94/aosuite)
\ No newline at end of file
>AOSuite G1开发套件基于JavaEE技术体系,以“标准功能可复用、通用模块可配置、行业需求快速开发、异构系统无缝集成”为目标, 帮助企业落实IT策略、屏蔽技术壁垒,快速实现可水平扩展的高性能高可用业务愿景。 为传统软件企业和互联网企业研发团队提供高效可控、随需应变、快速实现业务需求的全栈式技术解决方案,以最低成本和最低风险获得更高质量、更快交付业务和运维支持的核心技术竞争力。
>AOSuite开发套件基于JavaEE技术体系,以“标准功能可复用、通用模块可配置、行业需求快速开发、异构系统无缝集成”为目标, 帮助企业落实IT策略、屏蔽技术壁垒,快速实现可水平扩展的高性能高可用业务愿景。 为传统软件企业和互联网企业研发团队提供高效可控、随需应变、快速实现业务需求的全栈式技术解决方案,以最低成本和最低风险获得更高质量、更快交付业务和运维支持的核心技术竞争力。
#### 适用场景
AOSuite G1以开发传统应用系统为主并一定程度兼顾了互联网应用场景的需求,适合构建和开发中大型企业应用管理系统、各级政务信息化系统、银行保险医疗等传统行业管理系统;也具备构建基于(移动)互联网面向C端的各类电商、P2P网贷、理财、小贷、社交等APP后端接口服务、面向B端的商户管理系统、 面向运营企业的后台管理系统。
AOSuite以开发传统应用系统为主并一定程度兼顾了互联网应用场景的需求,适合构建和开发中大型企业应用管理系统、各级政务信息化系统、银行保险医疗等传统行业管理系统;也具备构建基于(移动)互联网面向C端的各类电商、P2P网贷、理财、小贷、社交等APP后端接口服务、面向B端的商户管理系统、 面向运营企业的后台管理系统。
#### 技术特点
- ExtJS without JS。平台缺省主题主要依赖ExtJS库,但经过了深度封装和标签化,可使得开发人员脱离繁琐的Html、CSS、JS编程也能开发出标准化的风格界面、使用统一的组件事件响应模型。
......@@ -20,9 +20,9 @@ AOSuite G1
#### 历史局限性
- 关于前端。目前基于ExtJS的AOSUI标签库所带来一致的界面风格和交互体验以及容易上手快速开发的特点一直是我们的优势,加之多年来我们在这套前端UI体系上已经有了大量的经验和积累。但其劣势也是明显的,比如视觉体验相对传统古板,不善于开发一些脱离标准模版而随意定制的复杂或非标准界面等。
- 关于后端。AOSuite G1目前后端结构为集中式单体应用的开发模式,对于分布式的支持可以使用反向代理软负载机制部署多个单体集群节点实现一定程度的高性能和高可用。这种模式在服务治理如服务模块化、服务注册、服务发现、服务管理监控、弹性容量规划、灵活扩展性等方面并非很友好。
- 关于后端。AOSuite目前后端结构为集中式单体应用的开发模式,对于分布式的支持可以使用反向代理软负载机制部署多个单体集群节点实现一定程度的高性能和高可用。这种模式在服务治理如服务模块化、服务注册、服务发现、服务管理监控、弹性容量规划、灵活扩展性等方面并非很友好。
- 开发平台的最大价值在于“降低成本、控制风险并尽最大可能按时输出高品质的成果”,没有任何一个平台是普世万能的,只会有当前条件下相对合适的,AOSuite G1亦是如此。因此在进行技术选型时请充分了解清楚AOSuite G1能为你做什么以及它的局限性,在有限时间窗口、项目资源、团队技术储备等现实背景下,对功能实现、扩展性、高性能、高可用、可维护性等方面做出合理的取舍与平衡。我想这才是架构和选型之道,而不是纠结于Ext风格好还是BootStrap风格好,基于单体应用的分布式好还是基于微服务模式的分布式架构好等等。
- 开发平台的最大价值在于“降低成本、控制风险并尽最大可能按时输出高品质的成果”,没有任何一个平台是普世万能的,只会有当前条件下相对合适的,AOSuite亦是如此。因此在进行技术选型时请充分了解清楚AOSuite能为你做什么以及它的局限性,在有限时间窗口、项目资源、团队技术储备等现实背景下,对功能实现、扩展性、高性能、高可用、可维护性等方面做出合理的取舍与平衡。我想这才是架构和选型之道,而不是纠结于Ext风格好还是BootStrap风格好,基于单体应用的分布式好还是基于微服务模式的分布式架构好等等。
#### 发展方向
鉴于上述局限性,加之近年来,各种前端技术琳琅满目层出不穷;后端微服务技术趋于成熟,dubbo(X)之类的分布式服务治理框架得到广泛使用,springcloud也开始流行;云计算深入人心,云端技术得到普遍认可和接受;大数据不再是纸上谈兵,其存储、分析相关技术得到普及,基于大数据的应用不断在各行各业落地实施。正所谓这是一个最坏的时代,技术的发展和革新,不得不随时要刷新我们的技术栈、系统架构、开发方法、部署运维方式等;但换一个角度看,这也是一个最好的时代。在苦于变化的同时,也让我们具备了更多的技术手段、方法来解决更多的问题,扩展我们的想象空间。因此,AOSuite G1在继续维护这个版本的同时,也顺势而为开辟一个新的分支AOSuite G2(第二代AOSuite),为不同的场景和项目需求在新的技术背景下提供另外一个选项。
\ No newline at end of file
鉴于上述局限性,加之近年来,各种前端技术琳琅满目层出不穷;后端微服务技术趋于成熟,dubbo(X)之类的分布式服务治理框架得到广泛使用,springcloud也开始流行;云计算深入人心,云端技术得到普遍认可和接受;大数据不再是纸上谈兵,其存储、分析相关技术得到普及,基于大数据的应用不断在各行各业落地实施。正所谓这是一个最坏的时代,技术的发展和革新,不得不随时要刷新我们的技术栈、系统架构、开发方法、部署运维方式等;但换一个角度看,这也是一个最好的时代。在苦于变化的同时,也让我们具备了更多的技术手段、方法来解决更多的问题,扩展我们的想象空间。因此,AOSuite在继续维护这个版本的同时,也顺势而为开辟一个新的分支AOSuite G2(第二代AOSuite),为不同的场景和项目需求在新的技术背景下提供另外一个选项。
\ No newline at end of file
>AOSuite G1缺省使用最传统的工程搭建方式和ANT(IDE内置)资源依赖管理,目的是为不同阶段的同学提供便利、减少环境配置障碍,争取入门零门槛。 提示:如果你是maven或gradle用户,可下载后自行改装使用。
>AOSuite缺省使用最传统的工程搭建方式和ANT(IDE内置)资源依赖管理,目的是为不同阶段的同学提供便利、减少环境配置障碍,争取入门零门槛。 提示:如果你是maven或gradle用户,可下载后自行改装使用。
#### §1. 环境准备
- 安装Java1.7。
- 安装Eclipse JavaEE(建议)。其它Java IDE也是支持的,或许需要你做些稍微的改动。
- 安装Redis。这是AOSuite G1的标配组件,必须安装的。 下载Windows版本 下载Linux版本
- 安装Redis。这是AOSuite的标配组件,必须安装的。 下载Windows版本 下载Linux版本
数据初始化。请先安装数据库软件,目前支持MySQL5.5(+)。执行src/resources/sql路径下对应版本的*.sql脚本文件。
#### §2. 工程导入
......
>本教程将带初次接触AOSuite G1开发的用户以最短的时间体验一下AOSuite G1开发的流程。希望能帮助开发者更快的入门或给技术决策者在技术选型调研时作为参考。 本教程以开发一个增删查改的CRUD后台管理模块为例子。(虚拟业务场景:信用卡账户信息管理)
>本教程将带初次接触AOSuite开发的用户以最短的时间体验一下AOSuite G1开发的流程。希望能帮助开发者更快的入门或给技术决策者在技术选型调研时作为参考。 本教程以开发一个增删查改的CRUD后台管理模块为例子。(虚拟业务场景:信用卡账户信息管理)
#### §1. 自动生成持久层代码
生成信用卡账户信息表demo_account的Dao相关代码。打开DaoConsole.java,配置 数据库连接信息和Java代码输出路径以及包路径信息,然后执行这个main()方法就可以生成代码。将会输出持久化对象文件:DemoAccountPO.java、数据访问接口文件:DemoAccountDao.java、单表常用SQL映射文件:DemoAccountDao.xml 3个源码文件。
......
>AOSuite G1内置了一组通用系统管理功能,实现了对组织、人员、角色、资源、权限等的管理,避免了每个项目的重复建设。本教程带大家简单的了解一下这些预置功能模块。
>AOSuite内置了一组通用系统管理功能,实现了对组织、人员、角色、资源、权限等的管理,避免了每个项目的重复建设。本教程带大家简单的了解一下这些预置功能模块。
#### §1. 键值参数
键值参数模块提供了系统的一些K-V形式的参数配置功能(比如缺省的分页大小等),业务里相关参数也可以在这里维护。键值参数在系统启动时候回被加载到Redis缓存,新增修改删除自动刷新。可以通过AOSCxt.getParam(String key)方法获取到配置参数。
......@@ -21,7 +21,7 @@
- **管理权限**:管理权限是针对管理人员的权限,当一个角色被授予ABC三个菜单管理权限后,则和这个角色关联的用户如果能操作角色管理菜单,则其能给新建的角色授予经办权限的待选菜单集合为ABC。
#### §7. Redis缓存管理
Redis缓存管理提供对AOSuite G1标配组件Redis的可视化管理和维护。(批注:不是很适用,后期或许会删除)
Redis缓存管理提供对AOSuite标配组件Redis的可视化管理和维护。(批注:不是很适用,后期或许会删除)
#### §8. 图标
图标模块列出了所有可用的预置图标。
\ No newline at end of file
>AOSuite G1界面使用AOSTag标签库进行开发。AOS标签库是基于ExtJS4.X的封装,屏蔽了ExtJS开发的繁琐和有效降低了界面开发学习成本。关于界面开发的文档我就不详细写了,大家直接查看我们的范例系统会更加事半功倍。另外,[ExtJS4.X的API](http://extjs-doc-cn.github.io/ext4api/)也可以查阅。[访问在线范例系统](http://121.41.231.94/AOSuite G1)。
>AOSuite界面使用AOSTag标签库进行开发。AOS标签库是基于ExtJS4.X的封装,屏蔽了ExtJS开发的繁琐和有效降低了界面开发学习成本。关于界面开发的文档我就不详细写了,大家直接查看我们的范例系统会更加事半功倍。另外,[ExtJS4.X的API](http://extjs-doc-cn.github.io/ext4api/)也可以查阅。[访问在线范例系统](http://121.41.231.94/AOSuite)。
#### §1. 关于界面开发需要知道的几个地方
- **关于标签的ID属性**
......@@ -7,7 +7,7 @@
大量的常用交互性操作都在这里面进行了封装,一般来说我们直接使用这里封装好的方法就可以了。
#### §2. 范例系统说明
AOSuite G1提供了比较丰富的各种示例,参考范例系统是新手入门的最佳捷径。相关实现在aos.showcase.*包里。这里,我稍微整理一下每一个范例模块重点演示的功能以供参考。
AOSuite提供了比较丰富的各种示例,参考范例系统是新手入门的最佳捷径。相关实现在aos.showcase.*包里。这里,我稍微整理一下每一个范例模块重点演示的功能以供参考。
- **按钮|停靠栏|信息提示**
这个范例模块重点演示按钮、工具栏、状态栏、各种交互效果的信息提示的基本用法。
......
>AOSuite G1后端主要依赖被广泛使用的Spring和MyBatis框架。因此,大家的技术积累和经验在这里一样是通用的。所以,我们就只介绍一些需要重点关注的地方。
>AOSuite后端主要依赖被广泛使用的Spring和MyBatis框架。因此,大家的技术积累和经验在这里一样是通用的。所以,我们就只介绍一些需要重点关注的地方。
#### §1. 需要先搞明白的几种数据结构
- PO:数据持久化实体对象。一个持久化对象对应一个表,PO属性和表字段一一对应,PO通过代码生成器生成,不可以手工维护。
- Dao:数据访问对象。一个数据访问对象对应一个表,提供单表的数据访问相关操作,Dao通过代码生成器生成,不可以手工维护。
- Dto:数据传输对象,在AOSuite G1里约定为一种继承自Map的增强型数据结构(类似MQ框架里的MapMessage对象)。他提供了一些Key值的强制类型转换功能,具有比原生Map更强的容错性和灵活性。 在各应用层中充当着非常重要的角色,建议大家可以重点关注一下其相关用法。其相关实现可以查看HashDto.java。
- Dto:数据传输对象,在AOSuite里约定为一种继承自Map的增强型数据结构(类似MQ框架里的MapMessage对象)。他提供了一些Key值的强制类型转换功能,具有比原生Map更强的容错性和灵活性。 在各应用层中充当着非常重要的角色,建议大家可以重点关注一下其相关用法。其相关实现可以查看HashDto.java。
#### §2. 需要重点关注的几个类/文件
- HttpRouterController:HTTP请求路由转发器。在进行AOSuite G1开发后台模块的时候,Aiax请求通过这个转发器以反射方式调用服务实现,所以我们不需要创建Controller类,只需要服务实现就可以了。
- HttpRouterController:HTTP请求路由转发器。在进行AOSuite开发后台模块的时候,Aiax请求通过这个转发器以反射方式调用服务实现,所以我们不需要创建Controller类,只需要服务实现就可以了。
- AOSBeanLoader:SpringBean加载器。通过这个类可以在任何地方获取容器中的SpringBean组件。一般情况下用不到,大部分时候我们都是通过注入的方式引用SpringBean组件的。
- AOSCxt:应用系统上下文。可以获取到参数配置信息、数据字典信息、当前登录用户的信息等。
- WebCxt:Web系统上下文。和Web层相关的一些常用操作。
......@@ -17,4 +17,4 @@
#### §3. 必备的MyBatis动态SQL映射技能
单表操作的SQL映射我们已经通过生成器生成,但是针对多表操作和一些单表的特殊SQL仍然需要开发人员编写SQL。因此,使用MyBatis进行动态SQL成为AOSuite G1开发的 必备技能。关于这部分内容,请查询相关资料即可,这方面的教程已经非常丰富了。推荐:[MyBatis动态SQL官方教程](http://http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html)
\ No newline at end of file
单表操作的SQL映射我们已经通过生成器生成,但是针对多表操作和一些单表的特殊SQL仍然需要开发人员编写SQL。因此,使用MyBatis进行动态SQL成为AOSuite开发的 必备技能。关于这部分内容,请查询相关资料即可,这方面的教程已经非常丰富了。推荐:[MyBatis动态SQL官方教程](http://http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html)
\ No newline at end of file
>本教程将简单介绍一下如何在AOSuite G1下开发Http接口,供前端Web、App或其它系统/模块调用。 数据接口交互方式很多,就不展开叙述了。这里缺省使用http协议+json序列化格式的轻量级组合作为接口交互方式。提示:更多实例请参阅范例代码 aos.showcase.api.CreditCardController.java和aos.test.testcase.HttpClientTest.java
>本教程将简单介绍一下如何在AOSuite下开发Http接口,供前端Web、App或其它系统/模块调用。 数据接口交互方式很多,就不展开叙述了。这里缺省使用http协议+json序列化格式的轻量级组合作为接口交互方式。提示:更多实例请参阅范例代码 aos.showcase.api.CreditCardController.java和aos.test.testcase.HttpClientTest.java
#### §1. 发布接口及调用实例一
这种方式使用表单提交的方式来传递请求参数,Content Type为application/x-www-form-urlencoded。
......@@ -29,7 +29,7 @@
* (接口实现和接口调用是配套的,详见接口实现:api/creditCard/register2)
*/
public static void doPost2() {
HttpRequestVO httpRequestVO = new HttpRequestVO("http://localhost:10010/AOSuite G1/api/creditCard/register2");
HttpRequestVO httpRequestVO = new HttpRequestVO("http://localhost:10010/AOSuite/api/creditCard/register2");
httpRequestVO.setJsonEntityData("{"mobile_":"18616786188","name_":"熊春"}");
HttpResponseVO httpResponseVO = AOSHttpClient.execute(httpRequestVO);
System.out.println("HTTP状态码:" + httpResponseVO.getStatus());
......@@ -67,7 +67,7 @@
* (接口实现和接口调用是配套的,详见接口实现:api/creditCard/register2)
*/
public static void doPost2() {
HttpRequestVO httpRequestVO = new HttpRequestVO("http://localhost:10010/AOSuite G1/api/creditCard/register2");
HttpRequestVO httpRequestVO = new HttpRequestVO("http://localhost:10010/AOSuite/api/creditCard/register2");
httpRequestVO.setJsonEntityData("{"mobile_":"18616786188","name_":"熊春"}");
HttpResponseVO httpResponseVO = AOSHttpClient.execute(httpRequestVO);
System.out.println("HTTP状态码:" + httpResponseVO.getStatus());
......@@ -104,7 +104,7 @@
Map inMap = Maps.newHashMap();
inMap.put("name", "熊春");
inMap.put("age", "30");
HttpRequestVO httpRequestVO = new HttpRequestVO("http://localhost:10010/AOSuite G1/api/creditCard/info/1000", inMap);
HttpRequestVO httpRequestVO = new HttpRequestVO("http://localhost:10010/AOSuite/api/creditCard/info/1000", inMap);
httpRequestVO.setRequestMethod(AOSHttpClient.REQUEST_METHOD.GET);
HttpResponseVO httpResponseVO = AOSHttpClient.execute(httpRequestVO);
System.out.println("HTTP状态码:" + httpResponseVO.getStatus());
......
>AOSuite G1部署可以很方便的支持单机部署和集群部署。 详见下文逐一分解。
>AOSuite部署可以很方便的支持单机部署和集群部署。 详见下文逐一分解。
#### §1. 打包
AOSuite G1当前版本使用IDE自带的ANT做为打包工具。在src/resources/release有两个打包文件:aos.war.pro.xml和aos.war.test.xml,分别对应生产环境的打包脚本和测试环境的打包脚本。 为什么将其分开呢?主要是为了在打包过程中可以工具目标环境动态的修改和设置一些参数信息。(比如:数据库连接信息等。)打开任意一个脚本文件,完成相关参数的修改后,右键执行run as Ant Build命令即可完成打包输出。具体配置细节和可能会出错的地方在后面的视频讲解部分会有相关说明。
AOSuite当前版本使用IDE自带的ANT做为打包工具。在src/resources/release有两个打包文件:aos.war.pro.xml和aos.war.test.xml,分别对应生产环境的打包脚本和测试环境的打包脚本。 为什么将其分开呢?主要是为了在打包过程中可以工具目标环境动态的修改和设置一些参数信息。(比如:数据库连接信息等。)打开任意一个脚本文件,完成相关参数的修改后,右键执行run as Ant Build命令即可完成打包输出。具体配置细节和可能会出错的地方在后面的视频讲解部分会有相关说明。
#### §2. 单机部署
AOSuite G1支持部署到Tomcat7+、Weblogic10+等应用服务器,当前支持JDK1.6和JDK1.7,以后升级Spring后将支持JDK1.8(+),具体部署方法这里就没必要赘述了。提示 由于Redis是我们的标配组件,因此无论是单机部署还是集群部署都需要先安装Redis中间件。关于Redis的安装,网上已经有太多现成资料,请大家自行完成,这里也不再赘述。
AOSuite支持部署到Tomcat7+、Weblogic10+等应用服务器,当前支持JDK1.6和JDK1.7,以后升级Spring后将支持JDK1.8(+),具体部署方法这里就没必要赘述了。提示 由于Redis是我们的标配组件,因此无论是单机部署还是集群部署都需要先安装Redis中间件。关于Redis的安装,网上已经有太多现成资料,请大家自行完成,这里也不再赘述。
#### §3. 集群部署
AOSuite G1将会话信息集中存储到了Redis,因此我们在进行集群部署时将会非常方便,不需要做任何的会话同步等配置即可实现应用层线性扩展。本文以nginx+tomcat的组合讲解一下AOSuite G1的集群部署方式。其中nginx充当反向代理服务器(也可以是apache、haproxy等),tomcat充当应用服务器(也可以是weblogic等)。 提示 这种模式,nginx节点是会产生单点故障的,但对于大部分应用来说,这个故障概率是可以接受的。当然,如果你的应用场景需要不惜增加复杂性来保障高可用的话,可以再组合一些HA中间件(如:keepalived、heatbeat等)来解决反向代理服务器的单点故障问题,这里就不深入展开了。因为我个人一向推崇最小、可用、性价比、持续迭代;严厉反对脱离现实因素不计成本的假大空方案。
AOSuite将会话信息集中存储到了Redis,因此我们在进行集群部署时将会非常方便,不需要做任何的会话同步等配置即可实现应用层线性扩展。本文以nginx+tomcat的组合讲解一下AOSuite的集群部署方式。其中nginx充当反向代理服务器(也可以是apache、haproxy等),tomcat充当应用服务器(也可以是weblogic等)。 提示 这种模式,nginx节点是会产生单点故障的,但对于大部分应用来说,这个故障概率是可以接受的。当然,如果你的应用场景需要不惜增加复杂性来保障高可用的话,可以再组合一些HA中间件(如:keepalived、heatbeat等)来解决反向代理服务器的单点故障问题,这里就不深入展开了。因为我个人一向推崇最小、可用、性价比、持续迭代;严厉反对脱离现实因素不计成本的假大空方案。
下面为nginx配置文件的主要片段。1台nginx服务器:192.168.1.10;2台tomcat服务器:192.168.1.11和192.168.1.12。配置后集群入口为:http://192.168.1.10/AOSuite 。
```
......@@ -16,7 +16,7 @@ AOSuite G1
server 192.168.1.12:8080 weight=1;
}
location /AOSuite G1 {
location /AOSuite {
proxy_pass http://tomcats;
proxy_redirect off;
proxy_set_header HOST $host;
......
>这里列出了AOSuite G1相关的一些常见问答,也许能帮助到大家。
##### §1. AOSuite G1可以商用吗?开源协议是什么?有付费版吗?
AOSuite G1基于Apache V2协议开源,是商业友好的,可以放心使用。所有功能全部开放、代码全部开源,现在无付费版,将来也不会有付费版。
\ No newline at end of file
>这里列出了AOSuite相关的一些常见问答,也许能帮助到大家。
##### §1. AOSuite可以商用吗?开源协议是什么?有付费版吗?
AOSuite基于Apache V2协议开源,是商业友好的,可以放心使用。所有功能全部开放、代码全部开源,现在无付费版,将来也不会有付费版。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册