随着项目的进展,Castle和IBatisNet给我的惊喜更多。Com+很重,不需要分布式的中小项目慎用,NHibernate虽好,NHibernate的2005-9-20发布了最新版本1.0-rc1,缺少高水平的OO设计师,项目组程序员水平参次不齐 ,应用Castle + IBatisnet大家不会再把精力浪费到数据访问,事务处理,主键生成等地方了,可以集中精力进行业务组件的编写。项目的进展很顺利。
    从架构上讲,Castle作为轻量级Ioc容器无疑要位于高位,所以iBatisNet现在只需要致力于完成持久层的sql-object映射工作,其他的事就由Castle来装配好了。 
      iBatisNet中的DaoManager作的两大工作:dao事务管理,dao接口与实现的解藕,Castle的事务处理使用了是Castle的扩展单元,可以配置到方法级,用法类似于Com+,需要对该类设置声明性事务属性以确定其事务性行为。指定哪些类的哪些方法需要事务处理,不管你是dao还是service,通通可以自由地在这儿指定,根本不会侵入你所写的类,如果是Com+的话,会强迫你去实现Com+的ServicedComponent。 
     IbatisNet的缓存非常不错,我们需要用好它了。在IbatisNet中,cacheModelsEnabled默认是true的,别忘了在写具体的po.xml时,作缓存有关的配置工作。不过具体用哪一种(MEMORY  LUR  FIFO  OSCACHE)容量设多大,都得根据项目的实际情况来定,我通常首选LUR。正确设定缓存的Flush语句,杜绝缓存中脏数据产生的可能。缓存使用前提是,系统中对表的读写一定要都通过ibatisNet来进行,也就是封闭的。    
    动态SQL的确是个强点。熟悉后感觉很不错。IBatisNet中所有的DAO方法都只传一个值对象,复杂查询当然也不例外。

再论IBatisNet + Castle进行项目的开发的更多相关文章

  1. 应用IBatisNet+Castle进行项目的开发

    最近在做一个项目,项目的需求不够明确,这是做项目的大忌,但是没有办法.项目的架构采用Dotnet平台使用C#进行开发,为了加快项目的开发进度,采用代码生成工具之MyGeneration 生成业务基本代 ...

  2. 项目架构开发:数据访问层之Cache

    数据访问层简单介绍 数据访问层,提供整个项目的数据访问与持久化功能.在分层系统中所有有关数据访问.检索.持久化的任务,最终都将在这一层完成. 来看一个比较经典的数据访问层结构图 大概可以看出如下信息 ...

  3. 项目架构开发:数据访问层之Logger

    接上文 项目架构开发:数据访问层之Cache 本章我们继续ILogger的开发 ILogger.cs public interface ILogger { void Info(object messa ...

  4. 项目架构开发:数据访问层之Repository

    接上文 项目架构开发:数据访问层之Logger 本章我们继续IRepository开发,这个仓储与领域模式里边的仓储有区别,更像一个工具类,也就是有些园友说的“伪仓储”, 这个仓储只实现单表的CURD ...

  5. 再一波Python实战项目列表

    前言: 近几年Python可谓是大热啊,很多人都纷纷投入Python的学习中,以前我们实验楼总结过多篇Python实战项目列表,不但有用还有趣,最主要的是咱们实验楼不但有详细的开发教程,更有在线开发环 ...

  6. Git项目协同开发学习笔记2:项目库开发协作相关命令

    之前介绍了如何用git构建项目库及其后续操作的问题,但主要还是个人的操作问题,不太涉及到项目协作方面的问题,所以来说下这块.传送门在这里(后面的可以不用看了). 1.同步 首先就式同步问题:在项目协作 ...

  7. vue项目的开发

    vue项目的开发 我们已经通过命令行创建了一个vue项目,并且打开了这个项目.下面是这个文件的src文件夹,这个文件夹放了整个项目的核心代码. 一.vue文件的用处简介. 1.assets文件夹,用来 ...

  8. 如何加快Vue项目的开发速度

    如何加快Vue项目的开发速度 本文摘自奇舞周刊,侵权删. 现如今的开发,比如内部使用的管理平台这种项目大都时间比较仓促.实际上来说,在使用了webpack + vue 这一套来开发的话已经大大了提高了 ...

  9. 开源项目SMSS开发指南(二)——基于libevent的线程池

    libevent是一套轻量级的网络库,基于事件驱动开发.能够实现多线程的多路复用和注册事件响应.本文将介绍libevent的基本功能以及如何利用libevent开发一个线程池. 一. 使用指南 监听服 ...

随机推荐

  1. openSession() 与 getCurrentSession() 有何不同和关联呢?

    在 SessionFactory 启动的时候, Hibernate 会根据配置创建相应的 CurrentSessionContext ,在getCurrentSession() 被调用的时候,实际被执 ...

  2. 使用ipmitool 命令添加IPMI 界面的SMTP邮件服务器地址

    目前要通过ipmitool工具在IPMI的界面上添加邮件服务器地址,该脚本如下 SMTP.sh #!/bin/bash ipmitool raw 0x32 0x78 0x01 0x01 0x00 0x ...

  3. bootstrap 网格系统学习

    Bootstrap 官方文档中有关网格系统的描述: Bootstrap 包含了一个响应式的.移动设备优先的.不固定的网格系统,可以随着设备或视口大小的增加而适当地扩展到 12 列.它包含了用于简单的布 ...

  4. mysql主从复制原理及实现

    一.主从复制原理 利用MySQL提供的Replication,其实就是Slave从Master获取Binary log文件,然后再本地镜像的执行日志中记录的操作.由于主从复制的过程是异步的,因此Sla ...

  5. Python基础--字典:当索引不好用时

    当列表或是元组的索引不能达到我们的目的时,我们想到了还有一种序列,即字典. 创建 字典 由多个键以及相应的值构成的键-值对组成. 键唯一.值能够不唯一 phonebook = {'xidada':'1 ...

  6. js 获取距离顶部的相对高度

    getTop (e) { var offset=e.offsetTop; if(e.offsetParent!=null) offset+=this.getTop(e.offsetParent); r ...

  7. HTTPSConnectionPool(host='xxxxx', port=443): Max retries exceeded with url:xxxxxxxx (Caused by NewConnectionError('<urllib3.connect,Max retries exceeded with ,(Caused by NewConnectionError

    HTTPSConnectionPool(host='f6ws-sha8re-o88k.s3.ama66zaws.com', port=443): Max retries exceeded with u ...

  8. 【Android界面实现】Drawable Animation 使用介绍

        转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992     (眼下仅仅能用在View对象上的动画效果的实现有两种,一种就是上一篇的View Animat ...

  9. 655. Big Integer Addition【easy】

    Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2 ...

  10. 使用 xlue 实现简单 listbox 控件

    基于 XLUE 实现的 listbox 控件 1. 提供增删查接口,将 obj 作为子控件添加到列表: 2. 提供 Attach/Detach 方法,可以将子控件的事件转发出来: 3. 支持滚动条: ...