Шаблон адаптера для существующего приложения - PullRequest
0 голосов
/ 15 января 2012

У меня есть приложение, которое написано давно. Часть приложения получает строку (которая является датой) из БД и отображает ее на экране.

Поскольку DATE преобразуется в строку, а затем сохраняется в БД. Во время его отображения строка (DATE) извлекается из базы данных и отображается в Winform.

Теперь у нас есть запрос, где мы должны поддержать французских клиентов и следовать французскому формату -DDMMYYYY. Я подумал об использовании шаблона adpater между уровнем DB и уровнем UI. Адаптер, который преобразует формат DATE на основе региональных настроек.

  1. У меня вопрос, в этом сенарио я должен создать объект этого адаптера. Так как я открываю класс для модификации. Не нарушает принцип Open-Closed.

  2. - правильный способ использования шаблона адаптера. Можно ли использовать паттер адаптера, когда используется клиентское приложение (в этом случае люди используют его последние 5 лет).

  3. Или любые другие способы изменить функцию для поддержки требований клиента.

Спасибо, Harsha

Ответы [ 2 ]

1 голос
/ 16 января 2012

Шаблон адаптера предназначен для преобразования существующего интерфейса в интерфейс, который нужен / ожидается клиенту.Но, похоже, все, что вам нужно, это переформатировать дату - это все еще строка.Тогда это не похоже на работу для адаптера-человека как такового.

Используя шаблон адаптера, теоретически вам не нужно открывать существующий класс.Адаптер оборачивает адаптируемый класс и предоставляет новый интерфейс.Я представляю себе, что боль в том, что класс адаптера должен будет также проходить через все ваши неизмененные общедоступные вещи, потому что клиент в идеале «общается» только с адаптером, а не с исходным классом.

Общее решение

Общая идея состоит в том, чтобы переформатировать дату непосредственно перед тем, как элемент управления UI будет установлен в значение.Я надеюсь, что у ваших классов управления пользовательским интерфейсом есть события, которые запускаются непосредственно перед фактическим OnChange событием.

Ваша заявка на C #?Использует ли он классы .NET Binding?

Класс .NET Binding имеет 2 очень и очень удобных события: Parse и Format.Их цель в жизни - позволить вам изменять формат, значение, тип, независимо от значения, когда оно идет назад и вперед. Вам не нужно изменять какие-либо существующие интерфейсы или существующий код метода. Вы добавляете обработчики событий для переформатирования строки даты.

Принцип открытия / закрытия не является абсолютным
Если у вас есть очень веская причина открыть свой класс для модификации, тогда ОК.Но имейте в виду некоторые подразумеваемые цели Open / Closed:

  • Не меняйте существующие интерфейсы
  • Не меняйте существующее поведение.Мы добавляем новый материал, мы не хотим случайно изменять существующий материал.
  • Изменение кода более подвержено ошибкам, чем написание нового кода.

Открыто / Закрытоне является оправданием для:

  • НЕ рефакторинг плохого кода для реализации нормального исправления
  • Принятие неверных решений по исправлению ради Open / Closed
0 голосов
/ 16 января 2012

Хорошей практикой является отделение логики домена от логики представления и постоянства.

А переходник между DB layer и UI layer, о котором вы говорите, выглядит как domain model.

...