这个问题是为了验证当前的实施在最佳实践和性能方面是否是正确的方法。到目前为止,在我之前的所有公司中,我一直在使用 Auto Mapper 将关系对象映射到域模型实体,并将域模型实体映射到 Dtos。 ORM 工具是实体框架。
在我目前的公司中,他们使用 Dapper 作为 ORM 工具,而不使用 AutoMapper,因为他们说 Dapper 在内部为您进行映射。因此,他们构建项目的方式是创建一个单独的类库项目,其中包含 Dtos 并在数据访问和业务层中引用 Dtos。
Dapper 返回的查询在内部映射到 Dtos。这些Dto返回给业务层等等。
例如
在下面的代码中,参与者函数是 Dto。
数据访问层的存储库文件
public List<ParticipantFunction> GetParticipantFunctions(int workflowId)
{
// Update the Action for Participant
string selectSql = @"SELECT [WFPatFunc_ID] AS WFPatFuncID
,[WFFunction]
,[SubIndustryID]
,[DepartmentID]
FROM [dbo].[WF_ParticipantsFunctions]
WHERE [DepartmentID] = (SELECT TOP 1 [DepartmentID] FROM [dbo].[WF] WHERE [WF_ID] = @workflowId)";
return _unitOfWork.GetConnection().Query<ParticipantFunction>(selectSql, new
{
workflowId = workflowId
}).ToList();
}
开发人员告诉我的原因是 AutoMapper 只是一种开销并降低速度,而且由于 Dapper 在内部进行映射,因此不需要它。
我想知道他们遵循的做法是否良好并且没有问题。
There is这里没有对错。如果当前系统可以工作并解决他们的所有要求,那就太好了:使用它!如果你有一个实际需要对于 automapper 有用的东西,那就太好了:使用它!
但是:如果你don't需要自动映射器所做的事情(而且看起来他们不需要),那么......不使用它?
也许一个关键点/问题是:如果您的需求发生变化,您重构代码的能力如何later。对于许多人来说,答案是“当然,我们可以改变东西” - 所以在这种情况下我会说:推迟添加额外的层,直到你确实需要额外的层。
If you 绝对不会稍后能够更改代码,可能是由于有大量面向公众的 API(软件即产品),那么将所有内容解耦就有意义了now所以公共 API 中不存在耦合/依赖。但是:大多数人没有那个。除此之外,dapper 对您的类型模型没有任何要求,除了:它必须看起来有点像表格。如果确实如此,那么再说一遍:如果不需要,为什么要添加额外的层呢?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)