ORM的那些事
2022-02-14 17:29 虎背熊腰 阅读(71) 评论(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号