2008-11-03 6 views
1

Vous vous demandez si mon approche est correcte ou pourrait être amélioré:mapping objet n-tier aide

Public Class Company 
    private _id as Integer 
    private _name as String 
    private _location as String 

    Public Function LoadMultipleByLocation(Byval searchStr as String) as List(Of Company) 
    'sql etc here to build the list 
    End Function 
End Classs 

Réflexions sur la mise en correspondance ayant des objets comme celui-ci?

+0

N'est-ce pas vraiment un objet de mappage relationnel? "n-tier" n'est pas vraiment significatif, n'est-ce pas? –

Répondre

1

Dans ce cas, vous créez une instance de Société, puis vous l'utilisez pour renvoyer une liste d'entreprises?

Certaines personnes le font, mais je préfère séparer mon objet de données dans un conteneur de données muet:

public class Company : EntityBase 
{ 
    private int _id; 
    private string _name; 
    private string _location; 
} 

J'utilise une classe de base (EntityBase) qui contient des méthodes communes pour convertir l'entité muette de nouveau dans un collection de SQLParameters (pour la persistance), ainsi que l'instanciation d'un passé dans SQLReader (ceci est surchargé dans chaque classe concrète, pour mapper le lecteur aux variables privées). Je préfère alors utiliser une classe "Service" qui fait les appels de base de données, crée l'objet entité approprié, et le renvoie, je peux utiliser le polymorphisme ici pour réduire considérablement la duplication de code.

0

@ Dan

EntityBase serait une classe de base que chaque objet entité hérite, quelque chose comme:

public class EntityBase 
{ 
    public virtual string SaveSproc { get; } 

    public virtual void LoadFromReader(SqlReader reader) 
    { 
    } 

    public virtual void Save() 
    { 
     List<SqlParameters> paramList = = this.CreateParamsList(); 
     DoSqlStuff(this.SaveSproc, paramList); 
    } 

    public virtual List<SqlParamenter> CreateParamsList() 
    { 
      return new List<SqlParameter> 
    } 
} 

public Company : EntityBase 
{ 

    private string _data; 

public override string SaveSproc { get { return "SprocThatSaves"; } } 

    public override List<SqlParameter> CreateParamList() 
{ 
    List<SqlParameter> param = new List<SqlParameter> 
    param.Add(new SqlParameter("Data",_data); 

    return param; 
} 

public override void LoadFromReader(SqlReader reader) 
{ 
    // PsuedoCode 
    _data = reader["data"]; 
} 
} 

Maintenant, votre niveau de DB peut obtenir un lecteur avec des données de l'entreprise, et faire quelque chose comme :

Company = new Company(); 
Company.LoadFromReader(reader); 

Et ailleurs, pour enregistrer vos données:

Company.Save();