实例化对象列表

时间:2017-02-16 19:31:24

标签: c# list class constructor

我确定之前已经回答过这个问题,但老实说我不确定如何找到答案,而且我的搜索没有产生任何结果;通过关闭主题并指出正确的问题/答案,我们可以自由地回答这个问题。

我们说我有一个代表我组织成员的班级。该类有一个构造函数来实例化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;
}

3 个答案:

答案 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));
        }