Ця замітка містить ряд хитрощів, що дозволяють скоротити код, одержаний після застосування патерну «стратегія». Як неважко здогадатися з назви, всі вони так чи інакше пов'язані з використанням generic-типів.

Читати далі →

Відповідь на введення в проектування сутностей, проблеми створення об'єктів

Після прочитання статті Введення в проектування сутностей, проблеми створення об'єктів на хабре, я вирішив написати розгорнутий коментар про приклади використання Domain-driven design (DDD), але, як водиться, коментар виявився занадто великим і я вважав правильним написати повноцінну статтю, тим більш що питання DDD, на хабре і не тільки, видаляється мало уваги.
DDD
Рекомендую прочитати статтю про яку я буду тут говорити.
Якщо коротко, то автор пропонує використовувати білдери для контролю за консистентностью даних в сутності при використанні DDD підходу. Я ж хочу запропонувати використання Data Transfer Object (DTO) для цих цілей.

Читати далі →

Введення в проектування сутностей, проблеми створення об'єктів

При моделюванні такого поняття предметно-орієнтованого проектування як сутність можуть виникнути деякі складності, обумовлені бізнес-вимог або технічною частиною. Зокрема, іноді виникає складність із створенням об'єкта-сутності.

У даній статті описуються дві такі проблеми, і розглядається спосіб їх вирішення. Так само стаття підійде як введення в проектування сутностей. Для розуміння матеріалу знадобиться базове уявлення про предметно-орієнтованому проектуванні.

Читати далі →

Проектування і рефакторинг: по стопах Евкліда

Перш ніж представитися і злегка порозумітися, я, мабуть, напишу, кому призначена і присвячена дана стаття, щоб вельмишановний читач мав можливість негайно відкинути її за непотрібністю.

Отже, кому ж? В першу чергу, напевно, таким же як я — новачкам в області проектування програмних систем. Тим, хто не володіє колосальним емпіричним досвідом і володіє шаблонами проектування виключно на підставі загальних міркувань. Ще більш ефективним буде прочитання такої статті тим, хто ні разу не чув про SOLID, GRASP та інші принципи проектування. Бо я щиро сподіваюся на те, що мені вдасться показати, як з базових теоретичних суджень на підставі законів логіки виводяться всі ті непохитні постулати, які раніше здавалися a priori істинними.

Тим не менш, не дивлячись на настільки низьку планку, я б все ж побажав, щоб досвідчений і вже досвідчений програміст, який володіє потужною емпіричною базою, міцно засіла в його нейронних мережах, підсобив конструктивним радою скромним починань.

Читати далі →

Патерн Стратегія на JavaScript

Раніше я вже публікував переклад статті з такою ж назвою. І під нею товариш aTei залишив коментар:
По-моєму дечого не вистачає в цій статті та у статті в википедие — прикладу в стилі «Було погано — стало добре». Відразу виходить «добре» та не досить ясно, що це дійсно добре. Буду вдячний за такий приклад.
Відповіді на нього так ніхто і не дав досі. За 3 роки я набрався досвіду сміливості і тепер, як відповідь на цей коментар, хочу написати про паттерне Стратегія від свого імені.
Крихти теорії зустрічаються десь за текстом. Але більша частина статті присвячена практичним способам застосування цього патерну і варіантів його застосування уникнути.
Читати далі →

Поділяємо інтерфейс і реалізацію у функціональному стилі на С++

Поділяємо інтерфейс і реалізацію у функціональному стилі на С++


В мові С++ для поділу оголошень структур даних (класів) використовуються відмінності файли. У них визначається повна структура класу, включаючи приватні поля.
Причини подібної поведінки описані в чудовій книзі «Дизайн і еволюція C++» Б. Страуструпа.

Ми отримуємо зовні парадоксальну ситуацію: зміни в закритих приватних полях класу вимагає перекомпіляції всіх одиниць трансляції (.cpp файлів), що використовують лише зовнішній інтерфейс класу. Звичайно, причина цього криється в необхідності знати розмір об'єкта при инстанцировании, але знання причини проблеми не вирішує саму проблему.

Спробуємо використовувати міць сучасного С++, щоб подолати цей недолік. Заинтереснванных прошу під кат.

Читати далі →

У пошуках чистої архітектури (1-я частина) — Swift 3.0

image

Вітаю шановних жителів Хабрахабра!

Не так давно я став помічати, що мій код стає громіздким і навіть у рамках одного контролера мені все складніше втримати в голові те, що в ньому відбувається. Як наслідок, на виході не завжди очікуваний результат, що я хотів реалізувати, так як мозок «замилилося» і я легко можу втратити істотну деталь. А після, ручної аналіз коду, робота з відладчиком і так далі… Та що вже говорити, доходило до абсурду, при складанні програми xcode падав мертвим і я навіть не встигав зрозуміти, що трапилося в додатку! Потрібно було щось змінювати і думати над архітектурою, так як я не хочу всю свою кар'єру писати плохоподдерживаемый код…

Кому цікавий питання архітектури, ласкаво просимо під кат!
Читати далі →

Observer vs Pub-Sub

Observer і Pub-sub, напевно найвідоміші патерни взаємодії у світі розробки інтерфейсів і JavaScript. Але незважаючи на свою популярність, деякі розробники вважають ці паттерни є однаковими, що й послужило підмогою написати дану статтю.




Читати далі →

Not a Flux

Розповім про ще однієї інтерпретації Flux, а точніше про новий підхід в розробці інтерфейсів — Not a Flux. Передбачається, що читач хоч би прочитав документацію про Flux.



Читати далі →