Шаблон адаптера предназначен для преобразования существующего интерфейса в интерфейс, который нужен / ожидается клиенту.Но, похоже, все, что вам нужно, это переформатировать дату - это все еще строка.Тогда это не похоже на работу для адаптера-человека как такового.
Используя шаблон адаптера, теоретически вам не нужно открывать существующий класс.Адаптер оборачивает адаптируемый класс и предоставляет новый интерфейс.Я представляю себе, что боль в том, что класс адаптера должен будет также проходить через все ваши неизмененные общедоступные вещи, потому что клиент в идеале «общается» только с адаптером, а не с исходным классом.
Общее решение
Общая идея состоит в том, чтобы переформатировать дату непосредственно перед тем, как элемент управления UI будет установлен в значение.Я надеюсь, что у ваших классов управления пользовательским интерфейсом есть события, которые запускаются непосредственно перед фактическим OnChange
событием.
Ваша заявка на C #?Использует ли он классы .NET Binding?
Класс .NET Binding
имеет 2 очень и очень удобных события: Parse
и Format
.Их цель в жизни - позволить вам изменять формат, значение, тип, независимо от значения, когда оно идет назад и вперед. Вам не нужно изменять какие-либо существующие интерфейсы или существующий код метода. Вы добавляете обработчики событий для переформатирования строки даты.
Принцип открытия / закрытия не является абсолютным
Если у вас есть очень веская причина открыть свой класс для модификации, тогда ОК.Но имейте в виду некоторые подразумеваемые цели Open / Closed:
- Не меняйте существующие интерфейсы
- Не меняйте существующее поведение.Мы добавляем новый материал, мы не хотим случайно изменять существующий материал.
- Изменение кода более подвержено ошибкам, чем написание нового кода.
Открыто / Закрытоне является оправданием для:
- НЕ рефакторинг плохого кода для реализации нормального исправления
- Принятие неверных решений по исправлению ради Open / Closed