东软Unieap平台

开发环境与技术栈

操作系统

WINDOS7

数据库

Oracle

开发语言

JAVA

版本控制工具

git

框架

Unieap是基于现在主流的JAVA开发框架(Hibernate,Strust,Spring),封装了一些方法。所以也可以认为后台技术栈其实就是Hibernate+Strust+Spring。前端的框架也封装在了Unieap中。

SOA

采用的是阿里的框架dubbox,该框架现在主要由当当网来维护。

软件开发过程

敏捷软件开发scrum

东软Unieap平台简介

平台是基于J2EE平台的应用开发框架,为用户提供一致的规范和统一的标准,"组件化"的架构特征为规划业务用用奠定基础。

UniEAP以资产库为核心的逻辑架构主要划分为表现层(Presentation Layer),业务逻辑层(Business Logic Layer),数据层(Data Source Layer),基础框架(Infrastructure Layer)四个层次。

层次分明的MVC框架

Unieap基于MVC框架进行扩展,通过工具能够辅助生成大量繁琐的代码和配置文件,与模型驱动架构的思想结合起来,极大地提供开发人员的编码效率以及减少代码出错的几率。强大的数据绑定机制把表现层组件及业务层组件很好地衔接在一起,能够及时把表现层数据的状态变化反映给业务层,根据这些状态变化,业务层就能很轻松地把数据的变化同步到数据库中,以保证数据的一致性。

元模型驱动的设计器和运行期架构

基于模型驱动开发的业务基础平台,是以元数据模型来定义和约束组件。基于元数据模型驱动开发的思想,提供稳定且与技术平台无关的各类元数据模型。通过元数据模型沉淀业务需求,通过模型配置适应需求变化。

统一的开发平台

借助统一的平台和工具的形式,固化技术框架,规范,屏蔽技术细节并支持敏捷开发方法,为IT人员提供业务开发、运行、管理的统一手段,确保架构和规范的落地,实现业务与技术的统一。在统一的架构和规范下,逐步固化下来的IT系统作为可复用的业务模块,帮组企业资产积累资产,提高开发效率降低开发难度,提供系统的质量和稳定性。

基于软件产品线的应用开发框架

产品线架构是实现系统化复用的基础,UniEAP公共的软件产品线架构对所有在不同的产品中使用的组件定义了单一的环境,保证了不需要考虑相关类似功能组件的重复开发,只需要考虑它们的工作环境。以资产库位核心的架构平台和完备的资产开发和管理工具,支持以复用为目的的组件设计,开发和维护,通过大粒度地组件装配完成产品建造。并且,Unieap提供了丰富的基础组件与业务组件。

我对东软Unieap平台的一些思考

项目的目录

一个UniEAP工程主要由软件组件(Software Component)和开发组件组成

软件组件(SC)工程结构如下图所示

开发组件(DC)工程结构如下图所示

工程中的每个开发组件都可以引用其他的开发组件,也就是说每个开发组件都可以复用

开发组件的Metamodel文件夹中包含本开发组件下的各类模型定义文件

BO模型就是传统软件设计中的Service层

DAO模型就是传统软件设计中的Dao层

ENTITY和DTO模型就是数据实体,其中ENTITY直接是数据库表的对应实体(就是JavaBean),DTO数据传输层,当单一的实体满足不了业务要求的时候就需要该模型。

VIEW模型就是传统MVC中的视图层

其实就是传统的MVC模型,MVC模型应该可以说是现在的业内标准了。

接着下去我说一下平台基于的框架在平台中所扮演的角色。

Hibernate或者现在将要整合上去的Mybatis在平台中扮演着持久层的角色,他们都是ORM框架,即通过他们把数据库的表和实体类关联起来,方便我们访问数据库。

Spring在平台中主要用来对JavaBean的管理

Strust主要用来对页面跳转进行控制

这些框架基本上都是基于配置的。其实刚开始的时候我也很疑惑为什么框架一般都要写很多配置文件,配置文件始终没有代码来得有逻辑性。但是当我在开发一个功能Excel导入的时候,我才觉得配置文件的好处。需求是多变的,这是无法避免的事实,可能你今天有这样的需求,明天有那样的需求,甚至有时还不知道自己的需求到底是什么。所以在做Excel导入的时候,如果你把每列的对应关系都写在逻辑代码中的话,后期维护起来是非常麻烦的,只要你的需求一改的话,就要改原代码。如果这时候你把对应关系写在配置文件中的话,维护起来相对就比较方便了。首先所有相关字段配置都在一起,一目了然。其次如果项目已经在运行了的话,你改配置文件项目也不用再从新启动。

