贫血模型;DTO:数据传输对象(Data Transfer Object);AutoMapper ;Domain Model(领域模型);DDD(领域驱动设计)
2014-06-25 17:28
781 查看
======================我自己的理解==========================一:DTO我自己的理解,就是比如你有一个类,跟数据库的table表结构一模一样,主键外键什么的都有,但是这个model类,你返回数据到UI层的时候,有些数据是不用的,你就得自己new一个新类出来,新的类从旧的类里面拿值,然后给别人用的就是新的类别,有点类似于我们做接口给android手机用一样的,数据库的类和接口用的类,很相似,但是东西少了的很多,这个新的类(缺胳膊断腿的),只用来传递数据的,就是DTO数据传输对象二:AutoMapper:这个就是一个工具,可以用来帮你把旧的类和新的类,进行一个数据隐射.旧的类别和新的类别,可能是不一样的,例如旧的类别
一本书,有多个作者,每个作者,有自己的名字和地址,如果我想返回给android的接口一个json列表,每行数据就是这本书,以及这本书有哪些作者和作者的地址
那么返回的类可能就是这个类的一个list,这个我们就可以用AutoMapper来帮我们进行关系映射了
三:DomainModel(领域模型):这玩意又是个啥呢?四:DDD又是个啥??=======================推荐答案========================
恋爱虽易,相处不易:当EntityFramework爱上AutoMapper
结婚虽易,终老不易:EntityFramework和AutoMapper的婚后生活
AutoMapper参考文档:
【AutoMapper官方文档】DTO与DominModel相互转换(上)
【AutoMapper官方文档】DTO与DominModel相互转换(中)
【AutoMapper官方文档】DTO与DominModel相互转换(下)
一本书,有多个作者,每个作者,有自己的名字和地址,如果我想返回给android的接口一个json列表,每行数据就是这本书,以及这本书有哪些作者和作者的地址
那么返回的类可能就是这个类的一个list,这个我们就可以用AutoMapper来帮我们进行关系映射了
三:DomainModel(领域模型):这玩意又是个啥呢?四:DDD又是个啥??=======================推荐答案========================
一些orm框架,在用到Entity的时候有一些开源代码用到了AutoMapper(如:nopcommence),将数据对象转成DTO。比如在ORM中,与数据库交互用的Model模型是具有很多属性变量方法神马的。而当我们与其它系统(或系统中的其它结构)进行数据交互时,出于耦合性考虑或者安全性考虑或者性能考虑(总之就是各种考虑),我们不希望直接将这个Model模型传递给它们,这时我们会创建一个贫血模型来保存数据并传递。神马是贫血模型?贫血模型(DTO,DataTransferObject)就是说只包含属性神马的,只能保存必须的数据,没有有其它任何的多余的方法数据什么的,专门用于数据传递用的类型对象。在这个创建的过程中,如果我们手动来进行,就会看到这样的代码:
Bb=newB();
b.XXX1=a.XXX1;
b.XXX2=a.XXX2;
.........
returnb;
此时,AutoMapper可以发挥的作用就是根据A的模型和B的模型中的定义,自动将A模型映射为一个全新的B模型。基于访问性的控制或从模型本身上考虑。对外开放的原则是,尽量降低系统耦合度,否则内部一旦变更外部所有的接口都要跟随发生变更;另外,系统内部的一些数据或方法并不希望外部能看到或调用。类似的考虑很多,只是举个例子。系统设计的原则是高内聚低耦合,尽量依赖抽象而不依赖于具体。这里感觉automapper就是使数据库实体对一个外部调用实体的转换更简便(不用一个属性一个属性的赋值)。
例如1:数据库里面有用户信息表,供别的系统调用,提供了数据接口。如果直接暴露了数据库层的表结构的话,会对系统本身产生依赖。具体表现在,假定现在因为某种需要,为用户信息增加了十个字段的信息,那么,如果不进行类型映射的话,会导致所有基于此用户数据结构的模块集体挂掉(接口约定变更)。而如果使用了映射的话,我们可以在内部进行转换,保持原有接口不变并提供新的更全面的接口,这是保证系统的可维护性和可迁移性。
例如2:一个Web应用通过前端收集用户的输入成为Dto,然后将Dto转换成领域模型并持久化到数据库中。相反,当用户请求数据时,我们又需要做相反的工作:将从数据库中查询出来的领域模型以相反的方式转换成Dto再呈现给用户。使用AutoMapper(一个强大的Object-ObjectMapping工具),来实现这个转换。
可以参考下http://www.cnblogs.com/jobs2/p/3503990.html
AutoMapper参考文档:
相关文章推荐
- CoreData 数据传输对象DTO(data transfer object)
- CoreData 数据传输对象DTO(data transfer object)
- DDD(领域驱动设计)应对具体业务场景,如何聚焦 Domain Model(领域模型)?
- DDD 领域驱动设计-如何完善 Domain Model(领域模型)?
- DDD(领域驱动设计)应对具体业务场景,Domain Model(领域模型)到底如何设计?
- CoreData 数据传输对象DTO(data transfer object)
- 一缕阳光:DDD(领域驱动设计)应对具体业务场景,如何聚焦 Domain Model(领域模型)?
- Data Transfer Object(数据传输对象)
- Data Transfer Object(数据传输对象)
- 第5章分布式系统模式 Data Transfer Object(数据传输对象)
- Data Transfer Object(数据传输对象) [转载]
- 第5章分布式系统模式 Data Transfer Object(数据传输对象)
- 对象贫血一定是错的么?还是DDD领域驱动设计有误区? 推荐
- 【领域驱动设计】.NET实践:实体、值对象和数据传输对象
- Data Transfer Object(数据传输对象)
- 领域模型驱动设计(DDD)之模型提炼
- 实战DDD(Domain-Driven Design领域驱动设计:Evans DDD)
- Sharepoint2010应用开发四:使用客户对象模型(Client Object Model)向SharePoint列表写数据
- 领域模型驱动设计(Domain Driven Design)入门概述
- (转帖)实战DDD(Domain-Driven Design领域驱动设计:Evans DDD)