В предыдущем задании мой менеджер предложил использование шаблона Переводчика для преобразования данных от DataTable до объектов. В основном класс Переводчика имел только статичный (т.е. класс) методы, таким образом, это было агрегирование вызовов функции. Мой начальный подход должен был реализовать конструкторов для каждого объекта, который мог взять строку DataTable в качестве аргумента и создать экземпляр, который соответствовал данным.
Он сказал, что класс Переводчика был предложен Microsoft и обеспечил лучший модульный принцип кода. Я вижу эту точку, но в то же время она походит очень подход неOO (хотя Шаблон "посетитель" имеет подобные характеристики).
Какой-либо из Вас использовал этот шаблон, и что Вы думаете о нем? за и против?
Из C2.Com видно, что шаблон Переводчика является не ООП реализацией шаблона посетителя. Он отмечает и в конце статьи несколько недостатков, в том числе тот факт, что в семантике ООП сложно выразить (но не код), другими словами, он будет работать нормально, но может не иметь большого смысла, если вы используете чистую ООП для остальной части кода.
.Я думаю, вы говорите о Entity Translator. Я думаю, что переводчик в этом сценарии, естественно, является статическим методом. Где он живет - это вопрос эстетики. Он также должен быть достаточно легко протестирован на единичность, так как должен иметь зависимости только от двух структур данных, между которыми он переводит. Другое название для их "контракта данных" - DTO (Data Transfer Object)
.Если вы можете выполнять отображение без каких-либо внешних зависимостей, то на самом деле нет смысла использовать что-либо, кроме статического метода.
Может, я что-то пропустил, но почему бы не использовать 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 более глубокая информация об этом.