我确定之前已经回答过这个问题,但老实说我不确定如何找到答案,而且我的搜索没有产生任何结果;通过关闭主题并指出正确的问题/答案,我们可以自由地回答这个问题。
我们说我有一个代表我组织成员的班级。该类有一个构造函数来实例化Member对象,将Member ID作为参数,并执行数据库调用以返回代表Member的行,以及我有兴趣使用的成员的任何属性。
获取成员列表的正确协议是什么?
我的数据库查询很简单 - 我有一个存储过程,它会返回我有兴趣获取的成员列表。但是我如何在应用程序级别上表示它呢?
现在,我有一个Member对象的构造函数,它将DataRow作为输入,并分配Member对象的所有相关属性。我接着做了以下事情:
public static List<member> getList()
{
DataTable dt = GetMemberList();
List<member> memberList = new List<member>()
foreach (DataRow dr in dt.Rows) memberList.Add(new member(dr));
return memberList;
}
答案 0 :(得分:1)
GetMemberList
正在这里开展工作,getList
仅仅是一种抽象。你所谈论的是关注点的分离。通常,这是在具有数据库的项目中通过分离成层来完成的,通常称为n层结构。
与您所询问的内容相关,此结构将包含处理数据库交互的数据访问层(DAL);一个服务层,它能够操作DAL的输入和输出,然后将该数据返回给调用者;和业务逻辑层,它将确定要进行的服务调用以及如何组合返回的数据。
如何实施该结构在很大程度上取决于几个因素:
最佳做法会根据这些因素的排列方式决定不同的事情。如果它只是你,那么解释就更开放了。如果它是一个团队,那么他们可能已经有了这类事情的指导方针。
我建议至少使用数据访问层和服务层。
答案 1 :(得分:0)
我不确定你的会员(我建议你为你的班级使用大写M)看起来像,但是你可以让你的类构造函数将DataRow作为参数并填充你的属性,如下所示:(I& #39;我在这里假设属性名称和数据库列名。)
public class Member
{
public Member(DataRow dataRow)
{
MemberID = Convert.ToInt32(dataRow["MemberID"]);
MemberName = Convert.ToString(dataRow["MemberName"]);
}
public int MemberID { get; set; }
public string MemberName { get; set; }
}
不是最好的解决方案,但这应该与您提供的代码一起使用。
答案 2 :(得分:0)
你目前所做的事情确实没有错。
DataTable dt = GetMemberList();
List<Member> memberList = new List<Member>();
foreach (DataRow dr in dt.Rows)
{
memberList.Add(new Member(dr));
}