Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 有没有一种好方法可以自动在不同的体系结构层之间转换对象?_.net - Fatal编程技术网

.net 有没有一种好方法可以自动在不同的体系结构层之间转换对象?

.net 有没有一种好方法可以自动在不同的体系结构层之间转换对象?,.net,.net,越来越多的应用程序需要相似对象的不同表示,例如,当与web服务交叉时,或者当映射到数据库时。当您使用域模型时,您可能需要业务层/域模型中的一种对象—小的、大量的行为,而当跨越流程或网络边界时—大的、只有数据的或与数据库对话时—例如,LINQ to SQL只支持DB表和生成/映射对象之间的1对1映射 这意味着您必须编写大量代码来执行将相似对象相互转换/映射的死记硬背任务。肯定有某种框架或工具可以帮助您做到这一点?还是手工编码是真正控制局面的唯一方法?我们自己也研究过使用反射和XML/属性映射来解决

越来越多的应用程序需要相似对象的不同表示,例如,当与web服务交叉时,或者当映射到数据库时。当您使用域模型时,您可能需要业务层/域模型中的一种对象—小的、大量的行为,而当跨越流程或网络边界时—大的、只有数据的或与数据库对话时—例如,LINQ to SQL只支持DB表和生成/映射对象之间的1对1映射

这意味着您必须编写大量代码来执行将相似对象相互转换/映射的死记硬背任务。肯定有某种框架或工具可以帮助您做到这一点?还是手工编码是真正控制局面的唯一方法?我们自己也研究过使用反射和XML/属性映射来解决这个问题,但很快就会变得相当复杂,例如,将一个对象上的子对象和列表或多个原语映射到另一个对象上的子对象


我们在.NET3.5上使用C。

如果场景允许,您应该始终针对接口和抽象编写代码,而不是针对具体类。这样,您就可以有一个专用类/一组类来处理将一种对象转换为另一种对象的问题,例如,按照适配器模式的思路。也许你可以试着朝这个方向调整你的设计。 是的,我认为手工编码是真正控制局面的唯一方法。

你可以试试,它是由Jimmy Bogard开发的,他是一位经验丰富的老C开发人员

这是非常容易开始,只需安装它

PM> Install-Package AutoMapper
配置它

Mapper.Initialize(cfg => {
    cfg.CreateMap<Foo, FooDto>();
    cfg.CreateMap<Bar, BarDto>();
});
但是,当api接收到要添加用户的对象时,您只需要用户名

class AddUserFromApi {
    int UserName;
}
因此,您需要从AddUserFromApi创建一个用户,编辑也是如此

class EditUserFromApi {
    int Id;
    int UserName;
}
您需要编写代码来将一个类转换为另一个类。Automapper正是一个用于此目的的工具,正如页面所述:

AutoMapper是一个简单的小型库,用于解决欺骗性问题 复杂问题-摆脱将一个对象映射到另一个对象的代码 另一个这种类型的代码编写起来相当枯燥乏味,所以 为什么不发明一种工具为我们做这件事呢


旧的你什么意思,年轻人?我可能比他大,但我还是不会感激他。我可以采取明智的态度,但仅此而已。
class AddUserFromApi {
    int UserName;
}
class EditUserFromApi {
    int Id;
    int UserName;
}