1

在 .NET 和 WCF 应用程序中,我们需要维护 EntityTranslator 以将业务消息转换为服务消息和将服务消息转换为业务消息。事实上,我不能将它们称为业务对象,因为我们只需要从数据库中获取并更新它们。我们从设备读取数据并存储到数据库,从数据库读取数据并存储到设备。

我们所有的类都是简单、普通的 .NET 类,不做任何具体的事情。

这是非常相似的课程。

这是我的服务实体。

[DataContract]
public class LogInfoServiceEntity
{
   string data1;
   string name;
}

public class  LogInfo
{
   string data1;
   string name;
}

现在我需要定义翻译器只是为了创建对方的实例类型并复制对方的数据。我们有大约 25 个这样的课程,我们觉得管理它们非常困难。所以我们有 25 名企业对服务翻译和 25 名服务对企业翻译。

我喜欢使用简单的 POJO 类来存储和获取信息,而不是使用所有的翻译器。

处理这种情况的最佳方法是什么?还是翻译是处理这种情况的最佳方式?

4

3 回答 3

2

Automapper可能是您正在寻找的。

于 2009-11-23T13:46:29.597 回答
0

答案是“视情况而定”。这完全取决于您的系统的复杂性。通常 WCF 服务接口应该是粗粒度的,不一定要一对一地映射到您的业务层实体,以防止额外的往返服务器。

例如,WCF 接口中的 Customer 实体可以传达更多信息,甚至与业务层中的 Customer 实体没有直接关系。但是您另外返回此信息是因为您预测在 85% 的情况下,客户不仅需要客户数据,而且在接下来的几分钟内还需要所有订单/活动或任何其他补充信息。

这是通常的权衡 - 是返回更多还是更少。

在您的特定情况下,我会坚持使用代码生成:您始终可以编写一个工具,该工具将从业务逻辑实体中生成所有外部接口和转换器。

于 2009-11-23T13:46:34.010 回答
0

这可能是一个愚蠢的问题,但你为什么不

对 DataContract 使用与“业务消息”相同的类吗?

通常,您将合同分开,这样您就可以在不影响数据合同的情况下更改业务对象,但是将它们分开有什么好处

于 2009-11-23T16:36:57.397 回答