从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.. }; } }