У меня 1 длительный процесс, запущенный на объекте, для которого я обновляю StartTime and EndTime
в таблице базы данных, и затем у меня есть 1 отдельная конечная точка, которая получает отображение StartTime,EndTime
и общее время, необходимое объекту для обработки.
Ниже приведены два метода:
public class DbModule
{
private readonly string _connectionString;
public DbModule() { }
public DbModule(string connectionString)
{
_connectionString = connectionString;
}
public void UpdateRegionStartTime(int moduleId,int regionId)
{
using (SqlConnection connection = new SqlConnection(_connectionString))
{
string query = "Update Module_Region_Mapping set [StartDateTime]=@StartDateTime where ModuleId=@ModuleId and RegionId=@RegionId";
using (SqlCommand cmd = new SqlCommand(query, connection))
{
connection.Open();
cmd.Parameters.AddWithValue("@ModuleId", moduleId);
cmd.Parameters.AddWithValue("@RegionId", regionId);
cmd.Parameters.AddWithValue("@StartDateTime", DateTime.Now);
cmd.ExecuteNonQuery();
connection.Close();
}
}
}
public void UpdateRegionEndTime(int moduleId,int regionId)
{
using (SqlConnection connection = new SqlConnection(_connectionString))
{
string query = "Update Module_Region_Mapping set [EndDateTime]=@EndDateTime where ModuleId=@ModuleId and RegionId=@RegionId";
using (SqlCommand cmd = new SqlCommand(query, connection))
{
connection.Open();
cmd.Parameters.AddWithValue("@ModuleId", moduleId);
cmd.Parameters.AddWithValue("@RegionId", regionId);
cmd.Parameters.AddWithValue("@EndDateTime", DateTime.Now);
cmd.ExecuteNonQuery();
connection.Close();
}
}
}
}
public class MyProcessor
{
public void Process(int moduleId,int regionId)
{
var dbModule = new DbModule("connection string");
try
{
dbModule.UpdateRegionStartTime(100, 101);
LongRunningProcess();
dbModule.UpdateRegionEndTime(100,101);
}
catch(){}
}
}
Но я чувствую себя как дубликат кода, поскольку только два поля обновляются с помощью одной и той же функции (DateTime.Now
).
Таким образом, наличие отдельного метода, подобного этому (UpdateRegionStartTime
и UpdateRegionEndTime
), имеет смысл, поскольку он улучшает читабельность, хотя и за счет дублирования кода, или его можно реорганизовать для чего-то, что уменьшает дублирование кода, но при этом сохраняет читабельность?