![]() |
Перевод ставок в центы, MODEL vs COMMAND
Добрый день, возник небольшой спор.
есть некая игра - казино, данные (ставки, баланс и тд) приходят с сервера в целым числом в центах: 1, 10, 100, 1000. Соответственно во вьюшке их нужно отобразить в дробных: 0.01, 0.1, 1, 10. Так спор возник из того что в каком месте их преобразовывать варианты: 1) непосредственно вьюка получает из модели , в модел гетеры которые отдают дробные значения, модель хранит данные в центах, 2) преобразовывать при получении ответа от сервера в дробные и обратно при запросе к серверу переводить в центы, в модели хранятся дробные данные. |
Я у себя на Java сервере сразу хранил информацию о деньгах в формате: 5.49. Эту же информацию отправлял на клиент, а там уже решал, как показывать: с центами или без.
А, в твоем случае, преобразовывать данные нужно во вьюшке (в том случае, если математика на клиенте оперирует теми же значениями: 1,10,100,1000) |
Что мешает в модель встроить еще один метод типа: getFractialSum() ну или типа того, который при необходимости вернет дробное число?
так модель сразу будет отдавать данные в нужном формате, а хранить в том, в каком они пришли |
Если абстрагироваться от вопросов взлома (т.к. модель в таких приложениях вообще не должна ничего хранить, точнее дата лаер должен быть на сервере), то модель хранит данные в том виде в котором ей удобно, но "наверх" отдает в том виде в котором требуется. Т.е. вар. 1. Это еще и укрепляет контроль за данными т.к. вьюха не имеет данные во внутреннем представлении модели, следовательно не может случайно их изменить. Очень хороший вариант, ИМХО.
|
Данные должен форматировать для показа view. Перевод из целых в дробные это один из видов форматирования.
|
Мое ИМХО.
Есть сервер, есть клиент. Клиент - самостоятельное отдельное приложение. Да, если есть возможность что-то изменить на сервере, то лучше сделать там, и сразу отдавать корректные данные. Но если так возможности нет... В моделе хранятся определенные данные. Эти данные должны быть унифицированы для всего приложения. С другой стороны получаемые и отправляемые данные могут отличаться от того, что реально отображается в приложении. Да, можно ввести систему коэффициентов (и если этот коэффициент отсылается при инициализации приложения от сервера, то храниться он должен в моделе и использоваться только моделью для расчетов, т.е. примерно то, что посоветовал goodguy), но это означает что при каждом отображении нужного значения мы переводим из одной системы в другую. А если присваиваем новое значение к.-л. переменной, то должны учитывать кто это изменение инициализировал (клиент или сервер) чтоб не запутаться в расчетах. Т.е. система коэффициентов внутри модели - штука допустимая, но чреватая ошибками. Если бы приложение использовало унифицированную систему расчетов, то таких проблем бы не было. Выход - переводить в нужную систему на входе и на выходе, т.е. при парсинге полученных значений от сервера и при отправке на сервер, т.е. в специальном "модуле", предназначенном для общения с сервером. |
Цитата:
|
Это не преобразование типов, в модели данные остаются неизменными. Это отображение.
Добавлено через 1 минуту Будет ли он анимировать или отделять разряды пробелом или показывать градус цельсия в виде градусов фаренгейта, разницы нет. Добавлено через 2 минуты Цитата:
Пример, надо отобразить данные в центах, долларах, рублях, драхмах и т.д., в зависимости от выбора пользователя, локали, еще чего-нибудь. |
Имхо, перевод в различные единицы, это дело вьюхи или вообще утилитных классов.
Модели должно быть все равно какой линейкой ее измеряют. |
1. Модели наверно удобнее считать суммы и статистику всякую в центах. Значит пусть в центах и хранит
2. В каждой вьюшке копипастить логику перевода дробных в целые и наоборот глупо. Значит делаем класс-утилиту, которым пользуется вьюшка, берущая данные из модели. |
| Часовой пояс GMT +4, время: 21:25. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.