建议您对此设计的看法

时间:2011-02-20 07:31:16

标签: c#

我正在开发业务层功能。

有两层: - 1)实体数据模型层,它是逻辑层

此逻辑层映射到存储层。

每一层都有不同的类。

数据存储层将主题,测试和结果作为对象 逻辑层将实体作为对象。

我正在编写一个代码,它接受逻辑层的对象并将其转换为存储层对象。 它通过读取逻辑层的模式来实现。

逻辑层的模式存储在xml文件中,它具有映射到物理层的属性。

我的代码将解释此架构并转换为适当的物理层对象。

我写的课程如下: -

DataModelToStorageTranslator
{
 IStorageLayerObject TranslateToStorageLayer(ObjectOfLogicalLayer);
}

存储层的不同类派生自IStorageLayerObject。

客户端将在运行时检查对象的类型。

有没有更好的方法来实现同样的目标?

我的实现是在C#

谢谢, 的Vivek

3 个答案:

答案 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对象。