169 похожих чатов

Привет. Не подскажете, есть приложение погоды, mvvm. Есть желание прикрутить смену

единиц измерения Цельсий/Фаренгейт, вот это все.

На каком уровне архитектуры делать преобразование? Чет не могу понять как разграничить: это уже отображение или ещё бизнес-логика. Я вообще хотел сразу и преобразование делать, и единицы измерения к строке конкатенировать.

16 ответов

11 просмотров

Просто сделай сервис который будешь вызывать на экране

Отображение скорее

эм ну репа берет настройку из локали / префов (строку отдает к примеру или другой примитив), во вьюмодели ты опираешься на настройку и преобразуешь температуру, вью пох

У нас хранение и получение данных в чем? 1. Всегда в цельсиях. Настройка выбранного типа хранится в модели, преобразование из него в нужный к показу в прокладке. 2. В чем скажут и храним и получаем. Тогда все в модели, преобразований нет

Kirill- Автор вопроса

Я могу запросить у апи какие угодно единицы, но проблема в том что я их кэширую, может случится так, что пользователь сменит единицы, а из Кеша подтянутся старые данные в старых единицах. Тогда придется кеш чистить и данные заново запрашивать при каждой смене единиц. Поэтому решил делать преобразование оффлайн без перезапроса. И у меня из бд данные тянутся через flow, можно же как-то вытянуть из preferences flow, у префов же есть колбек на onChanged, чтобы это все асинхронно работало по смене единицы сразу?

конечно есть

Хм. С одной стороны преобразование элементарное и фиксированное по формуле. И можно забить вообще на то что апи умеет в фаренгейты, брать цельсия а извращенцам пересчитать перед показом Но при строгом ТЗ это не по фэншую и костыль, поскольку из за округлений фаренгейты могут показать на градус туда сюда иное чем дает апи. Значит при смене запрашивать новое, чистить кеш и т.д.

Kirill- Автор вопроса

Можно изначально запрашивать в фаренгейтах, так точнее будет. Я кстати не помню как там приходит, мб и Цельсий идёт с точностью пары знаков после запятой, тогда вообще не важно. Ну и мне кажется что минимизировать все эти перезапросы как-то красивее что ли, быстрее работать будет и в случае отсутствия инета данные не потеряются. Вообще тз нет, я проект для себя пилю, поэтому сделать перезапрос и чистку слишком просто, хочу все таки немного на других вещах руку набить. Как я сейчас вижу, нужно в модель прокидывать flow с данными о выбранных единицах, преобразовывать, и тогда встаёт вопрос как к строке конкатенировать само обзначение единиц измерения. Если сразу же во время преобразования, то нужно объект изначальный менять, ибо там все поля как int float и ТД. Либо можно в саму вью дальше прокинуть этот flow с единицами измерения, и там уже как-то соединять при выводе. Вот не знаю какой из вариантов чище.

эм ну репа берет настройку из локали / префов (строку отдает к примеру или другой примитив), во вьюмодели ты опираешься на настройку и преобразуешь температуру, вью пох (2)

Kirill- Автор вопроса

Это я понял, как мне потом единицы измерения к строке присоединить? Создать новую сущность для вью слоя, где все подобные поля станут стрингами, чтобы сразу во время преобразования присоединять и сразу же в этом месте, либо делать конкатенацию непосредственно во вью перед setText, но зато останется единая data-сущность и для репы и для вью слоя.

Во вьюмодели присоединяй, вьюшка просто строку получает Либо если тебе нужно где-то отдельно, то пару / сущность отдавай из вьюмодели

Kirill- Автор вопроса

В том и дело что я во вью из вьюмодели целый лист объектов прокидываю, и те самые преобразованные данные в нем это не стринги. Мне то ниче не нужно :), я с точки зрения чистоты архитектуры интересуюсь, чтобы потом это все максимально масштабируемо было

Да какая разница стринги не стринги

Kirill- Автор вопроса

Если я отдельный дата класс создам, в котором эти данные будут стрингами, он по сути становится немутабельным и я никак не смогу дальше с этими цифрами работать (а так ли оно это мне нужно во вью?)

так либо мутируй либо отдавай новые

Мне понравился подход тут урок 5. Фрагмент/активити только отображают дату. Хранение/преобразования/подготовка к отображению во вьюмодели. В xml фрагмента <data> <variable name="fragmentViewModel" type="com.example.android.guesstheword.screens.game.FragmentViewModel" /> </data> и во вьюхах можно писать android:text="@{fragmentViewModel.temperatureString}" отображая подготовленную строку Ну и во вьюмодели температуру хранить в цельсиях в лайвдате, а переменную temperatureString определить через Transformations.map от лайвдаты

Похожие вопросы

Обсуждают сегодня

@Aiwan что такое база образца?
Alexey
27
Не многие знают, а кто знает, тот уже успел забыть, что в далёком 2004 году эта игра произвела настоящий фурор, настолько революционной была технология, применяемая для её соз...
ICCID
4
Хотя у меня сейчас есть более сложная задача, вот её думаю: как объяснить челу переходного возраста противоположного полу, обучающегося в польском колледже (а-ля наш техникум)...
Вячеслав Кузьменко
15
коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
Добрый день Хочу начать обучение языку, не являюсь представителем it, буду благодарна за помощь, совсем пока не понимаю ничего) Подскажите, пожалуйста, где можно начать первы...
Sara Lala
30
верно что я могу удалить эти addq и subq т.к. со стеком никакого взаимодействия нет (исключая call)?
Michael
16
Hi Everyone! To all Are you Looking for Interview Support at the Lowest Price? Look no further! Then contact us We offer Interview Support for a low cost variety of technol...
Rambabu Nallamilli
3
средствами IBX как-то можно выполнить запрос insert ... returning?
Igor
31
всем привет. подскажите: вот по русски называется "прошивка для контроллера". или "бинарь" могут сказать. или "дамп". А как по английски это называется? Я хочу попытаться по...
Павлик Ливаткин
4
А если изначально бот работал так : есть сайт онлайн школы. У каждого ученика свой кабинет. Где он авторизуется по своим данным. И уже в кабинете, на самом сайте делает оплату...
Денис 💡 Фрилансер
13
Карта сайта