2010-06-23 11:18:41
涉及的技术内容包括:ASM、ANSI C、.NET/C#、Python、Linux/Ubuntu 等。
记录读书笔记、生活点滴。关注基础理论和开发……
除特别标注外,所有文章均为作者原创,转载请注明出处。谢谢!

  查看 "推荐文章目录"。  


  研发中心长期招聘开发人员,详情请点击 "Linux/C, Python 职位"、 ".NET/C# 职位"。
  雨痕内部技术交流群,欢迎熟识的朋友参与。 将 添加为您的 MSN 联系人即可。
  为杜绝垃圾广告的侵扰,只有注册用户可以发表评论和留言。
  如果有什么问题,可以单击右侧图标给雨痕发消息。( 绿色: 在线; 灰色: 脱机)
浏览模式: 普通 | 列表
分类: AOP IoC ORM | 1 | 2 | 3 | >

[Castle AR] 5. Base Relations

[ 2007-05-14 11:15:43 | 作者: yuhen ]
Castle ActiveRecord 通过特性处理数据表关联关系。
  • Many-to-one: BelongsToAttribute
  • One-to-many: HasManyAttribute
  • Many-to-many: HasAndBelongsToManyAttribute
1. One-to-Many / Many-to-One

多数时候,Many-to-One 和 One-To-Many 总算相伴而生的。在下面的例子中,每个组可以有多个用户加入。我们通过在 User 类型里面使用 BelongsTo 添加一个名为 "GroupId" 的字段来处理 Many-to-One 的关联,而在 Group 中我们使用 HasMany 处理 One-to-Many。注意 HasMany 的参数,分别是 "User ...

阅读全文…

[Castle AR] 4. CRUD

[ 2007-05-09 13:21:50 | 作者: yuhen ]
ActiveRecord 的 CRUD 操作基本上都是由 ActiveRecordBase 的静态方法完成。其实例(含子类型)方法,以及 ActiveRecordMediator 只是对这些静态方法的包装调用而已。当然,ActiveRecordBase 方法又是对 NHibernate Session 方法的包装。

我们用下面这个实体来简单演示一下常用方法的使用。
[ActiveRecord("Users")]
public class User : ActiveRecordBase<User>
{
    private int id;

    [PrimaryKey(PrimaryKeyType.Identity, Access=PropertyAccess.FieldCamelcase)]
    public int Id
    {
        get { return id; }
...

阅读全文…

[Castle AR] 3. Validate

[ 2007-05-08 14:03:32 | 作者: yuhen ]
在业务设计中,对数据往往有确定的格式限制。我们通常的做法是在用户输入界面做这些处理,不过 Castle AR 为我们提供了另外一个备选方案。当我们无法确定类库或服务调用者是否会进行格式检查时,这个功能就非常实用了。要实现这个功能需要 ActiveRecordValidationBase / ActiveRecordValidationBase<T>,以及一些与之配套的验证特性。

uploads/200705/08_140423_ar6.gif


验证特性说明
  • ValidateNotEmpty: 属性不能为空,包括 String.Empty。
  • ValidateConfirmation: 验证两个属性必须相等,如密码验证。
  • ValidateEmail: 验证邮件格式。
  • ValidateLength: 属性字符串长度必须等于或者在某个长度之间。
...

阅读全文…

[Castle AR] 2. ActiveRecord

[ 2007-05-08 12:41:37 | 作者: yuhen ]
Castle ActiveRecord 对于数据实体的设计非常灵活,大量特性的使用,使得其代码方式非常类似 WCF 的声明式编程。

1. 实体类型

uploads/200705/08_124149_ar2.gif


通常我们会选择从 ActiveRecordBase (或其泛型版本) 继承实体类型,它几乎提供了实体所需的所有操作方法。
[Serializable]
public abstract class ActiveRecordBase<T> : ActiveRecordBase
{
    protected internal static int CountAll();
    protected internal static void Create(T instance);
    protected internal static void Delete(T instance);
...

阅读全文…

[Castle AR] 1. Starter

[ 2007-05-07 12:52:02 | 作者: yuhen ]
以前研究过一阵 ORM,基于某些理由,比较喜欢 XPO 和 Castle ActiveRecord。原因不外乎以下几点:
  • "Class to DB",我觉得 ORM 最重要的目的是用一种简便的方式来存储对象。我们对业务分析的重点是对象,而不会优先考虑数据库设计。XPO 和 Castle AR 在这方面做得都很好。
  • 一个是著名厂商 DevExpress 的产品,另一个是被广泛使用的 NHibernate 的封装,较好的升级保障对于项目开发是很重要的。网上一些个人的 ORM 作品虽然很有特色,但毕竟没人能保证 "未来三天" 它是否依然存在,也没有人能保证 Bug 会得到修复。
  • 这两个组件都能得到较好的技术支持,XPO 是商业软件自不必说,NHibernate 的用户群组和开发资料网上也很多。
  • 基于开发成本考虑,这两套组件无论是代码维护还是人力资源上都有较好的性价比。
...

阅读全文…

PostSharp - Lightweight Aspect-Oriented System

[ 2007-04-06 17:41:13 | 作者: yuhen ]
PostSharp 是一个令人兴奋的项目,他结合了 MSBuild Task 和 MSIL Injection 技术,从另外一个角度实现 AOP 编程。试用过后你会感觉到其便利性,我们和以往基于 Dynamic Proxy 方式的 AOP 解决方案做个比较。
  • 由于采用 MSIL Injection,因此静态代码注入的执行效率要高于使用 Reflection Emit。
  • 使用 MSBuild Task,使得开发人员可以像使用编译器内置 Attribute 那样使用 AOP。
  • 可以拦截任意方法,而 Dynamic Proxy 方式的 AOP 往往采取继承方式来拦截 Virtual 方法。
  • 拥有更多的控制权。包括中断执行流程,修改参数和返回值等等。
  • 还可以拦截 Field Access、Exception 等操作。
...

阅读全文…

[ActiveRecord] 之八:Queries

[ 2006-09-13 08:12:57 | 作者: yuhen ]
ActiveRecordBase.ExecuteQuery(IActiveRecordQuery query) 让我们可以用 hql 执行一些复杂的查询操作。
ExecuteQuery(ew ScalarQuery(typeof(User), "from User u where u.Age > ?", 18));

常用的 Query 对象包有 ScalarQuery 和 SimpleQuery 两种类型,那么他们在使用上有什么不同?

ScalarQuery.cs
public ScalarQuery(Type targetType, string hql, params object[] parameters) : base(targetType)
{
    this.hql = hql;
    this.parameters = parameters;
...

阅读全文…

Castle ActiveRecored Beta4 的变化

[ 2006-09-11 20:43:26 | 作者: yuhen ]
Castle 的官方 Release 版本依然停留在 2006-1-1 发布的 Beta3,这个版本里面有很多设计不合理的地方。今天从其 Daily Builds 获取了最新的 Beta4 版本(2006-8-27 CASTLE-760-net-2.0-release.zip),发现变化非常大,泛型支持和继承关系总算正常了。 [smile]

看来在 1.0 发布以前,结构变化可能还会发生,那些用 Beta3 开发项目的人恐怕有苦头吃了。 [sweat]

下面是我画的几个 Beta4 相关的 UML 图。

uploads/200609/11_204836_castel_beta4_1.png

...

阅读全文…
1 | 2 | 3 | >