Pull to refresh
4
0
Send message

Подходы к декомпозиции бэкендов информационных систем

Reading time18 min
Views12K

Количество классов в реализации даже небольшой программы на один человеко-месяц исчисляется десятками. В средних программах на несколько человеко-лет счёт идёт уже на тысячи. А человек может одновременно оперировать 7-ю +/- 2 объектами. Поэтому все нетривиальные программы требуют декомпозиции своей реализации на более крупные блоки, чем классы - я буду называть такие блоки пакетами.

Сейчас наиболее распространены два основных подхода к декомпозиции систем: пакетирование по слоям и техническим аспектам (далее просто "по слоям" для краткости) и пакетирование на основе предметной области (представленное группой вариантов: пакетирование по фичам, пакетирование по компонентам, ограниченные контексты и пакетирование по агрегатам из предметно-ориентированного дизайна (DDD))

Однако ни один из этих подходов мне не подошёл в полной мере и я изобрёл…​ объектно-ориентированный подход к декомпозиции систем. Точнее, я изобрёл простую методику выполнения декомпозиции, а потом понял, что на выходе она даёт штуки обладающие свойствами объекта.

Но обо всём по порядку - сначала я рассмотрю критерии оценки подходов, распространённые подходы и почему они мне не подошли. А закончу пост представлением методики выполнения объектно-ориентированной декомпозиции.

Читать далее
Total votes 9: ↑8 and ↓1+9
Comments14

Нет HUD’а без добра: HUD в игровых интерфейсах

Reading time9 min
Views11K

В играх существует огромное количество интерфейсов: инвентарь, диалоги, меню крафта и торговли, лобби, карта, деревья прокачки персонажа и его экипировки и многие другие. Все они позволяют игрокам взаимодействовать с представленными через интерфейс механиками, которые создатели игры заложили в свой продукт. И в этой статье мы подробно разберем один из самых важных элементов игрового UI: HUD (heads-up display).

HUD, если рассматривать его как цельный, самостоятельный интерфейс, может включать в себя множество различных элементов: полоски здоровья и стамины, указатели направления, метки в мире, различные диегетические элементы и мета-интерфейсы — все, что требуется для непосредственно игры в игру в зависимости от ее жанра, геймплея, набора задач и игровых ситуаций, которые необходимо решить с помощью HUD.

Все элементы HUD по сути являются отдельными интерфейсами, каждый из которых существует для передачи игроку информации определенного типа и решения своей уникальной задачи. При этом HUD, полностью или частично, практически всегда находится непосредственно перед глазами игрока, так как все его элементы отображаются на переднем плане геймплея и/или в игровом мире во время игры.

В этой статье мы поговорим лишь о нескольких базовых вещах, касающихся игрового HUD, а в последующих — уйдем в тему глубже.

Читать далее
Total votes 23: ↑22 and ↓1+24
Comments13

Пособие по программированию модулей ядра Linux. Ч.2

Reading time19 min
Views13K

Продолжение последней версии руководства по написанию модулей ядра от 2 июля 2022. В первой половине текущей части мы подробнее разберём структуру и принцип действия модулей, узнаем, чем отличается пространство пользователя от пространства ядра, а также немного поговорим об использовании памяти. Вторая же половина будет посвящена одному из типов модулей — драйверам устройств, основы работы с которыми мы также подробно рассмотрим.
Читать дальше →
Total votes 32: ↑30 and ↓2+46
Comments0

Domain-Driven Design: тактическое проектирование. Часть 2

Reading time16 min
Views80K


Здравствуйте, уважаемые хабрапользователи! В предыдущей статье мы рассмотрели стратегическое моделирование с помощью подхода DDD. В ней было показано, как выделять концептуальные границы, в рамках которых решаются отдельные задачи предметной области – ограниченные контексты.

Для реализации конкретного ограниченного контекста используется ряд более низкоуровневых тактических шаблонов, которые имеют технический характер, то есть эти шаблоны используются для решения технических задач. Такими шаблонами являются: сущность, объект-значение, службы предметной области, события, модули, агрегаты, фабрики и хранилища. Именно о них пойдет речь в этой статье.
Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments27

Domain-Driven Design: стратегическое проектирование. Часть 1

Reading time14 min
Views108K


Здравствуйте, хабрапользователи! В этой статье речь пойдет о предметно-ориентированном проектировании программного обеспечения с использованием, в первую очередь, стратегических шаблонов. Вторую часть – про тактическое проектирование – читайте здесь.

