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

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

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

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

16 ответов

13 просмотров

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

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

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

У нас хранение и получение данных в чем? 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 от лайвдаты

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

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

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
32
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
25
Книга Юрова В.И пойдёт для обучения?
Botsman
24
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
> Примечательно, что новый владелец удаляет из GitHub любые жалобы, указывающие на подозрительную активность или смену владельца, и, видимо, рассчитывает на то, что пользовате...
Alex Sherbakov
1
Hey there Which is the best Linux destro for developers (coding)? To my research on reddit, they said Linux mint is good for mid level spec and Ubuntu for high Lev hardwar...
Wiz 🪄
11
И ещё вопрос: можно ли типа как на дос как-то запариться и с помощью прерываний выводить текст, вместо функции printf ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
34
а мы ещё не созрели до того, чтобы создать отдельный чатик про настройку редакторов?
Cheese Syrowiecki
16
Всем привет! У меня почему-то по-разному отображается TListView в Debug и Release режимах (FireMonkey)! При запуске под Win приложения TListView заливается программо. в Debug ...
Александр COM
8
Ладно, ещё тупого спрошу. Код должен банально вывести значение регистра на консоль, на деле же не выводя ничего, просто оставляя нерабочую консоль (открыта, ничего не написан...
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
25
Карта сайта