Какова лучшая практика в этой ситуации? - PullRequest
3 голосов
/ 03 ноября 2011

Я просто писал небольшую веб-страницу asp.net, чтобы отобразить коллекцию объектов путем привязки к повторителю, когда это пришло в голову.

По сути, класс, который я создал, давайте назовем его 'Test ', имеет свойство price, являющееся целочисленным типом данных (игнорируйте ограничения использования этого типа, я просто использую его в качестве примера).Однако я хочу отформатировать это свойство, чтобы оно отображало валюту и правильные десятичные разряды и т. Д.

Рекомендуется ли иметь в классе функцию, которая возвращает отформатированную строку для объекта, или было бы лучшеиметь функцию в конце моей веб-формы, которая работает с объектом и возвращает отформатированную строку?

Я слышал раньше, что класс должен содержать все свои относительные функции, но я также слышал, чтопрезентация должна храниться в «уровне представления» в моем N-уровневом приложении.

Каков наилучший подход в моей ситуации?(и извинения, если я не объяснил это достаточно ясно!)

Спасибо!

Ответы [ 4 ]

2 голосов
/ 03 ноября 2011

На мой взгляд, оба варианта действительны с точки зрения ОО.

  • Поскольку значение равно цене (которая, как правило, имеет неправильный тип данных), имеет смысл поместить форматирование в класс данных. Это не является чем-то специфичным для веб-интерфейса, и, если вы разрабатываете другой тип пользовательского интерфейса, вам, скорее всего, потребуется это форматирование снова.

  • С другой стороны, это проблема презентации, поэтому также имеет смысл поместить ее на уровень презентации.

1 голос
/ 03 ноября 2011

Хотя это не ООП-подход, на мой взгляд, сейчас хорошее время для метода расширения. Назовите его .ToCurrency(), который имеет формат валюты ... это можно взять из файла Web.Config, если хотите.

Редактировать

Чтобы уточнить, я бы просто назвал .ToString("your-format") (конечно, это может быть так же просто, как .ToString("C") для вашего конкретного вопроса) в методе расширения. Это позволяет вам изменять формат всего интерфейса в одном месте. Я считаю, что это очень полезно при работе с форматами DateTime в веб-приложениях.

1 голос
/ 03 ноября 2011

Для общего ООП-объекта объект не должен раскрывать детали реализации. Я предпочитаю интерпретировать это как «избегайте сеттеров и геттеров, когда это возможно».

В контексте вашего вопроса я предлагаю использовать метод getPriceDisplay (), который возвращает строку, содержащую отформатированную цену.

Фактическая реализация форматирования скрыта в деталях реализации. Вы могли бы предоставить универсальную функцию для форматирования, использовать какой-либо внутренний вызов или что-то еще. Эти детали не должны иметь никакого значения для потребителя объекта «Тест».

0 голосов
/ 03 ноября 2011

Не будет .ToString("C"); делать работу? Это было бы на уровне представления, который я себе представляю.

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