Данный подход использовал Вон Вернон в своей книге «Реализация методов предметно-ориентированного проектирования». Цель написания этой книги: дать возможность разработчикам совершить полет на самолете DDD (в детстве автор зачастую путешествовал со своей семьей на небольших самолетах). Вид с высоты дает более широкое представление о проблемах моделирования, не давая застрять в различных технических деталях. Наблюдая ландшафт DDD таким способом, можно осознать преимущества как стратегического, так и технического проектирования. Подробнее – под катом!
Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments64

Домен, поддомен, ограниченный контекст, пространство задач/решений в DDD: четко определены

Reading time6 min
Views12K

Domain-Driven Design — это, как правило, подход к проектированию систем программного обеспечения, который предполагает создание общего языка между экспертами домена и разработчиками системы. В число известных правил DDD входят Use a Ubiquitous Language и Make The Implicit Explicit.

Однако некоторые понятия в DDD не имеют четкого определения и являются достаточно неявными. Каждый понимает по-своему, что такое домен, поддомен, пространство задач и пространство решений. В этой статье я постараюсь сформулировать рабочие определения этих понятий и разъяснить их.

Данная статья подготовлена в результате длительной беседы на github с участием многих представителей сообщества DDD. Спасибо всем участникам этого диалога за сотрудничество.

Читать далее
Total votes 6: ↑6 and ↓0+6
Comments7

Пособие по программированию модулей ядра Linux. Ч.1

Reading time19 min
Views38K

Перед вами последняя версия пособия по программированию модулей ядра Linux, вышедшего 2 июля 2022 года. Пособие большое, поэтому материал будет разбит на серию статей. В первой части мы разберём, что такое модули ядра, рассмотрим необходимые подготовительные этапы для их создания и в завершении по традиции напишем первый простейший модуль «Hello world», попутно разобрав вопросы лицензирования, передачу аргументов командной строки и прочие нюансы. Это пособие вы можете смело воспроизводить и изменять в соответствии с условиями Open Software License v 3.0.
Читать дальше →
Total votes 43: ↑43 and ↓0+43
Comments4

Требования не меняются, это мы их недовыявили. 10 техник проверки полноты требований

Reading time26 min
Views20K

Требования, конечно, меняются. Иногда. Но гораздо чаще случается, что мы не до конца выяснили у заказчика и стейкхолдеров все требования, оставив множество умолчаний.

В этой статье я опишу примеры подобных ситуаций и расскажу о техниках, позволяющих задать нужные вопросы, выявить максимальное количество требований на ранних этапах анализа, обсудить со стейкхолдерами нужность этих требований и их приоритеты. Как правило, после применения всех техник в 1,5−2 раза возрастает объём требований и юзкейсов для обсуждения — и это одна из основных задач аналитика: задать все вопросы и выяснить все детали до начала проектирования и разработки системы.

Возможно, многие подходы вы уже применяете, а о некоторых даже не слышали; я попробую свести их в единую систему.

Эта статья носит практический характер, составлена в виде пошагового чек-листа. Если вы сочтёте полезными описанные в статье техники и начнёте применять что-то из изложенного в этом материале, буду рад получить обратную связь.

Читать далее
Total votes 13: ↑13 and ↓0+13
Comments4

Разработка драйвера сетевого адаптера для Linux. Часть 1

Reading time25 min
Views26K

В этой статье мы рассмотрим как устроен драйвер сетевого адаптера для Linux.

Cтатью разделим на две части.

В первой части рассмотрим общую структуру сетевого адаптера, узнаем какие компоненты входят в его состав, что такое MAC и PHY, разберемся как подготовить адаптер к работе, сконфигурировать, и как в итоге получать сетевые пакеты.

Хотя при разработке драйверов необходимо использовать стандартные ядерные фреймворки, такие как clock, reset, libphy и пр., поначалу мы будем работать с адаптером напрямую через регистры состояния и управления. Это позволит нам детально разобраться с аппаратной частью.

Во второй части статьи приведем драйвер к нормальному виду, с использованием стандартных фреймворков и описанием того, что надо указать в Device Tree, и рассмотрим как передавать сетевые пакеты.

Нам нужна макетная плата с сетевым адаптером, на которую можно поставить Linux. Возьмем Orange Pi Zero на платформе Allwinner H2+. В состав платформы входят четыре процессорных ядра Cortex-A7, поддерживается ОЗУ стандартов LPDDR2, LPDDR3, DDR3, широкий спектр соединений и интерфейсов, в том числе сетевой адаптер, для которого мы будем разрабатывать драйвер. Подробное описание платформы тут, документация на платформу Allwinner H3 Datasheet.

