Обновить
14
0
Иван@IL_Agent

Программист

Отправить сообщение
Что же в WinForms кросплатформенного? Наличие кое-какого порта под Mono? Xaml, благодаря Xamarin и разным проектам, вроде Avalonia, выглядят более кросплатформенно.
Меня вот эта фраза смутила:
code behind… всегда будет оставаться пустым, если используется чистый MVVM

Использование code behind никак не противоречит MVVM, если он используется для вьюшной логики, т.е. не зависящей от модели. Например, если видимость зависит от состояния модели (наличие заказов заказов у клиента), то да, оно будет во вью-модели как IsVisible (или вообще через конвертер вычисляться). А если видимость зависит от размера окна, то во вью-модели ей делать нечего.
А из вашей же фразы можно сделать вывод, что если code behind используется, то MVVM «грязный». И да, некоторые «умельцы», рассуждая так, доходят до того, что прокидывают ссылку на вью во вью-модель, пилят логику с ней там и хвастаются, что у них code-behind пустой :).
Не понял первую фразу. Что значит “чистый mvvm”? И где же размещать логику вьюхи, не зависящую от модели, как не в code behind?
Кто-то делает gui-формочки на unity 3d?
Отличие асинхронности от многопоточности хорошо проилюстрюрованно. А вот абзац про параллелизм написан сумбурно и с ошибками.
Вроде как на Xamarin можно без мака обойтись, только айфон нужен.
Тогда, как указал коллега выше, это IObservable и rx.
Зачем ваш ISignal, когда есть TaskCompletionSource?
Эх, лучше wpf доводили… А так, боюсь, что uwp постигнет забвение, как и все остальные разработки, с выходом ккой-нибудь очередной версии винды (
Увы, непонятно, зачем нужна uwp, когда мобилки на винде мертвы. Под десктоп и так есть на чем разрабатывать приложения, и работать они будут не только в 10-ке, не только в песочнице и не только через магазин. Да и в магазин можно публиковать не только uwp.
Считаю, что в идеале бизнес-слой не должен ни использовать DbSet как репозиторий, ни ссылаться на EntityFramework вообще. Это должно остаться в конкретной реализации DAL.
Отлично, ждём!
Когда ожидать поддержку uwp?
Все варианты с явным приведением типов — неправильные.
1. Мне особо и не приходилось сталкиваться с кодогенерацией прежде, поэтому ничего интересного рассказать не могу. Roslyn — первое, что приходит в голову, т.к. очень популярен сейчас. Нашёл вот такой пример https://daveaglick.com/posts/compiler-platform-in-t4, из него можно идею стянуть.

2. Мы получим метод Visit(IOtherFigure otherFigure). И эту самую otherFigure придётся кастить руками к чему-то. Так ведь?
Как будет выглядеть интерфейс IFigure?
Спасибо за развёрнутый комментарий.
Предположу, что под «отпиныванием от ООП» вы имели в виду сам факт, что описываемый паттерн предлагает альтернативу пополнению базового интерфейса IFigure функциями на все случаи жизни (что более «естественно» и, действительно, в ряде ситуаций является лучшей альтернативой).

Да, я тоже полагаю, что речь об этом. Но визитор никак не выходит за рамки ООП, поэтому никакого «отпинывания» тут нет.
, в конкретной ситуации применение Визитора может быть, действительно, не самой удачной идеей.

Мой пример про 3 фигуры — упрощённый. Я не призываю в первой же лабораторке по полиморфизму прикручиваться визитор ))
Где же вы увидели отпинывание от ООП? И какую модель, на ваш взгляд, проще поддерживать?
Спасибо.
1. По-моему, здесь нет связи: обход структуры — это одна задача, обработка элемента — другая. Визитор — это выбор обработки конкретного типа элемента.
2. Первый вариант мне не нравится, т.к. фигуры получаются жирными и не переиспользуемыми в других моделях. Но этот вариант имеет полное право на жизнь и может быть вполне уместен.
Второй вариант — тип у фигуры и так есть, его можно получить методом GetType :). Т.е. это всё тот же даункастинг. Главный недостаток даункастинга, а также словарей, рефлексии, о которых здесь многие пишут — это то, что мы выбираем метод «руками» в рантайме, что чревато ошибками. К этому следует прибегать, только когда по-другому нельзя. Визитор — это статика и проверка при компиляции.

Вы же сами пожертвовали OCP, заметив, что расширения через новые типы фигуры можно и не ждать.

OCP нарушается, но если у вас есть возможность править визитор, то, благодарая этому нарушению, при добавлении новой фигуры вы не забудете написать методы для её обработки. Если же не можем править — то да, решение становится нерасширяемым в направлении новых фигур.
А в отличие от абстрактного «нового функционала» это — наиболее вероятный кейс.

Не факт, зависит от задачи. Если так — то можно модель «перевернуть» — сделать визиторами фигуры )).
IoC-контейнер + interface ISquareCalculator where T: IFigure. Получается рафинированный SOLID без единого нарушения.

Как вы будете резолвить ваш калькулятор, не зная T?

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

Специализация

Разработчик мобильных приложений, Архитектор программного обеспечения
Старший
Kotlin
Dagger 2
Разработка под Android
RxJava 2
MVVM
Разработка мобильных приложений
Android studio
Coroutines
Flow
Android SDK