c# - 使用 DateTime.Now 更新 2 个字段的代码重复
问题描述
我有 1 个长时间运行的进程针对我StartTime and EndTime
在数据库表中更新的实体运行,并且我有 1 个单独的端点,这些端点获得显示StartTime,EndTime
和实体处理所花费的总时间。
以下是2种方法:
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
)更新的 2 个字段。
因此,像这样(UpdateRegionStartTime
和UpdateRegionEndTime
)这样的单独方法是有意义的,因为它以代码重复为代价提高了可读性,或者它可以更好地重构为减少代码重复但仍保持可读性的东西?
解决方案
如果您的流程稳定,并且您的要求允许,您可以使用 1 种方法更新开始时间和结束时间。
如果这不是一个选项,那么您当前的 2 方法设置就可以了。它以清晰的描述方式将实际的动作/行为分开,这实际上是一件好事,甚至比“不重复自己”的范式还要好。
尽管如此; 一个例子:
var startTime = DateTime.Now;
LongRunningProcess();
var endTime = DateTime.Now; //used for clarity.
dbModule.UpdateStats(100,101,startTime,endTime);
推荐阅读
- shell - 如果条件为使用通配符分配文件检查变量 - shell 脚本
- excel - 如何从 excel 中的数据透视切片器中删除 N/A?
- .net-core - .Net Core 控制台应用程序发布要复制什么?
- r - 从连接的字符串中提取前 n 个字符
- vba - Microsoft Onenote 中未显示开发人员选项卡
- nginx - Kubernetes Ingress Host Configuration Automation
- java - Android. Setting default value for invalid json field
- python - Python, Generate a spike train
- sqlalchemy - 如何为 FastAPI 应用程序编写 SQLAlchemy 测试装置
- javascript - Return a nested array