在平台的学习中有"软件组件"和"开发组件"这种概念,在我的理解中组件是具有一定的独立功能也就是说组件和组件之间的耦合性比较小,并且是一种粒度比较大的复用。在CRM的开发中,有"线索","商机","样机"等模块,这每一个模块都可以开发为一个组件,而且组件之间是有关联的比如"线索"模块就是为了过滤一部分潜在用户再转到"商机"模块成为正式用户。这种关系用小时候玩积木的比喻是很恰当的,比如你要搭建一个房子,你就要通过一些个各式各样的积木进行搭建。不同的积木块是相对比较独立的,他的内部是比较结实的,耦合性比较强,但是你搭的一个房子,积木块之间就需要项目接触,这种接触就是积木块之间的关联,但是这种关联是松耦合的,可拆卸的。每个积木可能同时和好几个其他积木进行接触。积木就是映射组件,房子就是映射一个项目。软件工程有一个很重要的设计概念,高内聚低耦合,组件就很好应用了这种概念。至于如果定义组件的粒度,到时什么样的规模算是组件,这个就不好定义了,这个要看具体的项目。以生物系统来做比喻吧,如果是一个细胞的话,细胞膜,细胞壁,细胞质就算一个组件了。但是对于组织来说的话,神经细胞,淋巴细胞,血细胞...才算一个组件。对于消化器官来说,上皮组织,结缔组织,肌肉组织...才能算一个组件。所以组件的粒度要看你针对的是什么规模的代码。

我觉平台中的很多设计是很有借鉴意义的。这里我列举我学习时候认为很不错的思想。对于像OA等业务开发的系统,基本上是以数据为中心的。需求的变更基本上是围绕着表结构和字段的变更。所以平台基本上是围绕着数据来进行设计的。对于每一个VIEW或者VIEWC,VIEWC是可以嵌入到VIEW中的组件,都会绑定一个数据集或多个数据集。数据集是由实体的属性组成,即直接对应数据库中的表的字段。平台在设计的时候就已经很好的把这些封装好了。所以你在开发时候,就可以很方便的使用,好像什么都不用做。但是这种封装是基于一定的规则的,你必须要遵守这些规则。就像那些框架的使用一样,也是要遵守相应框架的规则的。其中最重要的规则之一就是命名规则,框架之所以可以帮你做很多自动化的事情,很关键一个就是它是根据字段的名字,进行映射的。我觉得每一个框架的诞生都是由程序员长期写相同的代码,然后思考如果把这些相同的代码提取出来,然后放在配置中只要进行简单配置就好了,这样既减少了重复的代码同时也方便项目的可维护性和可扩展性。VIEW中的数据集,具体绑定在form表单或者grid表单,这是两种最常用的展示数据的控件。后台取到的form或者grid的数据就直接是JavaBean对象,这样减少了一些繁琐的操作。刚才也说过平台的很多东西都是基于配置的,这样也方面部署,平台的表现层框架采用的是strust。

这样我们写页面的跳转就可以是基于配置文件来写的。而Unieap平台又对这一框架进行了封装,对于页面的跳转,平台直接在前台写脚本语句有可以了。

对于中间件的理解,由于之前也没有什么概念,网上对于中间件的定义也千奇百怪,这里我引用维基百科上面的定义:

Middleware is computer software that provides services to software application beyond those available from operating system. It can be described as "software glue". Middleware makes it easier for software developers to implement communication and input/output, so they can focus on the specific purpose of their application.

中间件是一种在操作系统之上的为应用软件提供服务的软件。它可以被描述为"软件胶水"。中间件可以为软件开发者提供更加容易的软件间的通信和输入\输出,这样开发者就可以把精力集中在这些为了满足特定需求的软件开发上面。

Database access services are often characterised as middleware. Some of them are language specific implementations and support heterogeneous features and other related communication features. Examples of database-oriented middleware include ODBC,JDBC and transaction processing monitors.

数据访问服务通常被描述为中间件。他们其中的一些是用特定的语言实现的并且支持各式各样的功能,而其他的一些和通信的功能紧密相连。例如数据库中间件包括ODBC,JDBC和事物进程监控。

这里我就把JDBC理解成一种数据库访问的中间件。在东软的Unieap平台中ORM框架使用的Hibernate,我就说一下Hibernate和JDBC之间的关系。

Hibernate是jdbc的轻量级封装,包括jdbc的与数据库的连接(用hibernate.property的配置文件实现当然本质是封装了jdbc的forname),和查询,删除等代码,都用面向对象的思想用代码联系起来,hibernate通过hbm 配置文件把po类的字段和数据库的字段关联起来比如数据库的id,在po类中就是pravite Long id; public Long getId() public setId(Long id);然后hql语句也是面向对象的,它的查询语句不是查询数据库而是查询类的,这些实现的魔法就是xml文件,其实hibernate=封装的jdbc+xml文件

