@xamarin_russia

Страница 450 из 619
Vladislav
02.07.2018
07:50:19
Слушай Сова, откуда у тебя столько времени на активность? ты тут вообще круглые сутки

Кита
02.07.2018
07:50:34
Всем привет. Вопрос к гуру DI (dependency injection). Я во всех проектах использую стандартный DI через конструктор, но на практике столкнулся с проблемой, если в проекте к примеру 100 VM и каждая наследуется от ViewModelBase и по каким то причинам во ViewModelBase понадобилось добавить новую иньекцию, то придется в каждой VM добавлять иньекцию в конструктор и затем передовать в base. Это очень не удобно. В одном из проектов видел, что во VM передаются не иньекции, а единственный параметр IContext, с единственным методом Reslove. Таким образом даже если во ViewModelBase понадобиться новая зависимость, то достаточно будет прописать одну строчку в конструкторе а не переписывать все уже существующие ViewModel. Собственно вопрос, может кто то уже использовал данный метод, или хотел но отказался по ряду каких то причин, какие подводные камни могут всплыть при использовании такого подхода?
Ну ты у меня спрашивал) и я тебе ответил) Во вьюмодель особенно в базовую должны прокидываться минимум зависимостей. Если зависимостей много пиши классы юзкейсов(которые интеракторы) и прокидывай сервисы туда, а не в базовую вьюмодель, а во вьюмодели уже эти интеракторы прокидывай. В любом случае как по мне гораздо правильнее все делать через конструктор(+есть хоткеи для генерации конструкторов в классах) потому как это важно для возможностей тестирования

Кита
02.07.2018
07:54:05
это типа доп класса, который тянет нужные зависимости, который потом во vm резолвится?
Это не доп класс, это вообще класс бизнес-логики, в котором описаны юзкейсы и которые не должны зависеть от UI терминов. Вопрос как их биндить правильно с вьюмоделью и прокидывать события туда обратно.

Google
Кита
02.07.2018
07:59:29
Kirill
02.07.2018
08:10:06
Ну ты у меня спрашивал) и я тебе ответил) Во вьюмодель особенно в базовую должны прокидываться минимум зависимостей. Если зависимостей много пиши классы юзкейсов(которые интеракторы) и прокидывай сервисы туда, а не в базовую вьюмодель, а во вьюмодели уже эти интеракторы прокидывай. В любом случае как по мне гораздо правильнее все делать через конструктор(+есть хоткеи для генерации конструкторов в классах) потому как это важно для возможностей тестирования
Я согласен, что в базовой VM не должно быть много зависимостей, но когда у тебя всего одна зависимость в базовой vm и тебе нужно прокинуть вторую, то тебе все равно придется в каждой из 100 vm добавить ее и прокинуть в базовый класс. То есть всего добавление одной дополнительной зависимости затрагивает как минимум 100 классов

Кита
02.07.2018
08:21:05
Я согласен, что в базовой VM не должно быть много зависимостей, но когда у тебя всего одна зависимость в базовой vm и тебе нужно прокинуть вторую, то тебе все равно придется в каждой из 100 vm добавить ее и прокинуть в базовый класс. То есть всего добавление одной дополнительной зависимости затрагивает как минимум 100 классов
ну это не проблема. Проблема в лени я так понимаю. Это надо в себе изживать) Ленивый программист это конечно хорошо - он придумает хорошее решение которое будет экономить кучу его времени, но не до фанатизма же, излишняя лень до добра не доводит)

Max
02.07.2018
08:22:09
Излишнюю лень обычно не оттестировать

Kirill
02.07.2018
08:23:35
ну это не проблема. Проблема в лени я так понимаю. Это надо в себе изживать) Ленивый программист это конечно хорошо - он придумает хорошее решение которое будет экономить кучу его времени, но не до фанатизма же, излишняя лень до добра не доводит)
мейби, но менять в 100 классах шаблонные изменения, это уж увольте, мазахизм. Сидишь, копировать - вставить, и так далее. А завтра приходит руководство и выдает новую, задачу, в которой опять нужно что то в базовую VM прокидывать, и понеслось сначала. Мне кажется, должно быть более developer friendly решение.

