Советы по шаблону проектирования ActiveRecord в C # - PullRequest
1 голос
/ 11 февраля 2009

Я нахожусь в процессе написания лицензированного BSD mini-ORM для встроенных баз данных (с поддержкой ese, sqlite и sqlce из коробки)

После многолетней работы с 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 ]

3 голосов
/ 11 февраля 2009

Проект Castle Active Record Project.

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

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

0 голосов
/ 22 сентября 2009

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

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

Спасибо.

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

0 голосов
/ 18 мая 2009

ActiveRecordMediator

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...