【发布时间】:2011-02-24 16:37:04
【问题描述】:
我有一组方法,接受日期和布尔值。然后这些方法使用一些 SQL,然后将其传递给另一个方法并返回一个列表。除了 SQL 和返回的 List 之外,每个方法都几乎相同。现在我知道有更好的方法来执行这些方法,但我不确定如何。
由于方法几乎相同,有人对我如何抽象或使用更好的设计有任何想法吗?
代码如下:
private List<ENT_Message> GetMessageData(DateTime? startDate, DateTime? endDate, bool IsSelectAll)
{
List<ENT_Message> ret = new List<ENT_Message>();
string sql = "";
if (IsSelectAll)
{
sql = "select * from tbl_message";
}
else
{
sql = " Select * from tbl_message where created_Date between @start_Date and @end_date";
}
return Converter.SerializeToMessageList(this.GetData(startDate, endDate, IsSelectAll, sql));
}
private List<ENT_SensorData> GetSensorData(DateTime? startDate, DateTime? endDate, bool IsSelectAll)
{
List<ENT_SensorData> ret = new List<ENT_SensorData>();
string sql = "";
if (IsSelectAll)
{
sql = "select * from tbl_sensor_data";
}
else
{
sql = "select * from tbl_sensor_data where Timestamp between @start_date and @end_Date";
}
return Converter.SerializeToSensorDataList(this.GetData(startDate, endDate, IsSelectAll, sql));
}
private List<ENT_SensorDataEvent> GetSensorDataEvents(DateTime? startDate, DateTime? endDate, bool IsSelectAll)
{
List<ENT_SensorDataEvent> ret = new List<ENT_SensorDataEvent>();
string sql = "";
if (IsSelectAll)
{
sql = "select * from tbl_sensor_data_event";
}
else
{
sql = "select * from tbl_sensor_data_event where start_time between @start_date and @end_Date";
}
return Converter.SerializeToSensorEventDataList(this.GetData(startDate, endDate, IsSelectAll, sql));
}
private List<ENT_SensorDataState> GetSensorDataState(DateTime? startDate, DateTime? endDate, bool IsSelectAll)
{
List<ENT_SensorDataState> ret = new List<ENT_SensorDataState>();
string sql = "";
if (IsSelectAll)
{
sql = "select * from tbl_sensor_data_state";
}
else
{
sql = "select * from tbl_sensor_data_state where start_time between @start_date and @end_Date";
}
return Converter.SerializeToSensorDateStateList(this.GetData(startDate, endDate, IsSelectAll, sql));
}
private List<ENT_WorkOrder> GetWorkOrders(DateTime? startDate, DateTime? endDate, bool IsSelectAll)
{
List<ENT_WorkOrder> ret = new List<ENT_WorkOrder>();
string sql = "";
if (IsSelectAll)
{
sql = "select * from tbl_workorder";
}
else
{
sql = "select * from tbl_sensor_data_state where completed_date between @start_date and @end_Date";
}
return Converter.SerializeToWorkOrderList(this.GetData(startDate, endDate, IsSelectAll, sql));
}
【问题讨论】:
-
您为什么不直接添加代码作为您问题的一部分?
-
@RQDQ:代码有点长,会降低问题的可读性。为了清楚起见,我认为它在其他地方没有问题。
-
@Henk 如果您查看代码,您会看到返回的列表
-
@RQDQ:因为代码会占用大量空间
-
这个问题应该在codereview。
标签: c# design-patterns methods abstraction