Automapper 与 Dapper 的地图绘制对比

2024-01-06

这个问题是为了验证当前的实施在最佳实践和性能方面是否是正确的方法。到目前为止,在我之前的所有公司中,我一直在使用 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(使用前将#替换为@)

Automapper 与 Dapper 的地图绘制对比 的相关文章

随机推荐

  • Simulink - 每 30 秒输出 1,否则输出 0

    我需要一个需要每隔 30 秒或略超过 30 秒输出 1 的子系统 用matlab代码编写它应该像这样工作 function y fcn time uplinkTimeInterval codegen persistent lastTrigg
  • mod_rewrite 中的正则表达式匹配不以 this OR that 结尾的 URL

    这个的正则表达式是什么 匹配 if 字符串 NOT 结束于 php或结束于 html或包含 谢谢你 编辑 我需要NOT部分是因为该表达式将用于 Apache mod 重写 因为我无法更改的逻辑mod rewrite以避免NOT 编辑 我最初
  • 如何解决读取日历或发送邮件时 Microsoft Graph 返回“NoPermissionsInAccessToken”的问题

    在我们部门内 我们有一个经典 ASP 网站 该网站一直使用我们的公司 Google 帐户进行身份验证并将事件插入我们的 Google 日历 该组织刚刚从 Google 切换到 Office 365 我尝试将代码切换为使用 Outlook 但
  • 使用 addNA() 后查找 NA 值

    我有一个包含一堆分类变量的数据框 其中一些包含 NA 我使用addNA函数将它们转换为显式因子水平 当我尝试将它们视为 NA 时 我的问题就出现了 它们似乎没有注册 这是我的示例数据集并尝试 查找 NA df1 lt data frame
  • 在android上模拟鼠标输入

    想象一下 我有一个从蓝牙设备接收坐标的服务 现在我想在鼠标光标移动时显示它 我设法使用 toolType TOOL TYPE MOUSE 发送 MotionEvents 但我没有在屏幕上显示本机 Android 鼠标光标 我发送的事件如下所
  • 在应用程序中使用 exoplayer 库播放 YouTube 视频

    我已经使用 exoplayer 库在我的应用程序中播放视频 但我无法使用 exoplayer 播放 youtube 视频链接 我遇到以下异常 ExoPlayerImplInternal 源错误 com google android exop
  • Android Min SDK Version 和 Max SDK Version 设置

    我有一个应用程序 只想安装在 ICS 上 所以我设置了最小和最大 sdk 版本如下
  • 为什么未定义的常量的计算结果为 true?

    愚蠢的问题 我很惊讶这个咬了我 为什么 PHP 中未定义的常量的计算结果为 true 测试用例 上面的示例打印 嗯 非常感谢你的帮助 Try defined WHATEVER THIS ISNT DEFINED 当 PHP 遇到未定义的常量
  • Google 电子表格以三个单元格为条件

    我一直在尝试在我的电子表格上实现一个条件 基本上是一个包含三个条件单元格的检查表 其中包含 是 或 否 我想要实现的所有目标 使用 onEdit 是所有三个单元格都包含 是 输入下一列以及输入最终 是 的日期 我已经设法创建了其他运行良好的
  • 通过 Javascript 从 API 下载 PDF

    我正在使用 vue js 并找到了一些如何实现这一点的好例子 目前我的 API 返回一个 test pdf snappy App make snappy pdf html h1 Bill h1 p You owe me money dude
  • Heroku 架构加载:数据库“postgres”用户的权限被拒绝

    我正在尝试将 Rails 应用程序部署到 Heroku 现在想要加载我的架构 我收到以下错误 Running bundle exec rake db schema load attached to terminal up run 1533
  • 如何告诉 Play Framework 2 和 Ebean 保存空字段?

    我正在使用 Play Framework 2 和 Ebean 当用户提交表单来编辑数据库中的现有对象时 它不会保存空值 我想这是为了防止用 null 覆盖表单中不存在的字段 但是 如果需要的话 我怎样才能让他们将表单中的字段设置为空呢 例如
  • 管道:错误的文件描述符

    我知道以前有人问过这类帖子 但他们的水平显然比我想象的要高 读完他们的帖子后我仍然不明白 所以我决定从这里再次发布这个问题 我正在学习使用管道进行多进程通信 我遇到了这个名为 错误文件描述符 的错误 我不明白为什么我的代码中会出现此错误 i
  • 文本索引 MongoDB,搜索字符串的最小长度

    我已经从 mongo shell 为集合 X 创建了一个文本索引 db X ensureIndex name text cusines text address city text 现在如果一个文档的 name 属性有一个值seasons
  • 响应式设计中的固定位置

    我正在使用响应式框架 1140px 在移动版本中 我必须修复徽标的位置 但不能使其与滚动内容重叠 基本上固定位置但不固定滚动图像 这可以实现吗 你想使用position absolute position fixed将元素固定在屏幕上 因此
  • java中通过HTTP Get下载文件

    我编写了一个下载 Servlet 以根据 messageID 参数返回文件 下面是 doGet 方法 Override protected void doGet HttpServletRequest request HttpServletR
  • 使用 Visual Basic 在 Windows 窗体中嵌入 DOS 控制台

    我设法从其他问题中找到一些数据 使我能够实现下一个代码 Imports System Runtime InteropServices Public Class Form1
  • 错误消息:“无法连接到 Gmail”

    有时我会从许多脚本的基于时间的触发器中收到此错误消息 我可以做些什么还是只是服务器端问题 这看起来确实像服务器端 但预计它偶尔会失败 我想你应该实施一个指数退避 http googleappsdeveloper blogspot com b
  • SQLite 数据库创建时自动增量附近的语法错误

    又是我 那个使用 SQLite net 的人 当我的表主键上没有自动增量时 我的代码可以正常工作 我想自动增量键 所以我像这样重建了表 using SQLite namespace VehicleTracks Models public c
  • Automapper 与 Dapper 的地图绘制对比

    这个问题是为了验证当前的实施在最佳实践和性能方面是否是正确的方法 到目前为止 在我之前的所有公司中 我一直在使用 Auto Mapper 将关系对象映射到域模型实体 并将域模型实体映射到 Dtos ORM 工具是实体框架 在我目前的公司中