【问题标题】:Translator Pattern翻译模式
【发布时间】:2010-12-29 07:31:59
【问题描述】:

在之前的工作中,我的经理建议使用 Translator 模式将数据从 DataTable 转换为对象。基本上,Translator 类只有静态(即类)方法,因此它是函数调用的聚合。我最初的方法是为每个可以将 DataTable 行作为参数并创建与数据对应的实例的对象实现构造函数。

他说 Translator 类是 Microsoft 提出的,它提供了更好的代码模块化。我可以看到这一点,但同时它似乎是一种非常非 OO 的方法(尽管访问者模式具有相似的特征)。

你们中有人用过这种模式吗?你怎么看?利弊?

【问题讨论】:

    标签: oop design-patterns visitor-pattern


    【解决方案1】:

    如果您可以在没有任何外部依赖项的情况下执行映射,那么使用静态方法以外的任何东西都没有任何用处。

    【讨论】:

      【解决方案2】:

      也许我遗漏了什么,但为什么不直接使用 linq?

          IEnumerable<Customer> customerQuery =
          from cust in customers
          where cust.City == "London"
          select cust;
      
      foreach (Customer customer in customerQuery)
      {
          Console.WriteLine(customer.LastName + ", " + customer.FirstName);
      }
      

      无论如何,TranslatorPattern 是将数据结构从一种表示形式更改为另一种等效结构。这里http://c2.com/cgi/wiki?TranslatorPattern 是更深入的信息。

      【讨论】:

      • 他的问题是关于翻译模式,而不是关于如何完成任务。此外,OP 并没有说他正在使用特定版本的框架,Linq 可能不适合他的情况。
      • 非常正确。尽管如此,我还是提供了一个代码示例,说明如何优雅地为在此页面上遇到类似任务的任何人完成任务,并且我提供了 TranslatorPattern 的(接近)原始来源的 URL 以供自学。
      • @GrayWizardx,马上。在我的情况下,我正在处理一个 API。我不确定 Richard 的查询示例是关于什么的,因为该问题与查询无关。
      【解决方案3】:

      C2.Com 看来,Translator 模式是访问者模式的非 OOP 实现。它在文章的结尾指出了一些缺点,包括在 OOP 语义中难以表达(但不是代码)的事实,换句话说,它可以正常工作,但如果你是对其余代码使用纯 OOP。

      【讨论】:

        【解决方案4】:

        我认为你在谈论Entity Translator。我认为这个场景中的翻译器自然是静态方法。它住在哪里是美学问题。它也应该很容易进行单元测试,因为它应该只依赖于它所转换的两个数据结构。听起来他们的“数据合同”的另一个名称是 DTO(数据传输对象)。

        【讨论】:

        • 感谢 Igor,这是一个有用的链接 - 关于实体翻译器和一般的 Microsoft 模式的存在。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-22
        • 2020-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多