Friday, June 5, 2020

И вот наконец

Я юзаю VS 2019 (Community Edition), ибо "так получилось". Правда, скачан свежий пиратский решарпер, но не главное. Что с ходу видно? Стало чего-то нового больше и лучше? Пока не заметил. А вот анимация в строке статуса (это как в MS Office версии с 2016й, наверное, буковки так плааааааавненько печатаются, прямо слева направо) и очень похожий на старый, но какой-то искривленный в плане usability для кейбордистов Find Dialog - это да, заметно. Хипстота, блеать! Дешевка.
P.S. С очередным апдейтом диалог поиска стал ещё глючнее в области комбика с проектами-путями!

Wednesday, April 22, 2020

Если (друг) EntityFramework оказался вдруг

           выполняющим операции на клиенте, подумайте, где явно и неявно используется IEnumerable<>. Компилятор не скажет вам, где использует LINQ extension methods для IEnumerable<>. И optionsBuilder.ConfigureWarnings(w => w.Throw(RelationalEventId. QueryClientEvaluationWarning)) ничего вам не скажет. Используйте IQueryable<>, и ваши ентити-операции типа Take(), Skip(), Count() лягут на DBMS,а не на backend app.

Thursday, April 9, 2020

"И тут я понял", как надо формочки лепить

        Только спустя много лет и проектов появилась идея, как нормальнее делать логику взаимосвязей значений для больших списков Use Cases, для фреймворков, где нет похожего. Долой дергающие друг друга мелкие обработчики OnChange контролов, сбинженых с пропертями business entity. Они, вместе с прочими мелкими методами, поналепленными для code reuse, приводят к непоняткам:
- не прослеживаются связи с конкретными Use Cases из спецификации
- maintainability отстой - давно думаю, что длинный метод и портянка на 1-2 экрана плотного кода, хоть на Domain Specific Language, лучше, чем куча коротких методов, длинные стеки вызовов и необходимость слегка повышенных способностей, чтобы охватить код в достаточном объёме.

        OnChange обработчик может быть 1 для всех контролов, и это вполне может быть единственный метод, содержащий всю калькуляционную или валидирующую логику entity. В цикле с ограниченно разумным числом повторений и бросанием ошибки при превышении, что позволит что-то поменять. Флаг(и) для отключения повторного вхождения через OnChange, равно как и рестарт вычислений как через OnChange, так и через break - этого может быть достаточно для всех случаев. Чем-то напоминает Angular(JS) с его рекалькуляцией пропертей модели?..

            Всё, что относится к бизнес-логике, должно быть плотно собрано в 1 место, и Use Cases должны чётко прослеживаться. Как это будет уживаться с вспомогательными операциями типа загрузки дочерних данных по OnChange какого-нибудь ChildObjectId navigation property, дело другое. Тут уже можно мелкие методы подергать из портянки. А рассовывание той же установки Enabled по разным методам - как сверять с Use Cases будем? Тесты писать?..

            Вышесказанное относится, скорее, к десктопным проектам, к тем же .NET WinForms. И так же относится к каким-нибудь MVP Presenter or any business logic class, куда вы вынесете логику из "View" (UI). Даешь сосредоточение логики в портянке на 1-2 экранах плотного кода. Долой мелкие методы

Friday, May 24, 2019

On refactoring

Of spaghetti code in one project/big methods to some projects/smaller methods

- no props for services using factories, use constructor injection to see what's necessary; but if service is resolvable eveywhere, props are better to not make constructor parameters list fat
- constructor parameters class is good when you often change dependencies list, but separate parameters are better for easier control and dependencies minimizing
- fewer state (props) and more parameters passing to see workflow!
- generally properties injection is better and all injected stuff should be stateless services OR dependencies constructor params should be taken from context

Tuesday, April 16, 2019

Again and again

Fresh updated VS 2017 Community offered me to enter email/username when I went to work with Team Explorer having Git-based solution opened. Well, why not - though I did not suffer from  any info missing in commits. But then I discovered that all configuration in root .gitconfig in Windows Profile folder was replaced with just that email/username. "Git diff" attempts run VIM instances that eat my CPU completely without anything UI visible. Skype also joined CPU consumers company. Well, let's again spend some time for reconfiguring. Thanks, M$

Wednesday, April 10, 2019

It took time, or VS 2017 and .NET Core 2.2

https://stackoverflow.com/questions/54088559/visual-studio-does-not-display-net-core-2-2-in-target-framework-dropdown# explains why latest at that momant .NET Core SDK 2.2.202 installed is invisible for .NET Core 2.2 project. Where is it said that I need VS 2019 to work with latest .NET Core 2.2 except some StackOverflow article googled quite occasionally? Googled earlier articles tells that 2.2 SDK is OK if <some other actions that nevermind>. Some *.target file pointed in "the current .net sdk does not support targeting .net core 2.2" error message is from "C:\Program Files\dotnet\sdk\2.1.505" folder. And the solution is to use 2.2.106 version, last before 2.2.202. Now we know what is "breaking change" with minor version number changed by 1.

Monday, April 1, 2019

Bloody hell

Какой-то адский десант металеров на Бульбению выдался этой весной. Может, я стал больше рекламу смотреть в метро и на остановках... Решили косануть бабла с 2.5го мира, ибо в 1м как-то уже не катит? Снова Тарья, Amorphis, Larimosa, постаревшие эксгибиционисты Manowar, Dimmu Borgir. Даже Ленинград, который в Рашке наше всё, уже вроде как пару раз приезжал и, возможно, будет ещё.