6

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

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

你们中有人用过这种模式吗,你怎么看?优点和缺点?

4

4 回答 4

5

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

于 2009-12-22T23:01:44.763 回答
4

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

于 2009-12-22T23:08:49.837 回答
0

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

于 2009-12-22T22:51:11.867 回答
0

也许我错过了一些东西,但为什么不直接使用 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是更深入的信息。

于 2009-12-22T22:58:01.250 回答