2009-02-11 2 views
1

Я нахожусь в процессе написания BSD лицензированного мини-ORM ориентированы на встроенных баз данных (с поддержкой ESE, SQLite и SQLCE из коробки)Рекомендации по шаблону проектирования ActiveRecord в C#

После рабочих партий с Rails в прошлом году я думал о внедрении шаблона Active Record в C#.

Я придумал демо-код и задавался вопросом, является ли дизайн интерфейса звуковым.

Здесь вы идете:

// 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

Castle Active Record Проект.

Хотя это не является строгой реализацией шаблона Active Record, он работает очень хорошо. Бонус - вы получите некоторый опыт работы с NHibernate в этом процессе.

Как кто-то, кто написал свой собственный, очень простой, OR/M, только чтобы найти, что ему не хватает, когда сценарии становятся более сложными, я настоятельно призываю вас внимательно рассмотреть CastE ActiveRecord и NHibernate, если вы не делаете этого как опыт обучения.

+0

загрузит и иметь люфт, на первый взгляд, я думаю, как им предлагают сделать HasMany и BelongsTo приятнее ... –

+0

Мне также нужно решить, следует ли мне требовать свойство ColumnInfo во всех столбцах db и если мне действительно нужно свойство ActiveRecord в классе (кажется, лишний) –

+0

Замок AR не будет поддерживать ESE-причину nhibernate никогда не будет поддерживать ESE во встроенном сценарии ESE имеет накладные расходы всего лишь на 80 тыс. Для перераспределения, которое удивительно. –

0

ActiveRecordMediator

Создание хранилища класса, который наследует от этого AR класса. Затем вы не разрушаете свою иерархию, и вы реализуете шаблон хранилища вместе с вашим шаблоном AR!

0

Может ли кто-нибудь предоставить код очень простому классу activerecord, с которым я мог бы учиться? Глядя на источник на такие проекты, как Castle и SubSonic, немного подавляющее. Я хотел бы изучить активный шаблон записи, чтобы понять, как это работает. Я знаю, что все, что я построю, будет ничто по сравнению с Замком или SubSonic, но я думаю, что опыт обучения будет замечательным.

Я посмотрел на Hayden ActiveRecord, но я не могу найти источник. Большинство активных записей, связанных с его публикацией, довольно старые.

Спасибо.

Edit: К сожалению, я должен был создать новый вопрос для этого ...

Смежные вопросы