我正在开发业务层功能。
有两层: - 1)实体数据模型层,它是逻辑层
此逻辑层映射到存储层。
每一层都有不同的类。
数据存储层将主题,测试和结果作为对象 逻辑层将实体作为对象。
我正在编写一个代码,它接受逻辑层的对象并将其转换为存储层对象。 它通过读取逻辑层的模式来实现。
逻辑层的模式存储在xml文件中,它具有映射到物理层的属性。
我的代码将解释此架构并转换为适当的物理层对象。
我写的课程如下: -
DataModelToStorageTranslator
{
IStorageLayerObject TranslateToStorageLayer(ObjectOfLogicalLayer);
}
存储层的不同类派生自IStorageLayerObject。
客户端将在运行时检查对象的类型。
有没有更好的方法来实现同样的目标?
我的实现是在C#
谢谢, 的Vivek
答案 0 :(得分:0)
除非有充分的理由使用XML,否则我会避免使用它。如果您有固定数量的对象需要从逻辑层转换到存储层,我建议您创建一个DataModelToStorageTranslator
外观,如下所示:
DataModelToStorageTranslator{
SubjectStore translate(SubjectLogical subject);
TestStore translate(TestLogical test);
ResultStore translate(ResultLogical result);
}
这样可以提供更多的类型安全性,因为您不需要检查对象类型和强制转换。您需要在想要添加新对象的任何时候扩展您的界面(对于较小的项目,我认为这是一种很好的方式)。
答案 1 :(得分:0)
要将属性从业务层复制到DTO,您可以使用基于反射的简单复制算法。有随时可用的实施。一个合适的应该是AutoMapper。周围有类似的工具。
不要映射XML,这只是耗时并且会减慢应用程序的反应。
如果您担心转换过程中的类型安全和速度问题,请考虑使用T4自动创建的代码。
只是我的想法。
答案 2 :(得分:0)
我做了类似的事情,但在对象上使用了扩展方法,我发现这种方式更流畅,更容易理解,所以我会有这样的调用。
ClientEntity.ToSaveableEntity()
将返回SaveableEntity对象。