[英]c# object/design fundamentals
这是一种标准的,良好的做法吗? 基本上返回本身的列表? 实际字段(ID,标题等)是否应该是单独的类? (我见过人们称其为DTO对象)
我正在开始一个项目,我想尝试并逐步降低这些基本知识-
谢谢!!
public class Calendar
{
public int id { get; set; }
public string title { get; set; }
public List<calendar> GetAll()
{
var list = new List<calendar>();
var db = new mssql2();
db.set("s1");
string sql = @"select * from [cal]";
var dr = db.dr(sql);
while (dr.Read())
{
var e = new calendar();
e.id = (int)dr["id"];
e.title = dr["title"].ToString();
list.Add(e);
}
return list;
}
}
您似乎正在将Domain模型与Data Access层混合在一起。
将Calendar保留为其自己的类,并可能使另一个类称为CalendarService
或CalendarRepository
,该类将为您返回Calendar对象的列表。
这是一个例子:
public class Calendar
{
public Calendar() { }
public Calendar(int id, string title)
{
Id = id;
Title = title;
}
public int Id { get; set; }
public string Title { get; set; }
}
public class CalendarService
{
public static List<Calendar> GetAll()
{
var list = new List<Calendar>();
var db = new mssql2();
db.set("s1");
string sql = @"select * from [cal]";
var dr = db.dr(sql);
while (dr.Read())
{
// Use the constructor to create a new Calendar item
list.Add(new Calendar((int)dr["id"], dr["title"].ToString()));
}
return list;
}
}
一般的想法是,类代表域对象 ,并且类成员具有这些域对象的各种属性 。 类函数将表示对象可以做什么 。
在您的情况下,将get_all()
删除到一些抽象数据库操作的类上可能更合适。 Calendar
具有Calendar
的功能(获取/设置一些日期,获取跳过的年份,获取/设置一些约会); 取决于您要完成的日历。
您正在紧密耦合数据访问,并且您的“ get_all”方法甚至没有使用日历类型的对象中的任何东西。 如果在这种情况下,您的方法不使用其所属类的实例中的任何数据,则该方法应不存在,或应为静态方法。 我的偏好是使用前者-拥有一个旨在从数据库中检索一个或多个日历的类。 它是更明智的代码组织,更易于测试,可以更轻松地从数据层抽象出来,并且还使您的数据对象更具可移植性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.