hybris mysql_Hybris架构总结。。。。个人笔记
Hybris架构总结。。。。个人笔记
发布时间:2018-07-23 16:30,
浏览次数:214
, 标签:
Hybris
先上图:
1、Persistence layer
就是作为hybris所连接的数据库这一层,其中hybris支持连接mysql、oracle、sqlserver和SAP自己的HANA。但是因为hybris本身设计的原因(下一条详述),我们并不需要对数据库进行直接的操作。
2、Item
准确的说并不是作为一个层,而是一种数据类型,在每个extension项目中的xxxx-item.xml中定义(之后的博文会详述,简单的说extension就是针对hybris中各层我们自己定义的,需要满足个性化需求的拓展,导入eclipse后会以一个个java
project形式存在)。
可以说item是开发者能够接触到的最接近底层的东西。在item里我们使用统一的xml语言来对每种数据以及数据之间的关系进行定义,比如我们需要一个ContactRequest对象,其中有message属性,那么我们定义如下
type="java.lang.String">
我就直接将其理解为hybris自己能够理解的数据库定义方法,在你将其定义好以后,在系统build的过程中(hybris使用的是ant),hybris会根据不同的数据库方言,使用ORM等(这个之后我还要详细查查)自动在数据库中进行建表。
3、Service
service指的是很细粒度的、商务上所需要的各种方法,,比如计算总价、对数据库进行的CRUD等。在hybris已有的系统中我们会找到非常多类型的hybris接口定义。service层将数据整理好以后,会以model的形式暴露给façade层来使用,不同的service之间也通过model来传递数据。
4、Model
Model是java类,与我们在item中定义的各种数据一一对应,但是我们并不需要对其进行逐个编写,它会在hybris
进行build期间自动的生成于platform里的gensrc文件夹中。之所以将不同的extension定义的item生成的model集中在同一个文件夹下,是因为不同model之间可能会存在互相包含关系,这样model生成过程中如果生成一个model时里面包含的其他extension的model
class,在extension各自生成自己的model并放在自己文件夹的情况下,就会发现有未定义的class,进而导致build failure。
之前定义的item所对应的model大致如下(还有很多其他内容,这里只写重点)
public class ContactRequestModel extends ItemModel
{ public final static String _TYPECODE = "ContactRequest"; private String
_message; public String getMessage() { //message的get方法 } public void
setMessage(final String value) { //message的set方法 } }
5、DAO
DAO,全称Data Access
Obiect是我们自己需要编写的一系列Java类,在hybris已有的系统中只有接口定义。其作用就是在service需要对数据库进行类似于CRUD的操作时,就会调用DAO来进行,DAO会返回model来供service的使用。
6、Façade
这一层中façade也是以各种java类存在,在hybris中也有巨量的接口可以去调用。在这一层中会定义一系列比较偏向“业务”方面的方法,更加粗粒度,比如向购物城中添加商品、搜索商品等,facade接收service传过来的model,进行处理以后回以
DTO(datatransfer object)的形式上传到client层。
7、DTO
这是用于数据传输的POJO(plain old java
object,不是JavaBean,EntityBean 或者SessionBean。 POJO不担当任何特殊的角色,也不实现任何特殊的Java框架的接口),完全由你自己定义。
DTO只用于传输数据,里面除了保存数据的各种数据类型以外就只有相对应的get与set方法。使用DTO你可以将多个不同extension中所生成的多个不同的model中的数据整合到一起,这样会避免只是用model所带来的各种潜在问题。
8、为何使用façade与DTO(摘自hybris使用手册)
之所以需要DTO,是因为在某些情况下,仅仅使用service来处理model并传给上层client的话,service类会变得很笨重:(1)我们需要更加简洁的数据格式来传递数据给client层的JSP来进行展示;(2)当我们需要将一堆对象序列化来传输给其他系统的时候;(3)当我们需要对不同用户权限进行相应限制的时候。因此我们需要一个比model更加简化的数据表示方式,而这就是DTO。
还有一个原因就是,不同的进程间进行通信时,通常会是调用远程接口情况,比如说web
service,因此每一次请求都会耗时包括:请求传输时间、远端处理时间、返回结果传输时间。这其中将请求传送出去以及结果传输回来的时间会占很大比重(IO传输时间远大于系统内部处理时间)。因此如果将多次请求内容放在一个DTO中,则可以大大减少传输信息的时间,提高系统吞吐率。
需要façade,首先是因为我们需要生成DTO的方法与方法所在的类。并且,façade相当于为controller提供了一组更加简洁的操作,因为service层中操作粒度过细,并且还不提供权限控制等操作,因此façade相当于一个虚拟的中间件,从下层(service)中调用各种偏向底层的方法,自己对方法进行排列组合、加上自己的处理以后,对不同使用者暴露不同的方法与数据的调用。
9、Converter
这是façade所调用的一种java类,作用就是将model转化为DTO。
10、Client层
前端所包括的一系列东西,包括但不限于MVC中的controller、web service或是个脚本。
11、在以上所有的架构中,只有service、item、client是必须出现的,其他所有功能都是可选项
下面以一个例子来进行说明:
PS.一下所有图中都没有体现自动生成的model(每次还要多画两个对象,好烦。。。),但是有的对象中会有xxxxmodel
又PS. 因为Hybris整体采用Spring架构,所以除了编程以外还会有很多的.xml文件相关的操作,这里省略,之注重对象之间的关系
1、比如说你作为一个在SAP的实习生,现在需要使用hybris开发一个功能:在前端查询商品信息。
其中由ProductModel体现,储存商品基本信息(注意这是个model);而ProductModel中又包含PriceModel(这也是个model),储存币种与币值。
那么你三两下就搞出了一个只有最基本功能的结构:
其中ProductController就是你在前端页面中作用到的controller(hybris会使用Spring
MVC架构)。Controller会调用两个service来分别获取商品信息与价格信息,之后会调用handleRequest操作来呈现信息。
2、 当然我们为了将service与数据库进行解耦,会引入DAO,它会专门负责数据相关的CRUD之类的操作,改了之后变成了这样:
这样service就能专注于对于model的操作(当然在这个例子里体现不太出来),而将繁琐的数据读写等操作交给了DAO来完成。
3、之后我们想到,controller直接调用service也不好,考虑到上面第8点所提到的各种情况,使用façade能够体现出更加良好的代码结构与可扩展性,于是我们继续改,成果是这样:
其中façade代替了service来与controller进行通信,并且调用service来获取所需要的model并转化为controller所需要的DTO(图中的ProductData与PriceData)
4、最后,我们创建converter来专门处理façade中的model转化为controller的任务,这样façade就能够专注于处理其他更重要的操作。(因为地方实在没有了,我略去了一直没变的几部分)
hybris mysql_Hybris架构总结。。。。个人笔记相关推荐
- 《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构
来源:http://www.cnblogs.com/edisonchou/p/3809839.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...
- 《大型网站技术架构》读书笔记三:大型网站核心架构要素
来源:http://www.cnblogs.com/edisonchou/p/3806348.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...
- 《大型网站技术架构》读书笔记一:大型网站架构演化
来源:http://www.cnblogs.com/edisonchou/p/3773891.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...
- 《大型网站技术架构》读书笔记之七:随需应变之网站的可扩展架构
来源:http://www.cnblogs.com/edisonchou/p/3862389.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...
- Flux架构小白入门笔记
Flux架构小白入门笔记 Flux是facebook提出的一种处理前端数据的架构,学习Flux就是学习它的思想. 这个笔记是我在学习了阮一峰老师的Flux 架构入门教程之后得出, 里面的例子和部分原文 ...
- 系统架构师学习笔记_第六章(下)_连载
系统架构师学习笔记_第六章(下)_连载 6.3 基于 UML 的软件开发过程 6.3.1 开发过程概述 UML 是独立于软件开发过程的,能够在几乎任何一种软件开发过程中使用.迭代的渐进式软件开发过程 ...
- 阿里P8架构师进阶心得:分布式数据库架构MyCat学习笔记送给你
前言: MyCat 是一个数据库分库分表中间件,使用 MyCat 可以非常方便地实现数据库的分库分表查询,并且减少项目中的业务代码.今天我们将通过数据库架构发展的演变来介绍 MyCat 的诞生背景,以 ...
- 【Azure 架构师学习笔记】-Azure Data Factory (4)-触发器详解-事件触发器
本文属于[Azure 架构师学习笔记]系列. 本文属于[Azure Data Factory]系列. 接上文[Azure 架构师学习笔记]-Azure Data Factory (3)-触发器详解-翻 ...
- 好家伙,阿里P8撰写的Java微服务架构全栈笔记GitHub一夜飞到榜首
Java微服务作为当下最常用的架构技术,快速实现编程开发而且维护起来十分的方便,可以简单是实现高可用,分布式开发而且也很安全! 今天给大家分享的这份<Java微服务架构全栈笔记>,用140 ...
最新文章
- SAP有用的知识(持续更新)
- 业绩-----我觉得最难得不是写代码,而是写业绩表
- 初学数位DP--hdu 2089
- Ab工具压力测试.及相应查看web服务排查问题
- Myeclipse创建Maven项目提示:Creating maven-archetype-webapp has encountered a problem. 解决方法
- [旧稿]How To Add Simple Install WebPart Menu to the Right Click On a CAB File
- android获取程序名称,Android获取应用程序名称(ApplicationName)示例
- 订阅号如何配置服务器信息,订阅号服务号区别和订阅号启动服务器配置
- 处理数据集python脚本(处理自己制作的数据集)
- Nginx源码编译及安装
- git项目合并(本地上传到已有的仓库)
- 推荐一个免费申请ssl数字证书的地方
- Linux操作系统实践
- 如何对Hive Metastore进行权限控制
- 在豌豆荚安卓市场下载了伪造的ES文件管理器,该流氓apk会自动的下载手机游戏
- 抖音招商团长怎么做?怎么入驻?
- 二次封装a-upload组件,自定义上传预览
- 【云周刊】第171期:重磅推荐,神龙架构首次开箱直播评测
- tar.gz和tgz的区别
- word将参考文献序号改为上标
热门文章
- 《吊打分析师》实战—经典重现,你会怎么选择?
- Linux服务器挖矿木马清除
- 阿尔·里斯-市场营销的22条法则(22条商规)-9
- 阿尔·里斯-市场营销的22条法则(22条商规)-7
- CountDownLatch使用
- Python-Django毕业设计基于的高速收费系统(程序+Lw)
- push代码至gitee码云报错unable to access 'https://gitee.com/*/git/': The requested URL returned error: 403
- Rook Ceph Snapshot的清理
- JavaScript之form表单提交前验证的onSubmit事件
- 作文以记之 ~ 克隆图