Излишнюю лень обычно не оттестировать
Ну, как по мне, именно в програмирование лень - двигатель прогресса и автоматизации.

Kirill
02.07.2018
08:31:55
не совсем так как по мне. Пользовательская лень - да. Но далеко не программиста
Я говорю именно про лень программиста, например CI. Можно сказать, это экономит время и деньги, но все сводиться к лени как не крути

Кита
02.07.2018
08:32:29
Kirill
02.07.2018
08:32:41
Выполнение однотипных задачи нужно автоматизировать вот о чем я говорю

Google
Кита
02.07.2018
08:33:24
Я согласен что однотипные задачи - скучные и от того их не хочется делать.

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

Зависимости прокидывают не просто так. А для того чтобы ты мог не завязываться на IoC в тестовом фреймворке и писал юниттесты, тестировал маленькие кусочки твоей программы

Kirill
02.07.2018
08:35:41
Я согласен что однотипные задачи - скучные и от того их не хочется делать.
У меня свое мнение, если я вижу, что тривиальную задачу можно автоматизировать, я автоматизирую или ищу другой способ. Если бы человечество жило по принципу «да, это скучная задача, но куда деваться» мы бы до сих пор отправляли письма голубиной почтой.

Кита
02.07.2018
08:36:30
Так а каким образом IContext завязывается на каком то IoC??
у него есть метод resolve. resolve любого инстанса любого интерфейса.

Это значит что ты будешь настраивать моки для тестового проекта каждый раз когда у тебя добавляется новый сервис и регистрировать их в ioc.

Sasha
02.07.2018
08:38:41
Всем привет, можите посоветовать, можно ли сделать что-то типа ивента который будет ждать пока в андроид части пройдет метод, чтобы потом выполнить код в ПСЛ?

Bonart
02.07.2018
08:47:58
Тогда нарушится DRY
Нет. Наследование реализаций - не единственный, не главный и не частый способ избежать дублирования

Кита
02.07.2018
08:49:34
Это можно сделать с помощью тасков. Копай в сторону TaskCompletionSource
а можно просто то что выполняется в дроидной части обернуть в таск и прокинуть в шаред делегат, который этот таск вернет и заawaitить его. но и TaskCompletionSource тоже можно

Sasha
02.07.2018
08:52:03
Это можно сделать с помощью тасков. Копай в сторону TaskCompletionSource
У меня метод запускается не из ПСЛ, но должен возвращать значение в ПСЛ, не знаю как сделать через TaskCompletionSource

vladimir
02.07.2018
08:52:08
TaskCompletiomSource как бы и нужно

канонично

Kirill
02.07.2018
08:53:26
канонично
Тогда события. Создаешь интерфейс с событием, пишешь реализацию в платформозависимом проекте, и вызываешь это событие когда тебе нужно, а в PCL подписываешьсы на него

Google
Sasha
02.07.2018
08:55:09
TaskCompletiomSource как бы и нужно
типа у меня процесс гугл аутентификации: открывается ссылка где пользователь вводит логин пароль, при успешной аутентификации формируется юрл, которое затем перехвачуеться на нативной части, и с юрл получаю токен

Kirill
02.07.2018
08:55:20
получается да, TaskCompletionSource + event
Можно уже без TaskCompetionSource если используешь события

Bonart
02.07.2018
08:55:28
На пример?
Композиция. Вместо наследования реализации - ссылка на объект с выделенной общей функциональностью.

vladimir
02.07.2018
08:56:10
если оно не из общего кода вызывается

Bonart
02.07.2018
08:57:48
Это усложняет код
Напротив - теперь в 100 классов из-за одной зависимости ничего вносить не надо. Также нет ограничений на единственность класса с общей функциональностью.

Sasha
02.07.2018
08:58:18
кстати да, что-то я перемудрил
Тогда как лучше это сделать?

vladimir
02.07.2018
08:58:25
event

Sasha
02.07.2018
09:00:13
event
ок спасибо

vladimir
02.07.2018
09:00:33
Kirill у спасибо :P

