
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.
Собственно вопрос, может кто то уже использовал данный метод, или хотел но отказался по ряду каких то причин, какие подводные камни могут всплыть при использовании такого подхода?
Ну ты у меня спрашивал) и я тебе ответил) Во вьюмодель особенно в базовую должны прокидываться минимум зависимостей. Если зависимостей много пиши классы юзкейсов(которые интеракторы) и прокидывай сервисы туда, а не в базовую вьюмодель, а во вьюмодели уже эти интеракторы прокидывай. В любом случае как по мне гораздо правильнее все делать через конструктор(+есть хоткеи для генерации конструкторов в классах) потому как это важно для возможностей тестирования


Vladislav
02.07.2018
07:52:11

Кита
02.07.2018
07:54:05

Google

Max
02.07.2018
07:54:59

Кита
02.07.2018
07:59:29

Kirill
02.07.2018
08:10:06

Кита
02.07.2018
08:21:05

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

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

Кита
02.07.2018
08:27:51
developer friendly - это вообще последнее о чем надо думать

Kirill
02.07.2018
08:31:55

Кита
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
Это значит что ты будешь настраивать моки для тестового проекта каждый раз когда у тебя добавляется новый сервис и регистрировать их в ioc.

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

Kirill
02.07.2018
08:39:36

Bonart
02.07.2018
08:46:34

Kirill
02.07.2018
08:47:01

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

Кита
02.07.2018
08:49:34

Sasha
02.07.2018
08:52:03

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

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

vladimir
02.07.2018
08:54:36

Google

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

Kirill
02.07.2018
08:55:20

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

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

Kirill
02.07.2018
08:57:01

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

Sasha
02.07.2018
08:58:18

vladimir
02.07.2018
08:58:25
event

Kirill
02.07.2018
08:58:40

Sasha
02.07.2018
09:00:13

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

Kirill
02.07.2018
09:15:10

Julius
02.07.2018
09:16:24

Kirill
02.07.2018
09:19:03

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

Google

Кита
02.07.2018
09:19:45

Julius
02.07.2018
09:24:34

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

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

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

vladimir
02.07.2018
09:39:39

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

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

vladimir
02.07.2018
10:04:36

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
я на хабре читал комменты, с других кросплатформенных тулзах

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

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#?