以此来说的话,我觉得框架是对中间件的一种封装,使中间件更容易的被使用。

东软Unieap平台的更多相关文章

  1. Liferay-Activiti 功能介绍 (新版Liferay7基本特性)

    一句话简介 Liferay是世界领先的开源企业门户(也可作为综合门户),是最强大(没有之一)的JAVA开源门户,在Gartner和Forrester和评价非常高,近几年已经超越了微软门户Sharepo ...

  2. 软件架构中的SOA架构有哪些特点?

    面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互. SOA是一 ...

  3. UniEAP UTF 用户手册 (引擎)

    目录 第1章 概述 5 1.1 术语解释 5 第2章 测试文件组织 6 2.1 测试执行文件详解 7 2.1.1 参数配置 7 2.1.2 测试报告配置 9 2.1.3 浏览器类型配置 9 2.1.4 ...

  4. UniEAP V4 WorkShop用户手册

    版权声明<UniEAP V4 WorkShop用户手册>的版权归东软集团(大连)有限公司所有.未经东软集团(大连)有限公司的书面准许,不得将本手册的任何部分以任何形式.采用任何手段(电子的 ...

  5. 2017-2018-2 20155228 《网络对抗技术》 实验一:PC平台逆向破解

    2017-2018-2 20155228 <网络对抗技术> 实验一:PC平台逆向破解 实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用 ...

  6. unity3D开发的程序发布到Android平台上进行运行测试的详细步骤

    第一步    下载安装JDK 和SDK 1.需要配置java环境.点击链接进入ava的配置的方法:http://www.cnblogs.com/Study088/p/7496158.html 2.下载 ...

  7. 调研ANDRIOD平台的开发环境的发展演变

    在同学的推荐下,我选用学习eclipse这个软件,参考了这个网址的教程开始了一步一步的搭建之路. http://jingyan.baidu.com/article/bea41d437a41b6b4c5 ...

  8. 微信公众平台-文章-app:让创意变为现实,这30个小程序“凭什么”脱颖而出?

    ylbtech-微信公众平台-文章-app:让创意变为现实,这30个小程序“凭什么”脱颖而出? 1.返回顶部 1. 让创意变为现实,这30个小程序“凭什么”脱颖而出? 微信公开课 昨天 创意1:为多种 ...

  9. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

随机推荐

  1. [转]Java中Date转换大全,返回yyyy-MM-dd的Date类型

    /** * 获取现在时间,这个好用 * * @return返回长时间格式 yyyy-MM-dd HH:mm:ss */ public static Date getSqlDate() { Date s ...

  2. AO-XXXX

    一 AO4419:应用于开关应用或PWM应用的场效应管.

  3. MSDN值得学习的地方

    作者:朱金灿 来源:http://blog.csdn.net/clever101 我一直认为:如果你没有乔布斯那样的天才,能够从头脑中原创出好产品,那么最好先学习分析好的产品,它到底好在哪里?哪些地方 ...

  4. 一个简单的139邮箱登录脚本--->java-selenium

    import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebE ...

  5. 30行代码消费腾讯人工智能开放平台提供的自然语言处理API

    腾讯人工智能AI开放平台上提供了很多免费的人工智能API,开发人员只需要一个QQ号就可以登录进去使用. 腾讯人工智能AI开放平台的地址:https://ai.qq.com/ 里面的好东西很多,以自然语 ...

  6. SQLite – HAVING 子句

    SQLite – HAVING子句 HAVING使您能够指定过滤条件哪一组结果出现在最终的结果. WHERE子句的地方条件选定的列, 在有HAVING 子句的地方 就有GROUP BY子句包含的条件组 ...

  7. 禁用DRM

    10G: alter system set "_gc_policy_time"=0 scope=spfile sid='*'; alter system set "_gc ...

  8. 【Hive】explain command throw ClassCastException in 2.3.4

    参考:https://issues.apache.org/jira/browse/HIVE-21489 (一)问题描述: Hive-2.3.4 执行  explain select * from sr ...

  9. linux下C的建立、编译和运行 gcc (附上Windows下visual c++的用法)

    2019/6/24 1. 环境:window10下安装了MobaXterm,这里申请了阿里云的服务账号,可以直接使用linux系统,避免安装虚拟机等. 2. 判断linux下是否有GCC编译工具(我们 ...

  10. 深度剖析 MySQL 事务隔离

    概述 今天主要分享下MySQL事务隔离级别的实现原理,因为只有InnoDB支持事务,所以这里的事务隔离级别是指InnoDB下的事务隔离级别. 隔离级别 读未提交:一个事务可以读取到另一个事务未提交的修 ...