Julius
02.07.2018
09:08:42
Здравствуйте. Есть добавление из Jsonа элементов в Layout, Тут реализация https://gist.github.com/jarakys/fd42c510b057e7b599ab1da4c7942a2c Проблема заключается в том, что в Child оно то добавляется, но отрисовываться не хочет, как заставить его рисоваться ?

vladimir
02.07.2018
09:13:20
откуда вызывается OnLoadJSON? точно оно вызывает absolute.Children.Add(view);? не пустой ли список? пробовали вызывать там внутри для теста просто absolute.Children.Add(new BoxView() {BackgroundColor = Color.Red}); ?

Julius
02.07.2018
09:13:58
Список Children не пуст, вызывается OnLoadJSON при нажатии кнопки

vladimir
02.07.2018
09:15:02
не Children, а deserializedList

Julius
02.07.2018
09:16:24
А что за лейаут? И в json лежат классы, которые от View наследуются?
AbsoluteLAyout. Да, там лежат классы которые наследуются от View, так-то они отрисовываются, но именно когда я гружу их из JSON отрисовки нет

Kirill
02.07.2018
09:19:03
AbsoluteLAyout. Да, там лежат классы которые наследуются от View, так-то они отрисовываются, но именно когда я гружу их из JSON отрисовки нет
Вообще не отрисовываются или только один из них? Возможно действительно друг поверх друга отрисовываются. Ну и вообще точно добавляются? список не пуст?

vladimir
02.07.2018
09:19:41
а пример одного view из этого json можно?

Google
Кита
02.07.2018
09:19:45
Композиция. Вместо наследования реализации - ссылка на объект с выделенной общей функциональностью.
ссылку на этот объект ты как получишь? или я немного не понял что ты предлагаешь. Не создавать никаких базовых вьюмоделей и не наследоваться от них? просто реализовывать может какой базовый для всех интерфейс и прокидывать зависимости только те которые нужны? Так в том то и дело что в 100 вьюмоделей нужна 1 зависимость. Она нужна всем. И человеку просто лень 100 раз перегенеривать конструктор

Julius
02.07.2018
09:24:34
а пример одного view из этого json можно?
https://gist.github.com/jarakys/cde91676c07722930efbf2b404995bfd

vladimir
02.07.2018
09:25:43
так вы не задаёте свойства LayoutFlags и LayoutBounds

Julius
02.07.2018
09:26:41
Да, но когда я добавлял эти фигуры на Layout я тоже не указывал эти свойства и оно рисовало как надо

Kirill
02.07.2018
09:26:49
Не отрисовывается вообще или только один элемент?

Julius
02.07.2018
09:27:11
Вообще ни один эелемент из списка

vladimir
02.07.2018
09:27:45
и попробуйте создать свой элемент вручную и добавить его

Admin
ERROR: S client not available

Julius
02.07.2018
09:28:25
вы ещё не попробовали совет из моего первого ответа
absolute.Children.Add(new BoxView() {BackgroundColor = Color.Red}); - пробовал, оно заработало

Kirill
02.07.2018
09:28:31
Могу посоветовать попробовать не создавать JSON-ном нужные объекты, а пусть там хранится промежуточный, парсить его и уже в коде создавать нужный CircleControl, задавать ему свойства и уже добавлять в лейаут. Да так и правильнее будет

vladimir
02.07.2018
09:28:33
скорее всего оно не рисует из-за отсутствия WidthRequest и HeightRequest

Kirill
02.07.2018
09:29:20
absolute.Children.Add(new BoxView() {BackgroundColor = Color.Red}); - пробовал, оно заработало
Дебаггером смотрел - правильные объекты создаются?

vladimir
02.07.2018
09:30:02
Julius
02.07.2018
09:31:37
Может быть проблема в том, что я в джсон добавляю только те свойства которые определены в моей фигуре, а остальные игнорирую ? https://gist.github.com/jarakys/0700246212b9d233508eb58cd2b39180

т.е. те которые приходят из Вьюхи по наследованию я просто отбрасываю

vladimir
02.07.2018
09:33:32
вообще лучше делать как выше предложили: парсить свой json, потом воздавать с этими данными уже View

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

