Вступ
Нещодавно при роботі над проектом навчальної практики виникла потреба з свого коду породжувати довільний процес і одночасно читати його stdout і stderr. Так як додаток пишеться виключно для linux, я вирішив заодно розібратися з epoll. Для запуску процесу на просторах інтернету була знайдена маленька бібліотека, робить саме те, що потрібно, та ще й обертаюча введення-виведення в звичні потоки із стандартної бібліотеки (мова про <iostream>).

Озброївшись кількома статтями про epoll, я вже було збирався писати код, якщо б не одне «але» — для epoll потрібний доступ до «сирим» файловим дескрипторам, а автор бібліотеки не надає public-доступу до них. Методи класу, повертають дескриптори, приховані під грифом «protected».

Що робити?
Найпростішим було б виправити код бібліотеки і перемістити потрібні методи public-секцію, ще краще було б форкнуть бібліотеку і реалізувати необхідний функціонал самому. Але перше було б негарно і обіцяло б конфліктами при оновленні бібліотеки, а друге зайняло б занадто багато часу на розбір коду бібліотеки і подальше тестування під кількома різними *nix-системами.

Тому в голову прийшла божевільна третя думка: чому б не спробувати як-то гарно «зламати» ООП і «легально» отримати доступ до protected-методом без втручання у вихідний код бібліотеки? Про те, які виникли перепони на цьому шляху і як допоміг C++14 в їх подоланні, і піде розповідь у даній публікації.

Читати далі →

Ця стаття присвячена створенню моделі даних, яка красиво лягала б на SQL і містила в собі «правильне» ООП спадкування. Треба сказати, що ця задача виникала у мене в різний час на різних проектах, і вирішувалася вона там теж по-різному. Назви підходів взяті з ситуації на відповідних проектах термінології.

Читати далі →

Здрастуйте, Хабр!

Не так давно у видавництві «Manning» вийшла непроста, але довгоочікувана і вистраждана автором книга про функціональне моделювання предметних областей.



Оскільки у нас готуються книги як Scala і паттернам предметно-орієнтованого проектування, опублікуємо одну з статей сахіба Гоша про ідеї, закладені в його книгу, і запитаємо, наскільки ця книга була б вам цікава

Читати далі →

Вітаю всіх. У сьогоднішній статті мова піде про те, як можна реалізувати власний високорівневий API в керованому коді для роботи з пристроями друку, від встановлення нового монітора друку в системі і до отримання обробленого драйвером пристрою друку документа з порту принтера.

Як і в минулий раз, стаття буде корисна для ознайомлення розробникам молодшого та середнього ланки. В процесі вивчення матеріалу, Ви дізнаєтеся як можна звертатися до низькорівневим DLL WinAPI в C# з допомогою P/Invoke, як встановити, налаштувати і видалити з системи монітори друку, драйвер принтера, сам пристрій друку, відкрити і зв'язати порт для перенаправлення вхідних даних з пристрою друку на монітор, познайомитеся з ключовими моментами застосування маршалирования. Так само ми на практичному прикладі розберемося, як за допомогою нашого API можна зручно маніпулювати пристроями друку в системі, дізнаємося, як можна перехопити оброблені дані після друку принтера і, наприклад, відправити їх на сервер.

Читати далі →

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

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

Читати далі →

Інверсії залежностей управління уприскуванням

image

Вступ
Напевно перше питання, яке виникло у вас при погляді на заголовок, був "Шта?". Насправді я просто переклав фразу "Інверсія управління, впровадження залежності" в Google Translate китайський, а потім назад. Навіщо? Потім, що на мій погляд, це хороша ілюстрація того, що відбувається насправді. Люди навколо плутають, перекручують перекручують ці поняття. За службовим обов'язком я проводжу багато інтерв'ю, і 90% того, що я чую, коли ставлю питання про DI — чесно кажучи, відверта маячня. Я зробив пошук по Хабру і знайшов кілька статей, які намагаються розкрити цю тему, але не можу сказати, що вони мені дуже сподобалися (гаразд, гаразд, я продивився тільки три перші сторінки, каюсь). Тут же на Хабре я зустрічав в коментарях таку розшифровку IoC, як Injection of Container. Хтось серйозно припускає, що є якийсь механізм ін'єкції контейнерів, який співіснує десь поруч з DI, і, мабуть, навіть робить щось схоже. Тільки з контейнерами. Мда. Насправді зрозуміти впровадження залежності дуже просто, треба всього лише…

Читати далі →

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

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

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

Читати далі →