关于C#中ActiveRecord设计模式的建议

时间:2009-02-11 06:43:54

标签: c# design-patterns api

我正在编写针对嵌入式数据库的BSD许可迷你ORM(支持ese,sqlite和sqlce开箱即用)

在去年使用Rails工作之后,我一直在考虑在C#中实现Active Record模式。

我想出了一些演示代码,并想知道界面设计是否合理。

你走了:

// first param is the class, second is the primary key
public class Order : ActiveRecord<Order,int> {
    BelongsTo<Customer> Customer { get; set; }

    [PrimaryKey(AutoIncrement=true)]
    public int Id { get; set; }

    public string Details { get; set; }
} 


[Index("FirstName", "LastName")]
[Index("LastName", "FirstName")] 
public class Customer : ActiveRecord<Customer,int> 
{

    public HasMany<Order> Orders { get; set; }

    [PrimaryKey(AutoIncrement=true)]
    public int Id { get; set; }

    [ColumnInfo(MinLength=4, MaxLength=255, Nullable=false)]
    public string FirstName { get; set; }

    [ColumnInfo(MinLength=4, MaxLength=255, Nullable=false)] 
    public string LastName { get; set; }

    public string Comments { get; set; }
}

[TestClass]
public class TestActiveRecord {

    public void Demo() 
    {
        var customer = Customer.Build();
        customer.FirstName = "bob";
        customer.LastName = "doe";

        var order = customer.Orders.Build();
        order.Details = "This is the first order"; 
        customer.Save();

        var customer2 = Customer.Find(customer.Id);

        Assert.AreEqual(1, customer2.Orders.Count); 
    }
 }

很抱歉这是一个问题中的多个问题... 您能想到对此API的任何更改吗?有任何致命的缺陷吗?是否有任何定义类似接口的开源ORM?

3 个答案:

答案 0 :(得分:3)

Castle Active Record项目。

虽然它不是Active Record模式的严格实现,但它的效果非常好。奖金是你将在这个过程中获得NHibernate的一些经验。

作为一个自己编写的人,非常简单,OR / M只是在场景变得更复杂时才发现它缺乏,我强烈建议你仔细看看Caste ActiveRecord和NHibernate,除非你这样做学习经历。

答案 1 :(得分:0)

ActiveRecordMediator

创建一个继承自此AR类的存储库类。然后,您不会破坏您的层次结构,而是实现存储库模式以及您的AR模式!

答案 2 :(得分:0)

有人可能会为我可以用来学习的非常简单的activerecord类提供代码吗?看看Castle和SubSonic等项目的来源有点压倒性。我想学习积极的记录模式,以了解它是如何工作的。我知道无论我建造什么都没有比Castle或SubSonic更好,但我认为学习经验会很棒。

我看了Hayden ActiveRecord,但我似乎无法找到源头。他网站上大多数与活动记录相关的帖子都很老了。

感谢。

编辑: 对不起,我应该为此创建一个新问题......

相关问题