Шаблон объекта передачи данных? - PullRequest
2 голосов
/ 23 января 2009

У меня проблема с созданием отчетов на основе Word для объекта «Клиент».

Обычно я делаю это, передавая Customer в класс, который знает, как создать документ Word, вставить закладки и т. Д.

Проблема с этим заключается в том, что я размещаю логику для извлечения и форматирования информации об объекте Customer в этом классе.

Я понимаю, что это плохо и нарушает принцип единственной ответственности.

Я подумал о создании другого класса, такого как «CustomerReportInfo», который принимает Custom и имеет всю логику, касающуюся форматирования и извлечения данных. Таким образом, класс, генерирующий Word, мал, и эти два могут меняться независимо друг от друга. 1009 *

Мне просто интересно, как этот класс должен называться? Я просмотрел список шаблонов и не вижу ничего, что соответствует описанию. Это не похоже на стратегию или прокси ... Это звучит как DTO, но DTO обычно являются глупыми классами без функциональности, не так ли?

Есть идеи, на какую модель это похоже?

Ответы [ 4 ]

1 голос
/ 23 января 2009

Я предпочитаю CustomerView или CustomerWordView, если оно относится к конкретному слову. Здесь вы касаетесь шаблона MVC, и в этом случае третьим понятием является класс контроллера, который загружает Customer из базы данных (желательно, чтобы кто-то еще его загрузил) и создает объект представления.

0 голосов
/ 15 сентября 2009

Вы на правильном пути, но не совсем там. Вместо создания одного нового класса, отвечающего за получение данных из объекта Customer и , содержащих этих данных, вы хотите, чтобы каждый класс действительно имел только одну ответственность. Итак, вы создаете два новых класса.

Основываясь на этой статье , кажется, что вы хотели бы такую ​​архитектуру:

Данные> Ассемблер> DTO> Генератор отчетов Word

Word Report Generator - это класс, который вы в настоящее время используете для создания отчета. DTO - это объект, который настолько прост, насколько вы можете его создать, и в то же время содержит все данные, которые вам понадобятся для вашего конкретного отчета. Data - это ваша информация об объекте клиента. Затем существует специальный класс Assembler, который содержит «логику получения и форматирования информации об объекте Customer» и заполнения DTO этой информацией.

0 голосов
/ 23 января 2009

Я не знаю названия шаблона, но мне нравится Архитектура приложений для .NET: Разработка приложений и служб . Я бы позвонил в службу отчетов ReportService и дал бы ей доступ к DAL для Customer.

альтернативный текст http://i.msdn.microsoft.com/ms978348.f02aa01(en-us,MSDN.10).gif

0 голосов
/ 23 января 2009

Я бы назвал это

CustomerReportGenerator

Я знаю, это звучит непристойно, но там говорится, что он делает, без комментариев или чего-то еще,

...