.net n层对象映射帮助
不知道我的方法是否可行或可以改进:.net n层对象映射帮助,.net,orm,n-tier-architecture,oop,.net,Orm,N Tier Architecture,Oop,不知道我的方法是否可行或可以改进: 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
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
是否考虑像这样进行对象映射?在本例中,您将创建一个Company实例,然后使用它返回一个Company列表 有些人会这样做,但我更喜欢将我的数据对象分离到一个哑数据容器中:
public class Company : EntityBase
{
private int _id;
private string _name;
private string _location;
}
我使用一个基类(EntityBase),该基类包含将哑实体转换回SQLParameters集合(用于持久化)的常用方法,以及从传入的SQLReader实例化它(这在每个具体类中被重写,以将读取器映射到私有变量)
然后,我更喜欢使用一个“服务”类来实际进行数据库调用,创建适当的实体对象并返回它,我可以在这里利用多态性来大量减少代码重复。在这种情况下,您可以创建一个Company实例,然后使用它返回一个Company列表 有些人会这样做,但我更喜欢将我的数据对象分离到一个哑数据容器中:
public class Company : EntityBase
{
private int _id;
private string _name;
private string _location;
}
我使用一个基类(EntityBase),该基类包含将哑实体转换回SQLParameters集合(用于持久化)的常用方法,以及从传入的SQLReader实例化它(这在每个具体类中被重写,以将读取器映射到私有变量)
然后我更喜欢使用一个“服务”类来实际进行数据库调用,创建适当的实体对象并返回它,我可以在这里利用多态性来大量减少代码重复。@Dan
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();
@丹
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();
这不是真正的对象到关系映射吗?“n层”不是很有意义,是吗?这不是真正的对象到关系映射吗?“n层”不是很有意义,是吗?