Читать далее
Total votes 71: ↑71 and ↓0+71
Comments19

Пишем наш первый модуль для ядра Linux

Reading time14 min
Views19K
image

Пожалуй, ядро Linux сегодня – это самый вездесущий (и по-прежнему недооцененный) программный код. На нем основаны все дистрибутивы Linux (что очевидно), но это далеко не все. Кроме того, на ядре Linux работает огромная масса встроенного ПО практически везде. У вас есть микроволновка? Вероятно, она работает на ядре Linux. Посудомоечная машина? Тоже. Вы состоятельный человек и приобрели автомобиль Tesla? Может быть, вы найдете в ней какие-то баги и исправите их, в таком случае, можете отправить патч им на Github, где лежит код для модели S и модели X. Электронная начинка МКС, благодаря которой станция не падает на Землю смертельно опасным и разрушительным огненным болидом — конечно же, тоже работает под Linux. Ядро легковесно. Наверное, именно поэтому оно так хорошо работает в условиях низкой гравитации.
Читать дальше →
Total votes 24: ↑20 and ↓4+20
Comments23

«Программировать не сложно — сложно не разочароваться в процессе»

Reading time5 min
Views15K

В детстве у меня была Mattel Auto Race — портативная игровая консоль со встроенным LED-экраном с красными светодиодами, элементами управления, одной игрой и динамиками. Почему-то я однажды о ней вспомнил и субботним вечером решил создать версию игры, используя p5.js. Сначала дела шли хорошо: я поработал над встречными автомобилями и логикой создания и удаления автомобилей. Затем я решил немного усложнить игру, добавив немного рандома в процесс появления автомобилей.

Вот тогда я столкнулся с проблемами. Что-то было не так с тем, как я управлял таймингом — я никак не мог заставить машины появляться в нужном мне порядке. Повозившись с разными вариантами, я так и не понял, что не так, и разочаровался. Прошло 2 дня, а я так и не могу вернуться к проекту, чтобы не сталкиваться с досадой и чувством разочарования.

Но оказалось, что так и должно быть.

Читать далее
Total votes 23: ↑21 and ↓2+23
Comments56

Эволюция лямбд в C++14, C++17 и C ++20

Reading time5 min
Views14K

Лямбда-выражения — одна из самых популярных фич современного C++. С тех пор, как они были представлены в C++11, лямбды проникли практически в каждую кодовую базу на C++. Цель этой статьи — рассказать об основных эволюционных этапах в истории лямбда-выражений.

Читать далее
Total votes 27: ↑21 and ↓6+20
Comments38

Как живут клиентские данные в Yota

Reading time6 min
Views3.1K

Привет, Хабр! 10 лет назад мы запустили систему Customer Data Integration (CDI) в Yota. Речь о софте для обработки персональных данных абонентов. CDI в Yota работает совсем не так, как у других. У них это центральная система и единственная, где хранится информация об абонентах. Дальше я расскажу, как это всё устроено, на чём мы ломали копья и почему всё вышло так, а не иначе.

Читать далее
Total votes 15: ↑13 and ↓2+14
Comments15

Семь раз отмерь, а SOLID все равно не про ООП. Монолог об архитектуре

Reading time11 min
Views26K

Каждые 5 лет количество программистов увеличивается в два раза. И об этом знают уже все, кто хотя бы раз смотрел или читал Боба Мартина. Программное обеспечение есть повсюду. Вы не можете найти в мире такое место, где в радиусе трёх метров от вас не было бы программного обеспечения (на самом деле это про пауков, кажется, но я же просто шучу). И вот если обратить внимание, то окажется, что в ваших часах есть ПО, в вашем телефоне очень много ПО, в холодильниках у некоторых есть ПО, во всех современных автомобилях есть ПО, даже в некоторых собаках (не шутка) уже есть ПО и этот список можно долго продолжать.

Разработчик программного обеспечения в нашем современном мире имеет самое большое влияние. Буквально нет ни одного уголка человеческой жизни на этой планете, на который не повлияло бы качество нашего программного обеспечения Composing Software Eric Elliott. Но вместе с ростом количества разработчиков в современном мире растёт ли качество программного обеспечения? Да, количество разработчиков растёт, но растёт ли количество хороших разработчиков?

Знаете, если бы кто-то в прошлом (с десяток лет назад) мне сказал, что есть такие гайдлайны, от которых мой код изменится к лучшему, то я обязательно бы ознакомился с ними. Но к тому времени, как я понял, что мне нужно знать на самом деле, чтобы стать хорошим программистом, я успел написать уже очень много плохого кода. Надеюсь, что эта статья поможет некоторым изменить своё отношение к архитектуре.
Читать дальше →
Total votes 52: ↑42 and ↓10+50
Comments24

