2009-02-11 3 views
1

Je suis en train d'écrire un destiné aux bases de données embarquées mini-ORM sous licence BSD (avec prise en charge ese, SQLite et SQLCE hors de la boîte)conseils sur un modèle de conception ActiveRecord en C#

Après beaucoup de travail avec Rails dans la dernière année, j'ai pensé à implémenter un pattern Active Record en C#.

J'ai trouvé un code de démo et je me demandais si le design de l'interface était bon.

Ici, vous allez:

// 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); 
    } 
} 

Désolé à ce sujet étant un multiple questions dans une seule ... Pouvez-vous penser à toute modification de cette API? Y a-t-il des défauts fatals? Existe-t-il des ORM open source qui définissent des interfaces similaires?

Répondre

3

Le projet Castle Active Record.

Bien que ce ne soit pas une implémentation stricte du modèle Active Record, cela fonctionne très bien. En prime, vous obtiendrez de l'expérience avec NHibernate dans le processus.

Comme quelqu'un qui a écrit le sien, très simple, OR/M pour le trouver manquant quand les scénarios devenaient plus complexes, je vous encourage fortement à jeter un oeil à Caste ActiveRecord et NHibernate, sauf si vous faites cela comme une expérience d'apprentissage.

+0

téléchargera et un jeu, à première vue, je pense que la façon im propose de faire hasMany et Appartient est plus agréable ... –

+0

Je dois également décider si une propriété ColumnInfo est nécessaire sur toutes les colonnes db et si j'ai vraiment besoin d'une propriété ActiveRecord sur la classe (semble redondante) –

+0

Castle AR ne prend pas en charge ESE cause nhibernate ne prendra jamais en charge ESE, dans un scénario incorporé ESE a un surcoût de seulement 80K pour la redistribution qui est incroyable –

0

ActiveRecordMediator

Créer une classe référentiel qui hérite de cette classe AR. Ensuite, vous ne cassez pas votre hiérarchie et vous implémentez un modèle de référentiel avec votre motif AR!

0

Est-ce que quelqu'un pourrait éventuellement fournir du code à une classe d'activationecord très simple avec laquelle je pourrais utiliser pour apprendre? Regarder la source sur des projets comme Castle et SubSonic est un peu écrasante. Je voudrais apprendre le modèle d'enregistrement actif pour avoir une idée de comment cela fonctionne. Je sais que tout ce que je construis ne serait rien comparé à Castle ou SubSonic, mais je pense que l'expérience d'apprentissage serait géniale. J'ai regardé Hayden ActiveRecord, mais je n'arrive pas à trouver la source. La plupart des publications liées aux enregistrements actifs sur son site sont assez anciennes.

Merci.

Edit: Désolé, j'aurais créé une nouvelle question pour cette ...

Questions connexes