asp.net-mvc – 在图层之间复制模型
遍历图层时,执行右侧>左侧分配作为填充模型的方法非常繁琐.例如:
employeeViewModel.FirstName = employeeModel.FirstName; employeeViewModel.LastName = employeeModel.LastName; ... 因此,我们可以构建一个使用反射来复制模型的ModelCopier: var employeeViewModel = ModelCopier.Copy<EmployeeViewModel>(employeeModel); 这种技术大大简化了任务.但是,有一些事情令人非常不安: >我们实际上已经失去了跟踪源和目标对象上属性的用法的能力.例如,查找FirstName属性的使用(在Resharper中)不会显示ModelCopier案例. 在光谱的一端,我们可以使用非常容易的反射,但是以可维护性为代价.光谱的另一端是非常繁琐但非常可维护的. 反射(简单和危险)< ----->直接分配(繁琐且可维护) 我很好奇是否有人发现了一种折衷方案,它提供了易于使用反射进行复制并具有直接分配的可维护性. 我们接受的一个解决方案是构建一个插件,该插件将生成扩展方法,以处理每种情况的属性分配.换句话说,构建一个可以处理繁琐部分的工具. 编辑: 请理解,此问题与使用哪种映射工具无关.我试图理解我们如何享受基于反射的映射的好处,同时还享受直接赋值(或属性映射契约)提供的可维护性的好处. 解决方法
可能编译器不会在整个代码中进行必要的测试……这就是单元测试的用武之地.
如果您已经为不同层中的类之间的转换定义了测试(是的,您需要执行所有可能的转换,否则您如何确保您的反射方法在生产中的每种情况都能正常工作?),运行测试将告诉开发人员更改了属性名称,该解决方案不再通过所有测试. 每次要签入源代码时,都应该运行每个测试(单元测试,而不是集成测试)…这不应该是几个月的编码:)) 因此,我真的投票使用反射方法,用一勺单位测试方法辛辣. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET 根据汉字获取汉字拼音的首字母(含多音字)
- asp.net-mvc-4 – MVC4 RC脚本捆绑很慢
- Advanced Architecture for ASP.NET Core Web API
- 如何为asp.net身份创建安全邮戳值(IUserSecurityStampStore
- ASP.NET超链接asp:HyperLink与A href
- asp.net-mvc – Sitecore搜索方面和计算字段
- asp.net-mvc – 如何将NUnit作为ASP.NET MVC的测试框架选项
- asp.net – 如何在aspx文件中创建区域?
- asp.net-mvc – MVC 4 Razor – 动态命名javascript函数
- asp.net-identity – 由于其保护级别,Microsoft.Owin.Secur
- asp.net-core – ASP.NET 5中的Application_Star
- asp.net – Web身份验证状态 – 会话vs Cookie v
- 有没有办法加快asp.net中的编辑 – 编译 – 调试
- asp.net-mvc – 我们是否正在使用.Net 3.5中的MV
- asp.net-mvc – Orchard查询按内容类型BlogPost和
- asp.net – 无法自动进入服务器.无法确定停止位置
- asp.net-mvc – 使用ASP.NET MVC进行项目组织的最
- oauth – 如何为AspNet.Security.OpenIdConnect.
- asp.net-mvc – ASP MVC Razor视图扩展方法,如何
- asp.net – 循环通过gridview并获取数据键值