【问题标题】:REST WCF - best approach to expose entities or convert custom classes to Entity classes vice versaREST WCF - 公开实体或将自定义类转换为实体类的最佳方法,反之亦然
【发布时间】:2013-06-26 14:38:04
【问题描述】:

我在我的项目中的两种方法(WCF REST 服务)上退了一步。

  1. 从 WCFDataServices 开始,因为它支持完整的 OData 服务堆栈,但由于对 CRUD 操作的更多验证要求,切换到使用 EF 的“WCF 服务”。
  2. 现在考虑退后一步,使用自我跟踪实体向客户端公开实体,正如许多文章所说,微软不再支持 STE,而是更喜欢使用 OData。(但 WCFDataService 再次不适合我)。

请建议在这里通过客户端公开我的实体的最佳设计是什么。 或者,我可能必须编写实体模型的自定义类(数据契约)。但是,这会增加代码(用于自定义和实体之间的对象转换)并降低可维护性。

请建议是否有任何最好的方法来公开我的实体。您的建议很有价值,非常感谢。

【问题讨论】:

    标签: wcf rest entity dataservice


    【解决方案1】:

    Fowlers 分布式对象设计的第一定律指出,“不要分发您的对象”。这只是意味着给他们一个副本,而不是实际的实体本身。如果您要在数据协定命名空间中创建实体的镜像副本,那么如果您的数据库模式需要更改,您将保留更多的灵活性。如果您的数据合约最初与您的实体相同,则 AutoMapper 等工具将消除您需要编写的所有转换代码。配置后,将您的实体转换为您的数据合同就变成了 1 班轮:

    Mapper.Map<CustomerDto>(customer);
    

    这将获取您的客户实体并为您返回一个新的客户 dto。它都是基于约定的,并且通过匹配属性名称来工作。即使数据协定与实体不完全相同,您也只需提示 AutoMapper 提供它无法自行识别的属性。

    【讨论】:

    • 我同意,谢谢马克。我最初需要 DTO,以免公开所有(敏感/不必要的)字段。是否有任何示例链接可以解释如何使用映射器?如果我说我不需要另一个用于 fooDTO 的 ObjectContext,请告诉我是否错了。我只会有一个 foo 的 ObjectContext。谢谢
    • 正确。映射与您的数据来自或去往的地方绝对无关。试试这个:automapper.org(可通过 Nuget 下载)另外,如果这是您问题的解决方案,您介意将其标记为正确吗,谢谢。
    猜你喜欢
    • 2016-12-22
    • 2015-04-26
    • 2010-10-16
    • 1970-01-01
    • 2010-11-03
    • 2022-06-22
    • 2011-09-23
    • 1970-01-01
    • 2011-07-05
    相关资源
    最近更新 更多