摘要:摘要:在快速入门指南篇中,我们对于Castle IOC容器的使用已经有了一个直观的认识。本文将在这基础上进一步对Castle IOC容器的结构及其注册组件的过程做一个深入的分析,让我们开始Castle IOC的内幕故事吧。 主要内容 1.WindsorContainer分析 2.MicroKernel分析 3.注册组件流程 一.WindsorContainer分析 WindsorCont...
阅读全文
摘要:一.创建Web工程 创建一个Web站点或者Web应用程序,添加对Castle.ActiveRecord.dll的引用。 二.创建需要持久化的业务实体 在.NET2.0下,由于引入了泛型,创建业务实体比1.1下简单了许多,业务实体只需要继承于泛型的ActiveRecordBase类,其中默认已经实现了一些静态的方法,不需要我们再在业务实体中实现。 [ActiveRecord("Employees"...
阅读全文
摘要:摘要:IOC模式是近年来非常流行的一种模式,相信大家都不陌生了,如果你还不是很熟悉的话,可以看看Martin Fowler大师的文章http://martinfowler.com/articles/injection.html,网上可以下载到中文版本。在Castle中,Windsor就是它的一个IOC容器,它构建于MicroKernel之上,功能非常强大。本文将通过一个简单的例子来带你快速走进C...
阅读全文
摘要:摘要:写这篇文章缘于昨天跟Linkin的一段聊天。我在使用ActiveRecord的一些技巧一文中的由实体类生成数据库表提到了这样一句话:生成数据库表时只有当该表不存在时ActiveRecord才会生成,否则表如果存在ActiveRecord不会做任何事情,也不会报任何错误。Linkin说他在实验时如果数据库表存在,ActiveRecord会删除表中的记录,其实这句话是在有些情况下是不对的,本篇...
阅读全文
摘要:摘要:本文将会介绍使用ActiveRecord中的一些技巧。 主要内容 1.由实体类生成数据表 2.运行存在的SQL脚本 3.使用空属类型 4.使用枚举类型的属性 5.使用NHibernate中的日志记录 一.由实体类生成数据表 在前面所用到的例子中我们都是先有数据表结构,然后才有实体类,然而这会让很多朋友认为ORM怎么变成了ROM了,其实这只是我们平时的一个开发时的习惯问题,Activ...
阅读全文
摘要:摘要:在我们录入数据时,对数据有效性的验证是必不可少的, ActiveRecord中如何去验证数据的有效性呢?本文将详细介绍这一内容。 主要内容 1.概述 2.使用Validation 3.如何扩展 4.深入分析验证 一.概述 在录入数据时,对数据有效性的验证是必不可少的,很多时候我们在UI层上就会做一层验证,但有时也需要在底层做一些必要的处理,这就要用到ActiveRecord中的数据有效...
阅读全文
摘要:摘要:虽然ActiveRecord为我们提供了Find()和FindAll()这样两个静态的查询方法,并且有Where特性可供使用,但是仍然不能解决实际开发中一些复杂的查询,这时我们就需要通过HQL查询来实现。 主要内容 1.HQL概述 2.SimpleQuery查询 3.ScalarQuery查询 4.自定义查询 5.使用CallBack 一.HQL简单介绍 HQL全名是Hiberna...
阅读全文
摘要:摘要:在ActiveRecord中把数据库表之间的关联关系采用对象间的聚合关系来表现,然而这却带来一系列的性能上的问题。就像我在One-Many中用到的例子Blog,使用Blog.Find(1)查找了一个Blog对象,也许我们只用到它,但事实它却把该Blog所关联的Post对象也读取出来放在了内存中,于是我们就需要有一种方法来实现只在需要Post对象的时候框架再自动读取。另外ActiveReco...
阅读全文
摘要:摘要:多对多的关系在日常开发中也会经常遇到,在ActiveRecord中我们用HasAndBelongsToMany特性来实现Many-Many的关联,本文将通过一个具体的实例来介绍这一用法。 主要内容 1.准备数据库表 2.编写实体类 3.编写测试代码 一.准备数据库表 接着在上篇文章中的例子,为了实现多对多的关系,我们引入Community,即每个Blog可以属于多个社区,每个社区也...
阅读全文
摘要:摘要:前面几篇文章简单的介绍了ActiveRecord中的基本映射以及构建配置信息,本文我们用ActiveRecord里面的Blog,Post例子来实现One-Many/Many-One关联。 主要内容 1.准备数据表结构 2.编写实体类并介绍HasMany和BlongsTo特性 3.构建配置信息 4.编写测试代码 一.准备数据表结构 在这个例子中,我们引入了两个对象Blog、Post,它们...
阅读全文
摘要:摘要:本文详细介绍了ActiveRecord中的基本映射,对于关联映射会在后续文章中通过一些具体的实例来说明。 主要内容 简单映射 1.ActiveRecordAttribute 2. PrimaryKeyAttribute 3.CompositeKeyAttribute 4.PropertyAttribute 5.FieldAttribute 一.ActiveRecordAttribute...
阅读全文
摘要:摘要:ActiveRecord在底层封装了NHibernate,在框架启动时需要指定相关的配置信息,那么我们需要配置些什么?又该如何去配置呢?本文将会介绍在ActiveRecord中构建配置信息。 主要内容 1.需要配置什么 2.如何去配置 3.常见的配置示例 一.需要配置什么 在第一篇大家都已经看到了,其实我们的配置信息跟用NHibernate时的配置是一样的,这是因为ActiveReco...
阅读全文
摘要:摘要:最近几天有时间看了一下Castle,原来它的功能是如此的强大,从数据访问框架到IOC容器,再到WEB框架,基本包括了整个开发过程中的所有东西,看来得好好学习研究一下了,并且打算把自己学习过程的一些东西记录下来。先从ActiveRecord开始吧,ActiveRecord提供的简洁的O/R映射给我留下了很深的印象,本文将通过一个简单对象的CRUD操作来带你快速走进Castle ActiveR...
阅读全文
摘要:——.NET设计模式系列之十七 TerryLee,2006年7月 概述 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的松耦合[李建忠]。这就是本文要说的Command模式。 意图 将...
阅读全文
摘要:摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要。 主要内容 1.概述 2.Template Method解说 3..NET中的Template Method模式 4.适用性及实现要点 概述 变化一直以来都是软件设计的永恒话题,在XP编程中提倡拥抱变化,积极应对。如何更好的去抓住变化点,应对变化?如何更好的提高代码复用...
阅读全文
摘要:——.NET设计模式系列之十四 Terrylee,2006年5月 摘要:在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切。这就是本文要说的Proxy模式。 主要内容 1.例说Proxy模式 2.Proxy模式效果及实现要点 …… ...
阅读全文
摘要:——探索设计模式系列之十五 Terrylee,2006年5月 摘要:结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式)。这些结构型模式,它们在某些方面具有很大的相似性,仔细推敲,侧重点却各有不同。本文试图对这几种结构型模式做一个简单的小结。 主要内容 1.结构型模式概述 2.结构型模式区别与比较...
阅读全文
摘要:——.NET设计模式系列之十三 Terrylee,2006年3月 摘要:面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题。但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价。那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作? 本文试图通过一个简单的字符处理的例子,运用重构的手段,一步步带你走进Flyweight模式,在这个过程中我们一...
阅读全文
摘要:——.NET设计模式系列之十二 Terrylee,2006年3月 概述 在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Façade 模式。 意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使...
阅读全文
摘要:——.NET设计模式系列之十一 Terrylee,2006年3月 概述 组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 意图 将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。[GOF 《设计模...
阅读全文
摘要:——.NET设计模式系列之十 Terrylee,2006年3月 概述 在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“功能扩展变化”...
阅读全文
摘要:——.NET设计模式系列之九 Terrylee,2006年2月 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。 意图 将抽象部分与实现部分分离,使它们都可以独立的变化。[GOF 《设计模式》] 结构图 图1 Bridge...
阅读全文
摘要:——.NET设计模式系列之八 Terrylee,2006年2月 概述 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。那么如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?这就是本文要说的Adapter 模式。 意图 将一个类的接口转换成客户希望的另外一个接口。Adapt...
阅读全文
摘要:——.NET设计模式系列之七 Terrylee,2006年1月 概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。本文对五种常用创建型模式进行了比较,通过一个游戏开发场景的例子来说该如何使用创建型模式。 为什么需要创建型模式 所有的创建型模式都有两个永恒的主旋律:第一,它们都将系统使用哪些具体类的信息封装起来;第二,它们隐藏了这些类...
阅读全文
摘要:——.NET设计模式系列之六 Terrylee,2006年1月 概述 在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构。这时如果用工厂模式,则与产品类等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适。那么如何封装这种动态的变化?从而使依赖于这些易变对象的客户程序不随着产品类变化? 意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 结...
阅读全文
摘要:——.NET设计模式系列之五 Terrylee,2004年1月2日 概述 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的Factory Method模式了。 意图 定义一个用...
阅读全文
摘要:——.NET设计模式系列之四 Terrylee,2005年12月17日 概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而...
阅读全文
摘要:——探索设计模式系列之三 Terrylee,2005年12月12日 概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?这就是我们要说的抽象工厂模式。 意图 提供一个创建一系列相关或相互依赖对象的接...
阅读全文
摘要:——.NET设计模式系列之二 Terrylee,2005年12月07日 概述 Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任。 从另一个角度来说,Single...
阅读全文
摘要:——.NET设计模式系列之一 Terrylee,2005年12月06日 前言 加入Design & Pattern团队有几个月的时间了,惭愧的是从没有写过关于设计模式的随笔,得到wayfarer的同意,把企业库系列的随笔放在了团队的首页上。不是不想去写这样的随笔,也不是没有时间,自己初学设计模式,去写设计模式的文章,有点班门弄斧的味道。园子里吕震宇老师的《设计模式系列》和wayfarer的《设计之...
阅读全文
摘要:第一章. 介绍 1.1. 概览 Spring.NET 是一个关注于.NET企业应用开发的应用程序框架。它能够提供宽广范围的功能,例如依赖注入、面向方面编程(AOP)、数据访问抽象, 以及ASP.NET集成等。基于java的spring框架的核心概念和价值已被应用到.NET。Spring.NET 1.0 包含一个完全功能的依赖注入容器和AOP库。后续的发布将包含对ASP...
阅读全文
摘要:什么叫做投资?说得通俗一点,投资就是用钱生钱,让钱为你打工。 对于投资工具呢,我必须承认,我了解得不多,但是,投资最重要的是什么?是理念,是意识,这点是我们所必须清楚了解的。所以,对于我们而言,首先必须要解决的是你的投资意识问题。这属于根本性的基础问题。 想要投资,首先要分清楚什么是资产,什么是债务。如果你有一栋房子,不管多大,首先要问自己,这房子是资产吗?未必,你的...
阅读全文
摘要:年轻的你,想要在人生中拥有多少财富呢?"理财一定要先有目标"中国商业银行南京分行的投资顾问陈吟说。有了目标后,才有理财动力。你的理财目标是什么?一栋房子、一辆车子,还是100万呢?100万不算多,万丈高楼平地起,过来人常说人生中第一个100万比200万还要难存。 第一个100万,将是通往未来的财富基石。 年轻时代正处事业发展时期,许多人薪水不少却总是存不下来,问题都出在无法节制欲望,且未...
阅读全文
摘要:HQL查询语言基础! 1 .from1.1单表查询from eg.cat as cat.其中,cat只是一个别名,为了用其他子语句的时候书写简单1.2多表查询from eg.Cat,eg.Dogfrom eg.Cat as cat,eg.Dog as dog2 join相关(inner) joinleft (outer) joinright (outer) joinfull joinHQL同...
阅读全文
摘要:Introduction NHibernate, like other ORM tools, has alleviated the maintenance of thousands of lines of code and stored procedures, thus allowing developers to focus more attention on the core of a pro...
阅读全文
摘要:本文并不是去详细的介绍如何使用NHibernate,而是通过一个简单的例子来演示基于NHibernate的三层结构应用程序开发过程。关于NHibernate的有关文档,DDL已经做了汉化,但是由于英文文档自身就不完善,所以汉化后也是不全。菩提树在一篇《NHibernate学习之路》随笔中谈到了学习NHibernate遇到的困难,也希望大家把自己在使用NHibernate中的经验和心得能够共享出来,...
阅读全文
摘要:其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持。然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西,比如: Tomcat, Eclipse, Log4J,Struts, XDoclet, 甚至JBoss。这容易让人产生Hibernate复杂难懂的误解,特别是打击了初学者的积极性。 在这篇文章将不...
阅读全文
摘要:什么是 Nullables? Nullables 是 NHibernate 的附加软件,它是Donald L Mull Jr. (aka luggage)贡献的.大部分数据库系统允许基本类型(象int或bool)为null。这意味着一个boolean列可能有0,1或者是null值,null和0有不同的含义。但是在.NET 1.x这是不能实现的;一个bool不是true就是false。 Nulla...
阅读全文
摘要:什么是 NHibernate.Tool.hbm2net? NHibernate.Tool.hbm2net 是 NHibernate 的附加软件.它使得从hbm.xml映射文件产生源代码成为可能。 在 NHibernate.Tasks目录,有一个叫做Hbm2NetTask的工具,你可以用它自动编译程序(使用NAnt)。
阅读全文
摘要:什么是 NHibernate.Mapping.Attributes? NHibernate.Mapping.Attributes 是 NHibernate 的附加软件,它是Pierre Henri Kuat (aka KPixel)贡献的; 以前的实现者是 John Morris.NHibernate需要映射信息来绑定你的域对象到数据库。通常他们被写在(并且被保存在)在分散的hbm.xml文件里...
阅读全文
摘要:什么是 NHibernate.Caches? NHibernate.Caches 是 NHibernate 的附加软件,它是Kevin Williams (aka k-dub)贡献的.缓存是一个保存实体的地点(在首次加载时);一旦进入缓存,能够取得它们,而无需(再次)查询的后台的存储(数据库)。这意味着它们能更快的加载(或重新加载)。 NHibernate session有一个内部的(一级)缓存...
阅读全文
摘要:刚刚接触NHibernate的人大多是从父子关系(parent / child type relationship)的建模入手的。父子关系的建模有两种方法。比较简便、直观的方法就是在实体类Parent和Child之间建立 的关联关系,从Parent指向Child,对新手来说尤其如此。但还有另一种方法,就是将Child声明为一个 (组合元素)。可以看出在NHibernate中使用一对多关联比comp...
阅读全文
摘要:简介 单向关联是最常用的也是最难正确使用的。在本章中会逐个经历规范的案例,从单向映射开始,然后涉及双向的案例。我们会在所有的例子中使用Person和 Address。例子中没有包括命名空间和程序集,我们把关注点放在重要的方面。 我们通过是否使用表连接和多样性(单向或双向)分类关联。 在传统的数据模型中允许为空的外键是不实用的,所以我们的例子中没有使用允许为空的外键。在NHiber...
阅读全文
摘要:持久化集合类(Persistent Collections) 这部分不包含大量的.NET代码例子。我们假定你已经了解如何使用.NET自身的集合类框架(.NET's collections framework)和Set集合的概念。 其实如果是这样, 这里就真的没有什么东西需要学习了... 用一句话来做个总结,你就用你已经掌握的知识来使用它们吧。 NHibernate可以持久化以下集合...
阅读全文
摘要:映射声明(Mapping declaration) 对象和关系数据库之间的映射是用一个XML文档(XML document)来定义的。这个映射文档被设计为易读的,并且可以手工修改。映射语言是以.NET为中心的,意味着映射是按照持久化类的定义来创建的,而非表的定义。 请注意,虽然很多Hibernate用户选择手工定义XML映射文档,也有一些工具来生成映射文档,包括XDoclet,Mi...
阅读全文
摘要:持久化类是应用程序用来解决商业问题的类(比如,在电子交易程序中的Customer和Order)。持久化类,就如同它的名字暗示的,是短暂存在的,它的实例会被持久性保存于数据库中。 如果这些类符合简单的规则,NHibernate能够工作得最好,这些规则就是Plain Old CLR Object (POJO,简单传统CLR对象)编程模型。 POCO 简单示例 用一个类描述一只猫。 ...
阅读全文
摘要:因为NHibernate被设计为可以在许多不同环境下工作,所以它有很多配置参数。幸运的是,大部分都已经有默认值了。 NHibernate.Test.dll包含了一个示例的配置文件app.config,它演示了一些可变的参数。 可编程配置方式 NHibernate.Cfg.Configuration的一个实例代表了应用程序中所有的.NET类到SQL数据库的映射的集合。Configura...
阅读全文
摘要:总览 对NHibernate体系结构的非常高层的概览: 这幅图展示了NHibernate使用数据库和配置文件数据来为应用程序提供持久化服务(和持久化的对象)。 我们试图显示更多NHibernate运行时体系结构的细节。 但挺不幸的,NHibernate是比较灵活的并且提供了好几种不同的运行方式。我们展示一下两种极端情况。轻型体系中,应用程序自己提供ADO.NET连接,并且自行管理事...
阅读全文