SQL 查询的日期时间参数

2024-02-13

我正在重构我的代码。考虑这个例子...

    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(使用前将#替换为@)

SQL 查询的日期时间参数 的相关文章

随机推荐