我正在重构我的代码。考虑这个例子...
public virtual List<Student> FetchEnrollmentList(DateTime admissionDateFrom,
DateTime admissionDateTo)
{
var students = new List<Student>();
using (oconn = new OleDbConnection(OracleConnection))
{
oconn.Open();
query = "SELECT * FROM Enrollment Where AdmissionDate between @AdmissionDateFrom and @AdmissionDateTo ";
using (ocmd = new OleDbCommand(query, oconn))
{
ocmd.Parameters.Add("@AdmissionDateFrom", OleDbType.Date).Value = admissionDateFrom;
ocmd.Parameters.Add("@AdmissionDateTo", OleDbType.Date).Value = admissionDateTo;
using (odr = ocmd.ExecuteReader())
{
while (odr.Read())
students.Add(new Student { Name = odr["StudentName"].ToString() });
}
}
}
return students;
}
我只是想消除 From 和 To 所以我创建了一个像这样的类型
public virtual List<Student> FetchEnrollmentList(DateSpan admissionDate)
{
var students = new List<Student>();
using (oconn = new OleDbConnection(OracleConnection))
{
oconn.Open();
query = "SELECT * FROM Enrollment Where AdmissionDate between @AdmissionDateFrom and @AdmissionDateTo ";
using (ocmd = new OleDbCommand(query, oconn))
{
ocmd.Parameters.Add("@AdmissionDateFrom", OleDbType.Date).Value = admissionDate.Start;
ocmd.Parameters.Add("@AdmissionDateTo", OleDbType.Date).Value = admissionDate.End;
using (odr = ocmd.ExecuteReader())
{
while (odr.Read())
students.Add(new Student { Name = odr["StudentName"].ToString() });
}
}
}
return students;
}
这样可以吗?还有其他想法吗?谢谢....
我同意马丁的观点,只有两个DateTime
定义列表边界的参数,实际上没有太多需要重构,只是还没有“代码味道”。
另一方面,如果您引入其他方法,正如您所说,使用多个日期范围参数,一旦我实际上拥有这些方法,我就会重构DateSpan
。一般来说YAGNI http://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it在您真正引入这些方法之前,只有那时您才应该重构现有方法以实现一致性。
在确实需要之前,我不会介绍太多的通用性,重构不是关于您在遥远的将来可能需要什么,而是您可以使用您拥有的代码库和您当时想要添加的功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)