年前总结一下这两个星期在SAP实习学到的一些东西
先上图:
我就直接将其理解为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。
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,首先是因为我们需要生成DTO的方法与方法所在的类。并且,façade相当于为controller提供了一组更加简洁的操作,因为service层中操作粒度过细,并且还不提供权限控制等操作,因此façade相当于一个虚拟的中间件,从下层(service)中调用各种偏向底层的方法,自己对方法进行排列组合、加上自己的处理以后,对不同使用者暴露不同的方法与数据的调用。
11、在以上所有的架构中,只有service、item、client是必须出现的,其他所有功能都是可选项
下面以一个例子来进行说明:
PS.一下所有图中都没有体现自动生成的model(每次还要多画两个对象,好烦。。。),但是有的对象中会有xxxxmodel
又PS. 因为Hybris整体采用Spring架构,所以除了编程以外还会有很多的.xml文件相关的操作,这里省略,之注重对象之间的关系
1、比如说你作为一个在SAP的实习生,现在需要使用hybris开发一个功能:在前端查询商品信息。
其中由ProductModel体现,储存商品基本信息(注意这是个model);而ProductModel中又包含PriceModel(这也是个model),储存币种与币值。
这样service就能专注于对于model的操作(当然在这个例子里体现不太出来),而将繁琐的数据读写等操作交给了DAO来完成。
其中façade代替了service来与controller进行通信,并且调用service来获取所需要的model并转化为controller所需要的DTO(图中的ProductData与PriceData)
4、最后,我们创建converter来专门处理façade中的model转化为controller的任务,这样façade就能够专注于处理其他更重要的操作。(因为地方实在没有了,我略去了一直没变的几部分)