ORM的那些事
2022-02-14 17:29 虎背熊腰 阅读(75) 评论(0) 收藏 举报编程模式的诞生都是为了高内聚低耦合,所以只要能自圆其说都能提炼成一种编程思想
1: mvc的诞生
模型-视图-控制器(MVC)是Xerox PARC在八十年代为编程语言Smalltalk一种设计模式
2: 失血模型和充血模型提出者
Martin Fowler在 2003 年《企业应用架构模式》提出了失血模型和充血模型
https://martinfowler.com/bliki/AnemicDomainModel.html?spm=a2c6h.12873639.0.0.ec8d36f3lWpPLl
3: 领域驱动提出
领域驱动设计(Domain-Driven Design)是程序员 Eric Evans 于 2004 在他的《 领域驱动设计:解决软件核心中的复杂性》一书中提出的一个概念。
4: orm 的实现方式
Martin Fowler 它在Martin Fowler的2003年著《企业应用架构的模式》 Active Record vs Data Mapper
什么是Active Record? Active Record 可以说是现在最受欢迎的一种ORM结构。如果你常常使用Ruby之类的语言,可能你已经对Active Record有一定l。下面是一个简单的Active Record例子。 $user = new user; $user->username = 'ou'; $user->save(); 什么是Data Mapper? 和Active Record不同,Data Mapper完全的把你的域(doamin)从持久层(persistence layer)中分离出来了。所以你的对象(object)完全不需要和数据库有任何联系。 下面是一个Data Mapper的例子。看起来和Active Record差不多。但是下面代码只是单纯的PHP对象,所以它完全不知道关于数据库的任何消息。因此,我们也不能使用save()方程 $user = new user; $user->username = 'ou'; 所以我们需要用到Entity Manager. $user = new user; $user->username = 'ou'; EntityManager::persist($user);
5: 失血模型
UserModel{
int id;
string name
}
常用开发架构模式:
6: 充血模型
UserModel{
int id;
int name;
punlic function add(name){
if empty name
throw Exception
}
}
常用开发架构模式:
7: Repository
Repository这个概念出自”DDD”(Domain-Driven-Design),Repository Pattern提议所有操作最好是基于领域(Domain)进行。同时,他的行为像Java里面的Collection。当然,这是一种抽象的概念。如Collection中存在add、update、remove,contains等函数。同样的,你应该把这些定义到Repository中
8: pojo【pojo和javabean存在略微差别,pojo 是马丁提出的,主要解决ejb模式的繁重,do,dto 这些概念已经无法找出来源,大概率还是马丁提出的
使用方式:先写一个核心POJO,然后实现业务逻辑接口和持久化接口,就成了Domain Model; UI需要使用时,就实现数据绑定接口,变成VO(View Object)
】
- DO( Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。
- DTO( Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。
- VO( View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。
以上三种比较常用
- BO( Business Object):业务对象。 由Service层输出的封装业务逻辑的对象。
- POJO( Plain Ordinary Java Object):在本手册中, POJO专指只有setter/getter/toString的简单类,包括DO/DTO/BO/VO等。
- 所以以上model属于失血模型
- pojo是在在2000年马丁提出的概念,也常用于领域驱动中
9: pojo 和RO经常用于领域模型设计中
10: 领域层常用项目结构
│ │ ├── domain
│ │ │ ├── model
│ │ │ │ ├── aggregates
│ │ │ │ │ └── UserRichInfo.java
│ │ │ │ └── vo
│ │ │ │ ├── UserInfo.java
│ │ │ │ └── UserSchool.java
│ │ │ ├── repository
│ │ │ │ └── IuserRepository.java
│ │ │ └── service
│ │ │ └── UserServiceImpl.java
浙公网安备 33010602011771号