Абстрагирование форматирования данных интерфейса - PullRequest
1 голос
/ 10 декабря 2008

У меня есть несколько объектов, которые имеют десятичные свойства. Свойства этих объектов отображаются в нескольких местах по всему моему интерфейсу.

В настоящее время я занимаюсь:

litWeight.Text = person.Weight.ToString("0.00");

повсюду. Теперь я точно знаю, что в нескольких случаях и с подозрением относился ко многим другим, что клиент, скорее всего, захочет получить значения 3d.p. в будущем.

Есть ли какой-нибудь шаблон, который я могу использовать для обработки форматирования этого свойства Weight (и других свойств; не только десятичных, возможно, дат и т. Д.), Чтобы я мог иметь это форматирование в одном месте?

Я знаю, что можно использовать строку форматирования в webconfig или написать несколько методов расширения в пользовательском интерфейсе, но это не очень элегантные решения.

Было бы неплохо иметь некоторые объекты форматирования, которые связаны с моими объектами, поэтому очевидно, какой форматер использовать.

Спасибо

Andrew

Ответы [ 3 ]

2 голосов
/ 10 декабря 2008

Самое простое решение - создать служебный класс со статическими методами, которые соответствующим образом форматируют различные типы значений и вызывают их. Например:

litWeight.Text = Utility.FormatWeight(person.Weight);
1 голос
/ 10 декабря 2008

Вы можете создать очень простой пользовательский элемент управления - производный от метки или подобного, - который отвечает исключительно за отображение строки весов, поэтому у вас будет:

weightValue.DisplayValue(person.Weight);

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

Базовая версия может быть:

public void DisplayValue(decimal weight)
{
    this.Text = weight.ToString("0.00");
}
1 голос
/ 10 декабря 2008

Разве вы не можете добавить метод к объектам для форматирования тем? Затем каждый объект может делегировать объекту «стратегия», чтобы выполнить фактическое форматирование.

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

РЕДАКТИРОВАТЬ: Комментарий был таким, что помещает код представления в слой домена. Верно, поэтому примените стандартное исправление для всех проблем проектирования; добавить еще один слой косвенности:)

Возможно, вы не хотите иметь полный MVC, но концепция View и Model все еще кажется подходящей. Возможно, для каждой сущности определите класс View, чтобы PersonView сохранял ссылку на объект Person и имел свойства format_weight и т. Д. Для каждого интересующего его свойства Person? Он все равно должен использовать шаблон стратегии для фактического форматирования.

Итак, ваш пример будет

PersonView pv = new PersonView(person)

litWeight.Text = pv.format_weight();

(прошу прощения за синтаксические ошибки, я не говорю на C #)

Если вы хотите, вы можете сделать так, чтобы PersonView был заменен Person, либо переопределив методы / свойства и разделив его на Person, на который делается ссылка, либо унаследовав его от Person при создании PersonView?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...