【问题标题】:n-tier object mapping helpn 层对象映射帮助
【发布时间】:2008-11-03 21:00:07
【问题描述】:

想知道我的方法是否可行或可以改进:

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

有这样的对象映射的想法吗?

【问题讨论】:

  • 这不是真正的对象到关系映射吗? “n-tier”真的没有意义,是吗?

标签: .net orm n-tier-architecture oop


【解决方案1】:

在这种情况下,您将创建一个 Company 实例,然后使用它返回一个公司列表?

有些人这样做,但我更喜欢将我的数据对象分离到一个哑数据容器中:

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

我使用一个基类 (EntityBase),它包含将哑实体转换回 SQLParameters 集合(用于持久化)的常用方法,以及从传入的 SQLReader 实例化它(这在每个具体类中都会被覆盖,将读取器映射到私有变量)。

然后我更喜欢使用“服务”类来实际进行数据库调用,创建适当的实体对象并返回它,我可以在这里利用多态性来大量减少代码重复。

【讨论】:

    【解决方案2】:

    @丹

    EntityBase 将是每个实体对象将继承的基类,例如:

    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"];
    }
    }
    

    现在,您的数据库层可以让读取器了解公司数据,并执行以下操作:

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

    在其他地方,保存您的数据:

    Company.Save();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多