DDD中的值对象如何用NHibernate进行映射

<component/>是NHibernate中一个有趣的特性,即是用来映射DDD(Data-Display-Debuger)概念形式的值类型。这是一种创建比物理数据模型具有更高粒度的对象模型的方式。 

举例,

 

看下表中的数据: 

 

对应的对象模型: 

 

它们十分不同,在一个单一表中包括了所有物理数据,我们想在对象模型中调整为用两个分离的类型来映射该表。这就是<component/>的用法: 

<class name="Person" table="People"> 
  <id name="Id"> 
    <generator class="identity"/> 
  </id> 
  <property name="Name" /> 
  <component name="Address"> 
    <property name="Line1"/> 
    <property name="Line2"/> 
    <property name="City"/> 
    <property name="Country"/> 
    <property name="ZipCode"/> 
  </component> 
</class> 

这个映射将会在物理数据模型和对象模型中转换。我们还可以让NHibernate对<component>进行排序并给我们所预期的对象图。

时间: 2025-01-01 16:21:20

DDD中的值对象如何用NHibernate进行映射的相关文章

数据、事实、实体、值对象、事务、不变性

数据有两个重要属性:首先数据是基于时间的,数据是表达一段时间内一个逻辑为真的事实.另外一个属性是数据本质上是不可变的,因为和时间有关,我们是不能回到过去改变数据的真实性.这两个属性就意味着:对数据你其实只有两个主要的操作:读取现有数据,并(随着时间)添加更多新的数据,CRUD(增删改查)称为CR(增读).这样,CRUD其实没有U修改,因为修改对不可变数据是不其作用的(非常类似DDD中值对象不可变,不能修改,只能更换).CRUD中也没有删除Delete,其实大部分删除其实是一种创建新数据,如果Bo

java对象中属性值为空字符串的问题

问题描述 java对象中属性值为空字符串的问题 业务逻辑中需要将对象中为空字符串的属性转换为null,首先我想到是将对象转为一个数组, 然后遍历数组,将""转为 null ,不过这样应该不对,大家给个思路 解决方案 用 反射 获得所有字段的数组,然后遍历判断~~~~~~ 解决方案二: 你为什么还要遍历呢,你前台传过来的数据先处理再装对象,这样才对 解决方案三: 传到后台后,先判断 if("".eques(name)){ name=null; } object.set

DDD领域驱动设计:聚合、实体、值对象

关于具体需求,请看前面的博文:DDD领域驱动设计实践篇之如何提取模型,下面是具体的实体.聚合.值对象的代码,不想多说什么是实体.聚合等概念,相信理论的东西大家已经知晓了.本人对DDD表示好奇,没有在真正项目实践过,甚至也没有看过真正的DDD实践的项目源码,处于极度纠结状态,甚至无法自拔,所以告诫DDD爱好者们,如果要在项目里面实践DDD,除非你对实体建模和领域职责非常了解(很多时候会纠结一些逻辑放哪里好,属于设计问题)以及你的团队水平都比较高认同DDD,否则请慎重...勿喷! 代码在后,请先看D

NHibernate中对同一个对象的Lazyload要设置一致

在NHibernate中出于性能的考虑,经常使用Lazyload的方式来加载关联的对象,关于什么是Lazyload,以及怎么使用,可以参见博客园中的文章,比如:http://www.cnblogs.com/lyj/archive/2008/10/28/1321494.html 常用NHibernate.ByteCode.Castle动态代理来实现Lazyload,使用该程序集会在运行时创建实体对应的代理类,如果实体使用了继承关系,并通过NHibernate来映射,那么动态代理类在类型转换时会有问

javascript-如何用JQuery修改表格中的值?

问题描述 如何用JQuery修改表格中的值? 我现在抓到了td1,我想把里面的内容修改成 "Guanyu": 下面是我写的代码,但是不好使 <html> <head> <script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script> </head> <body> <table id=&quo

javascript-在js中 如何用Jquery 获取一个文本框中的值 文本框中ID=A

问题描述 在js中 如何用Jquery 获取一个文本框中的值 文本框中ID=A 在js中 如何用Jquery 获取一个文本框中的值 文本框的ID=a 解决方案 $("#a").val()就是获取ID=A 的input的value值 解决方案二: $("#A").val() 解决方案三: js与jQuery获取文本框的值js获取文本框值JS获取文本框的值----------------------

c语言 数组-请教如何用c语言去除一个数组中所有值为零的元素,而且这些零元素中有连续排列的?

问题描述 请教如何用c语言去除一个数组中所有值为零的元素,而且这些零元素中有连续排列的? 能否给一个示例程序?感激不尽! 比如以下这个数组中有连续的0元素,如何去除所有的零元素? double a[64]={4.63866e+020,1.456e+027,-7.67487e+017,9.86481e+016,0,0,-3.1101e+014,-9.38282e+010, 1.456e+027,4.60249e+033,-2.3969e+024,3.36857e+023,0,0,-9.64264e

40-.net如何从数据库中的一个表中取值

问题描述 .net如何从数据库中的一个表中取值 假设这是我数据库里的一张表(数据库是oracle),我该如何取得这些数将他们传给jsonObj.Rows,求教各位大神,能给个具体的实现过程吗? 解决方案 sonObj.Rows是你自己组装的json对象吧,你首先要查询数据库,这个自己看msdn把,很简单,获取值后开始组织json就行了 解决方案二: 自己读取数据后,通过服务器端代码赋值给aspx上的script标签就行,注意<%%>这种代码不能放js文件里面,必须是在aspx页面里面才能解析运

数据库 删除-为什么我删除了listview中的值,数据库中没删除呢

问题描述 为什么我删除了listview中的值,数据库中没删除呢 string connstr = ""Provider=Microsoft.Jet.OleDb.4.0;""; connstr += @""Data Source=D:Merger20150208_caohuanGEARCNC.mdb""; OleDbConnection tempconn = new OleDbConnection(connstr);//连接数