摘要:
上次的 NHibernate的Session管理策略和NHibernateHelper 发布并提供下载,给NHibernate刚入门的同学们带来很多便利。 最近有同学在求NH的通用仓储,正好我最近也设计了一个应用于实战,好吧,无私地分享并快乐着吧。 与上次一样,您无需关心细节,因为我会在最后提供源代 阅读全文
摘要:
表模块(Table Module) 表模块模式不仅可以用VS的DataSet实现,也是O/RM初学者所常用的。 先来宏观地看一下操作流程: 通过创建一个DataSet数据集,添加一个表,轻松构建一个强类型的DataSet 可以为它添加一个查询 非常轻松,VS将自动生成查询SQL,但是SQL语句无法太 阅读全文
摘要:
本文讨论面向对象程序语言中,事务管理的思想。 注意:本文代码中涉及到事务管理的上下文,是我探索ORM原理时自制的上下文,读者只要看着去理解他的意思就好了,实战当中我用的是另外开源框架中的上下文。 事务管理应该放在哪一层做 事务的开始与提交应该放在哪里呢?业务逻辑层还是数据访问层? 我以为,数据访问层 阅读全文
摘要:
在之前的随笔《业务逻辑层的设计(一)》已经提到了领域对象模型如何支持验证了。 本篇随笔将对领域模型继续强化。 DomainObject为所有领域模型的基类,只要让我们的领域模型继承这个基类,也就实现了通用的验证接口ISupportsValidation。 ConstraintValidator中封装 阅读全文
摘要:
如何让一些业务逻辑重用 有很长一段时间,我的业务逻辑代码遍布在整个项目代码的任何角落,也同时在操作ADO.NET调用代码的中见缝插针,但我相信这是从一个程序员走向设计师必定要踩过的坑。 有个简单的需求是这样的。你需要新增一张订单,订单中包含几个项,所以你在新增订单的同时连同它包含的所有项都保存进数据 阅读全文
摘要:
声明 本篇中提到的Session,并非是Asp.NET中的Session,而是NHibernate中ISession。 本篇假设读者已经对NHibernate的有一定的了解,已经成功持久化过领域模型。 你不需要亲自用复制本篇的代码去调试,因为本篇的代码并不全,最后也有提供下载。 本篇中的单元测试用到 阅读全文
摘要:
前言:本篇涉及的代码由C#语言描述,但并不妨碍其他语言的面向对象设计师阅读,旨在理解O/RM延迟加载的原理,减少开发者出现由O/RM引起的性能问题时大叫“怎么会这样?”的几率。本篇并不会详细介绍代理模式,也不详细介绍延迟加载,因为这并不是本篇的重点。本篇随笔的重点是帮助理解延迟加载的原理,透过这个原理,我们将会知道为什么Nhibernate(O/RM)的领域模型的成员都需要加上virtual关键字,也能更好地理解Nhibernate的延迟加载(当然我相信很少会不借助框架而纯手工去实现延迟加载)。我们先来看一个非常简单的例子:这个Class1我就暂且当它是一个领域模型,属性Name是我们需要观察 阅读全文
摘要:
单元测试 (白盒测试)1模块接口: 内部检查:传输参数的数目、属性、单位、次序是否匹配;全程变量的定义是否一致;只做输入的变元有无被修改,等等 内部检查:打开、结束、关闭文件的操作;文件和属性;I\O错误处理;输出拼写,等等2局部数据结构: 数据说明;初始化与缺省值的设置;变量名拼写;数据类型的相容性;上\下溢出及地址异常,等等。3重要的执行通路:由于穷尽测试的不可能,故通常针对最常见的错误设计测试方案。较常见的错误有: 计算次序问题; 不同类型混合运算; 初值设置错误; 精度问题; 表达式错误 循环终止条件错误;4出错处理通路:预见出现错误的条件,设置处理。较常见的问题有: 输出的错误信息难 阅读全文
摘要:
避免数据库表或字段具有多种意思。先来看一个糟糕的设计,以下将分析由数据库字段两意性引发的惨案。图1图中两张表,表示入库申请和实际入库出库,由于入库和出库行为非常相似,所以只用了一张表并用单据类别区分入库和出库。表面没什么问题,只要在程序中判断单据类别就能使用。但实际开发过程当中问题远不止这些。1.看申请单据ID由于入库时需要申请,所以这里有个申请单据ID。但出库不需要申请,入库时有特殊情况不需要申请直接入库的,所以这两种情况是没有申请单据ID的。怎么处理?有申请单据ID就插入ID这个没有问题,不需要申请时呢?将这列设置成允许为空,并设默认值为0。这时看似问题解决了,其实还差一点。如果程序中出现 阅读全文
摘要:
---------------------------------------------------------------------------------------事务执行方式:事务串行执行交叉并发方式同时并发方式并发控制机制的任务:对并发操作进行正确调度;保证事务的隔离性;保证数据库的一致性;并发操作带来的数据不一致性:丢失修改,不可重复读,读“脏”数据。并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性。------------------------------------------------------------- 阅读全文