在之前的工作中,我的经理建议使用转换器模式将数据从DataTable转换为对象。基本上,Translator类只有静态(即类)方法,所以它是函数调用的集合。我最初的方法是为每个对象实现构造函数,这些构造函数可以将DataTable行作为参数,并创建一个与数据相对应的实例。
他说翻译类是微软提出的,并提供了更好的代码模块化。我可以看到这一点,但与此同时,它似乎是一种非OO方法(尽管访问者模式具有相似的特征)。
你们有没有人使用过这种模式,你怎么看待它?利弊?
答案 0 :(得分:4)
从C2.Com看来,Translator模式是访问者模式的非OOP实现。它注意到文章的结尾有一些缺点,包括在OOP语义中难以表达(但不是代码)的事实,换句话说它会很好地工作但是如果你是的话可能没有多大意义在代码的其余部分使用纯OOP。
答案 1 :(得分:4)
我认为你在谈论Entity Translator。我认为这种情况下的翻译自然是一种静态方法。它存在的地方是一个美学问题。它也应该非常容易进行单元测试,因为它应该只依赖于它之间转换的两个数据结构。听起来像他们的“数据合同”的另一个名称是DTO(数据传输对象)。
答案 2 :(得分:0)
如果你可以在没有任何外部依赖性的情况下执行映射,那么除了静态方法之外,使用其他任何东西都没有用处。
答案 3 :(得分: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是更深入的信息。