в любом случае попробуйте вручную добавить свою View, как сделали с BoxView а также попробуйте добавить обязательные свойства LayoutFlags и LayoutBounds иначе зачем вообще AbsoluteLayout, если им по сути и не пользуетесь

Google
Kirill
02.07.2018
09:38:27
в любом случае попробуйте вручную добавить свою View, как сделали с BoxView а также попробуйте добавить обязательные свойства LayoutFlags и LayoutBounds иначе зачем вообще AbsoluteLayout, если им по сути и не пользуетесь
LayoutFlags и LayoutBounds вообще ни разу не обязательные) Он и так отрисовывает все элементы, просто по умолчанию размещает их в верхнем левом углу с их размерами. Проблема явно не в них

vladimir
02.07.2018
09:39:39
LayoutFlags и LayoutBounds вообще ни разу не обязательные) Он и так отрисовывает все элементы, просто по умолчанию размещает их в верхнем левом углу с их размерами. Проблема явно не в них
тогда ещё раз повторю, что нужно попробовать отрисовать вручную свою View и если не отрисуется, то, возможно, проблема в отсутствии WidthRequest и HeightRequest

Julius
02.07.2018
09:44:32
Добавли мой View вручную, он отобразился, просмотрел его WidthRequest он равен минус один, точно так же и у View из JSON

vladimir
02.07.2018
09:46:43
тогда сравнивайте все свойства у вручного созданного View и у распарсенного

Kirill
02.07.2018
09:56:40
Добавли мой View вручную, он отобразился, просмотрел его WidthRequest он равен минус один, точно так же и у View из JSON
Из кода создавай вьюху проставляй ей свойства, которые в JSON и добавляй её в лейаут и всё

Uiiuviiw
02.07.2018
10:00:16
Всем привет! Скажите, почему все ругают xamarin? Какие у него недостатки по сравнению с нативом и другими, ему подобными инструментами?

Uiiuviiw
02.07.2018
10:05:41
Просто я из мира вэб, в котором много решений для нативной разработки, хотя лично я выделяю только одно - angular. Но почему-то у создателей nativescript не хватило фантазии написать подобие xamarin.forms и необходимо все шаблоны покрывать ифами. Для меня не разница важна скорости в пределах от 0,01 до 0,1, а важны нервы, запас которых дико расходуется, когда пишешь на чем-то кривом. И вот я какой день выбираю на чем именно написать первое приложение и так и не могу определится, так как все советуют что-то, но не могут внятно объяснить, почему именно они это советуют. То есть они советуют только потому, что именно им это показалось лучше.

vladimir
02.07.2018
10:05:47
если хорошо разобраться, то, внезапно, xamarin тоже натив

Uiiuviiw
02.07.2018
10:06:12
я на хабре читал комменты, с других кросплатформенных тулзах

Uiiuviiw
02.07.2018
10:06:46
про второе. А разве есть разница?

разве это не одина платформа?

Julius
02.07.2018
10:07:03
Я решил проблему, если кому интересно то какая-то ерунда с цветом была, цвет был черный, R =0 G=0 B=0 A =1, а в JSON A = 0, т.е прозрачность что ли, поставил цвет в OnDraw в саомй отрисовке и теперь все ок

Спасибо за помощь

Uiiuviiw
02.07.2018
10:08:58
и под нативом я имел ввиду родной натив.

vladimir
02.07.2018
10:10:28
разве это не одина платформа?
платформа? я теряюсь в терминологии Xamarin - для нативной разработки, есть почти всё то же, что и в нативных языках типа java или obj-c, пишется, соответственно для каждой платформы своё Xamarin.Forms - обёрта для разных платформ с общим описанием для UI (именно описанием, UI будет не одинаковым, а нативный для каждой платформы опять же)

и под нативом я имел ввиду родной натив.
а что делает родной натив родным?

если я из C# кода вызываю библиотеку C в ведре - это нативно? C нативно для ведра? или java? а почему java нативней C#?

а что делает родной натив родным?
по-русски вообще жесть как звучит: что делает родную родину родной?

Страница 450 из 619