从DTO创建BO的模式/策略
我喜欢使用属性包对象(DTO)定义我的服务器接口的方法,但我不喜欢这样编写代码:
void ModifyDataSomeWay(WibbleDTO wibbleDTO) { WibbleBOWithMethods wibbleBO = new WibbleBOWithMethods(); wibbleBO.Val1 = wibbleDTO.Val1; wibbleBO.Val2 = wibbleDTO.Val2; }
这种复制代码很难编写。 如果复制代码是不可避免的,那么你把它放在哪里? 在BO? 在工厂? 如果可以手动避免写锅炉板代码那么如何?
提前致谢。
这看起来像是AutoMapper的工作,或者(更简单)只是添加一些接口。
这需要更多的error handling,您可能需要修改它以适应数据类型不匹配的属性,但这显示了简单解决方案的本质。
public void CopyTo(object source, object destination) { var sourceProperties = source.GetType().GetProperties() .Where(p => p.CanRead); var destinationProperties = destination.GetType() .GetProperties().Where(p => p.CanWrite); foreach (var property in sourceProperties) { var targets = (from d in destinationProperties where d.Name == property.Name select d).ToList(); if (targets.Count == 0) continue; var activeProperty = targets[0]; object value = property.GetValue(source, null); activeProperty.SetValue(destination, value, null); } }
Automapper(或类似工具)可能是这里的前进方向。 另一种方法可能是工厂模式。
最简单的是这样的事情:
class WibbleBO { public static WibbleBO FromData(WibbleDTO data) { return new WibbleBO { Val1 = data.Val1, Val2 = data.Val2, Val3 = ... // and so on.. }; } }
- 我的CustomAuthorizationPolicy.Evaluate()方法永远不会触发
- 找不到具有不变名称“MySql.Data.MySqlClient”的ADO.NET提供程序的entity framework提供程序 – WCF
- 如何在ASP.NET / WCF中定期执行某些操作?
- 如何在C#WCF中返回SqlDataReader?
- 使用WCF客户端+ cookie进行Web服务调用
- 通过WCF发送图像的有效方式?
- 为RESTful WCF配置SSL绑定。 怎么样?
- 初学者WCF问题 – 消耗性异步服务
- 内容类型为text / html; charset =响应消息的UTF-8与绑定的内容类型不匹配(text / xml; charset = utf-8)