Как писать код, чтобы тебя не уволили?

Reading time12 min
Views31K

Это несерьёзная статья на серьёзную тему. Есть такое понятие, как JSDD - Job Safety (Security) Driven Development, мы часто видим его в крупных компаниях. От этого не избавлены и небольшие компании, особенно когда в штате всего несколько программистов. Разработчики пишут свой код столь изысканным способом, что, несмотря на очень низкую скорость разработки, их страшно уволить, потому что, кроме них, этот код никто понять не сможет. Давайте попробуем разобрать, почему и как такое происходит.

Читать далее
Total votes 26: ↑23 and ↓3+22
Comments29

Создаем Персоны Пользователей используя когнитивные искажения и UX Core

Reading time6 min
Views3.2K

Добрый день!

Мы создали бесплатный инструмент который позволяет анализировать Персоны (индивидов/целевую аудиторию) на основе паттернов человеческого мышления (когнитивных искажений). Вы можете использовать этот инструмент в своей компании для увеличения эффективности работы команд маркетинга, продаж, продакт и др. Инструмент может быть также использован для самоанализа и повышения эффективности принимаемых вами решений.

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments5

Распределенные Workflow на PHP. Часть 2

Reading time11 min
Views14K

В первой, теоретической, части статьи мы разобрали зачем нужны Workflow, где они применяются и какие способы их реализации существуют. Наша компания занимается разработкой энтерпрайз-софта — для нас это больная тема. Поэтому мы давно искали инструмент, который позволит легко вписывать новые шаги в любую схему, не ломая существующую бизнес-логику. Нашли и на его основе сделали свою новую разработку. Теперь давайте перейдём к более практической части и разберем, на что способен Temporal PHP SDK.

Меня зовут Антон Титов. Я более 15 лет занимаюсь коммерческой разработкой. Являюсь соавтором Spiral Framework, RoadRunner и Cycle ORM. Основной стек: PHP и Golang.

Читать далее
Total votes 23: ↑22 and ↓1+27
Comments10

7 причин почему вы не худеете. Ожирение, инсулинорезистентность и диабет простыми словами

Reading time16 min
Views57K

С лишним весом я на ты. Со 115 кг я «сбросился» до 72, затем в течение 3-х лет вернулся обратно к 94-м, а сейчас опять худею (уже грамотно) и в данный момент вешу 88.7 кг (ещё 7 скину и остановлюсь). Таких историй много, поэтому об этом я не буду, а вот причины (биологические и поведенческие), по которым вы можете не худеть, не видел, чтобы кто-то описывал в полном объёме и понятным языком. Сегодня я постараюсь сделать это для вас, обобщив все свои знания о лишнем весе. 

Искренне надеюсь, что этот материал может вынуть чью-то надоедливую занозу или пролить свет на новые пути решения старых проблем. 

Читать далее
Total votes 81: ↑71 and ↓10+82
Comments103

Неклассические контейнеры в C++

Reading time17 min
Views44K

Контейнер - это объект, используемый для хранения других объектов. Контейнер берет на себя управление всей памятью, которые эти объекты занимают.

В стандартную библиотеку C++ входит несколько контейнеров. Кроме этого, в Open Source есть несколько контейнеров, которые покрывают больше юзкейсов. Я опишу устройство интересных контейнеров вне STL и их отличия от классических контейнеров.

Читать далее
Total votes 56: ↑54 and ↓2+64
Comments24

Цитаты великих айтишников с человеческим лицом

Reading time4 min
Views22K

В инете полно списков мудрых вдохновляющих цитат. Это всё здорово, но порой скучновато. Представляешь себе, как человек морщит лоб, изо всех сил делает одухотворённое лицо и выдаёт идеальную шедевральную мысль. Скукота.


Мне больше нравится, когда люди, на которых все равняются или идеализируют их идеи, внезапно в каком-то высказывании показывают себя с очень практической или человеческой стороны. Или подсвечивают особенности другой эпохи. После чего в голове наступает некоторое просветление.


Кент Бек


Кент Бек, создатель методологии "Разработка через тестирование" (TDD), как-то написал:


"Мне платят за работающий код, а не за тесты, поэтому моя философия заключается в том, чтобы тестировать настолько мало, насколько это возможно, чтобы достичь заданного уровня уверенности".
(источник)
Читать дальше →
Total votes 35: ↑31 and ↓4+34
Comments24

Information

Rating
Does not participate
Date of birth
Registered
Activity