I have a set of methods, that take in dates and a bool. These methods then use some SQL then pass it on to another method and return a list. Each method is pretty much the same with the exception of the SQL and the List returned. Now I know there is a better way do these methods but I’m not sure how.
Does anyone have any ideas as to how I can abstract this or use a better design as the methods are almost identical?
Here is the code:
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));
}
You could shorten your functions considerably. For example, instead of
you could simply write
That basically reduces your function to the stuff that really matters: The SQL and the name of the serialization function.