我正在重构我的数据层,以拥有一个清晰的存储库和服务,以便开始构建单元测试。这是我从工作中的前任开发人员那里继承的应用程序。
目前,他们使用简洁的查询为数据库中的每个对象(表)提供一个数据服务类。
我的问题是关于只有一两个选择查询的静态表。
我应该保持分离还是创建单个服务来在需要时查询所有静态表信息?我有 15 - 20 个 Ri_Data 服务,它们所做的就是使用单一方法调用下拉菜单数据。
为每一个提供自定义服务和存储库似乎有点多余,但我可能想得太多了。
我正在讨论将这些合并到一个 RIDataService 中,但想先获得一些替代意见。同时将我独特的物品分开
重构数据层并决定如何为仅涉及简单查询的静态表构建服务是使用遗留代码库时的常见挑战。该决定很大程度上取决于保持代码清晰度、可扩展性以及简化未来的单元测试。以下是一些关于如何解决此问题的想法和选项:
优点:
减少代码重复 更容易维护 意图更清晰
示例: 公共类静态数据服务 { 私有只读 IDbConnection _dbConnection;
public StaticDataService(IDbConnection dbConnection)
{
_dbConnection = dbConnection;
}
public IEnumerable<DropdownItem> GetRIStateCodes() =>
_dbConnection.Query<DropdownItem>("SELECT StateCode, StateName FROM RIStateCodeData");
public IEnumerable<DropdownItem> GetCarTypes() =>
_dbConnection.Query<DropdownItem>("SELECT CarTypeId, CarTypeName FROM CarData");
// Add more methods for other static data queries
}
优点: 可扩展性 关注点分离 清晰的业务逻辑封装
示例: 公共类 RIStateCodeService { 私有只读 IDbConnection _dbConnection;
public RIStateCodeService(IDbConnection dbConnection)
{
_dbConnection = dbConnection;
}
public IEnumerable<DropdownItem> GetStateCodes() =>
_dbConnection.Query<DropdownItem>("SELECT StateCode, StateName FROM RIStateCodeData");
}
公共类CarDataService { 私有只读 IDbConnection _dbConnection;
public CarDataService(IDbConnection dbConnection)
{
_dbConnection = dbConnection;
}
public IEnumerable<DropdownItem> GetCarTypes() =>
_dbConnection.Query<DropdownItem>("SELECT CarTypeId, CarTypeName FROM CarData");
}
示例: 将 RIStateCodeData、CarData、CountryData 等服务合并到单个 StaticDataService 中,因为它们的查询简单且相似。 为具有或将具有更复杂查询或业务逻辑的表保留单独的服务(例如 UserDataService 或 OrderDataService)。
单独的服务方法:如果每个静态服务保持独立,单元测试将更加精细,但可能会在测试中引入一些重复,特别是对于所有这些服务中存在的公共查询逻辑。