Шаблон переводчика

В предыдущем задании мой менеджер предложил использование шаблона Переводчика для преобразования данных от DataTable до объектов. В основном класс Переводчика имел только статичный (т.е. класс) методы, таким образом, это было агрегирование вызовов функции. Мой начальный подход должен был реализовать конструкторов для каждого объекта, который мог взять строку DataTable в качестве аргумента и создать экземпляр, который соответствовал данным.

Он сказал, что класс Переводчика был предложен Microsoft и обеспечил лучший модульный принцип кода. Я вижу эту точку, но в то же время она походит очень подход неOO (хотя Шаблон "посетитель" имеет подобные характеристики).

Какой-либо из Вас использовал этот шаблон, и что Вы думаете о нем? за и против?

5
задан JasonMArcher 26 August 2014 в 02:41
поделиться

4 ответа

Из C2.Com видно, что шаблон Переводчика является не ООП реализацией шаблона посетителя. Он отмечает и в конце статьи несколько недостатков, в том числе тот факт, что в семантике ООП сложно выразить (но не код), другими словами, он будет работать нормально, но может не иметь большого смысла, если вы используете чистую ООП для остальной части кода.

.
4
ответ дан 14 December 2019 в 04:39
поделиться

Я думаю, вы говорите о Entity Translator. Я думаю, что переводчик в этом сценарии, естественно, является статическим методом. Где он живет - это вопрос эстетики. Он также должен быть достаточно легко протестирован на единичность, так как должен иметь зависимости только от двух структур данных, между которыми он переводит. Другое название для их "контракта данных" - DTO (Data Transfer Object)

.
4
ответ дан 14 December 2019 в 04:39
поделиться

Если вы можете выполнять отображение без каких-либо внешних зависимостей, то на самом деле нет смысла использовать что-либо, кроме статического метода.

0
ответ дан 14 December 2019 в 04:39
поделиться

Может, я что-то пропустил, но почему бы не использовать 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 более глубокая информация об этом.

0
ответ дан 14 December 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: