Патерни важать... повсюди
...І наскільки ж я був здивований, коли, неочікувано для самого себе, плануючи впровадження для того застосунку, я зрозумів, що мій розум пропонує мені оті самі "патерни"! Розділення відповідальностей, устатковування залежностей, фабрики, сінглтони, ланцюжки відповідальностей та навіть візитер природнім чином знайшли своє місце в тій невеликій програмі. Здавалося, вчергове втілилася стародавня мудрість — "що у великому, те і в малому". Я отримав багато задоволення, розробляючи той тристарядковий застосунок.
Read MoreЯк я здобув досвід в чотирьох технологіях протягом двох місяців
...Деякий час тому мені випало попрацювати над цікавою задачею — дослідити можливості технології, яка зветься SignalR, з прицілом на потенційне впровадження в продукті, який розробляється нашою компанією. Впровадження SignalR передбачає розробку бекенд-частини, що зветься "хабом", та фронтенд-клієнта, який може бути доданий в застосунок будь-якого типу — веб, мобільного чи десктопного. Щоб зробити своє дослідження більш ґрунтовним, я вирішив створити кілька різних простих клієнтів, що дозволило би спостерігати їхню взаємодію та побачити, як SignalR розподіляє повідомлення для різних користувачів на різних клієнтах. Розпочав я з примітивного консольного клієнта і, зрештою, закінчив ще двома веб-клієнтами, які побудовані на React та Blazor технологіях, та десктоп-клієнті, побудованому на WPF.
Read MoreПотуга крокувачів
...Запит міг бути на кшталт такого: "Потрібно зродити 1000 подій перемовин типу 1, 2, 3 для будь-якої відповідальної особи, що належить до снутку 42 та пов'язана з наявними ділянками 50..80. Також необхідно, щоб вони були з країн 10 або 11". Тут ми покладаємося на те, що всі первостаті подій, снутки, земельні ділянки та країни вже містяться у сховищі даних. Тобто задача полягає в тому, щоби зродити частково підроблені записи перемовин, які міститимуть дійсні визначники для створення правильних зв'язків з наявними даними.
Read MoreРежим "заглушки" для HTTP-клієнта
...Однак в цьому випадку інфраструктурний рівень застосунку буде важко покривати юніт-тестами. Під кожен окремий HTTP-запит ми матимемо впровадити розгалужування і перевіряти поведінку, яка не є частиною застосунку як такого. Коли якісь вимогу зміняться і очікувана відповідь зміниться також, ці зміни буде потрібно відбити в двох різних місцях — в реальному потоку коду і там, де обробляється "заглушка". Більше того, кожен метод, який робитиме виклик зовнішнього АПІ, матиме перевіряти параметр, який не є частиною бізнесу, але радше є однією з характеристик контексту запуску. Зрештою, все по почало мати для мене не надто добрий вигляд, отже я почав міркувати про якийсь інакший підхід.
Read MoreВправи з ChatGPT — підробка значення IOptions<T>
...Загалом, перед початком, скажімо так, консультації з Chat GPT, я подумки пройшов весь шлях від постановки задачі до її "вирішення", отже, я не застряг на цій проблемі, я лише хотів з'ясувати, чи не упускаю я чогось і чи нема якогось іншого способу вирішення моєї задачі. Це був мій перший досвід взаємодії з цією штукою, а отже, як в реальному спілкуванні з людиною, я почав із загальниго запитання, а відтак крок за кроком почав ставити більш детальні питання. Наприкінці розмови я був щонайменше глибоко вражений... Хоча пізніше, проаналізувавши цей епізод, я дійшов певних цікавих висновків.
Read MoreВиклики перетворення простого рядка в JSON
...Отже, постала проблема — як десеріалізувати рядок з json-вмістом в деякий c#-об'єкт, аби під час видачі серіалайзер мав змогу створити правильний відгук АПІ? Всі рекомендації, що я знайшов їх у вебі, зводилися до десеріалізації суворо типізованих обє'ктів, але в моєму випадку формат об'єкту в початковому рядку заздалегідь невідомий. Цей об'єкт навіть може не бути пласким, а його властивості можуть мати значення будь-якого типу — число, булевське значення чи рядок. На думку спадало два варіанти, які варто було випробувати: анонімні об'єкти чи динаміки. Я розпочав саме з останніх і поступово здобувся на гідне рішення.
Read MoreАпгрейд netcore 3.1 до dotnet 7
...Після апгрейду до сьомого дотнету з'явилася проблема з параметром Message. З'ясувалося, що тип Microsoft.Azure.ServiceBus.Message більше не використовується для того, аби містити і повідомлення, і його властивості. В новій версії дотнету параметр message має бути типом string, object або якимось суворим типам для подальшої десеріалізації.
Read MoreМультипарадигменний SQL-запит
...На мій перший погляд, велика кількість умов та необхідність агрегувати одночасно за кількома критеріями для того, аби повернути єдиний результат, наводили на думку реалізації алгоритму процедурно на боці API, використовуючи юрбу if-then-else'ів. Але, як я зазначив на початку, концепція розробки на проекті вимагала іншого, тож для вирішення цієї задачі я подумки полишив територію імперативного програмування і перейшов на бік декларативного SQL
Read More© theyur.dev. All Rights Reserved. Designed by HTML Codex