Перво на перво для создания хорошей архитектуры проекта, необходимо определиться с ее признаками:
- Архитектура должна быть поддерживаемая.
- Расширяемость системы без костылей.
- Гибкость настройки, многие задачи должны решаться без изменения программного кода.
- Надежность архитектуры.
Первые пункт легкость поддержки решается следуя принципам SOLID, в основном конечно же принципу «Единственности ответственности», по этому архитектура необходимо выбирать основанную на микросервисах или же модульную архитектуру монолитного ядра система. Какой то принципиальной разницы между этими подходами нет. Я для проекта над котором работаю выбрал 2-й подход, модули.
Второй пункт можно решить используя паттерн программирования event-observer либо dispatcher Они похожи друг на друга, по этому не будем заострять внимания. Суть их работы выкинуть какое либо сообщение из модуля который сейчас выполняется, и прослушать при необходимости модулем которому необходимо поработать с данным объектом.
Третий пункт, решается тоже довольно просто, описательную часть сущности, то есть атрибуты сущностей хранить отдельно от самой сущности. Это отсылка к EAV (Entity Attribute Value) Вам не обязательно обрабатывать все поля какой либо сущности для бизнес логики, некие атрибуты несут информативную нагрузку, другие используются для сортировок и фильтрации, и только часть для построения бизнес логики. По этому если сущность храниться как EAV, мы в любой момент можем добавить или убрать ненужный нам атрибут.
Четвертый пункт наших требований это надежность, а значит минимум «костылей» и больше автоматизации. Большинство веб приложений состоит из интерфейсов отображения данных, таблицы, фильтры, сортировка, карточки сущностей. И интерфейсов ввода данных, форм. По этому стоит применять фабрики для форм, фабрики для таблиц, фабрики для карточек. Больше автоматики, в конце концов мы можем абстрагироваться от области представления, и заострить внимание на бизнес-логике и предметных задачах…
И так напрашивается вывод, что бы выстроить хорошую архитектуру, необходимо абстрагироваться, определиться с технологиями и паттернами программирования и выстроить фундамент для начала разработки…
Теперь мы разработали план, определились с требованиями, дальше надо определиться как строить архитектуру. На самом деле Я не понимаю все эти слоистые архитектуры или луковые. Я взял что то от них что то придумал сам, и не вижу в этом ничего такого, если людям просто понять что то значит это правильно. По сути вся архитектура сводиться к незамысловатым шагам:
- В фундаменте абстракция (абстрактные классы и интерфейсы определяющие контракт тех или иных компонентов системы объедененных в модули)
- Далее у меня идет слой ядра который запускает модули и ими управляет.
- Загрузка системы layout'ов
- После запуска модуля, каждый модуль как отдельный микросервис
Но что же делает архитектуру хорошей? Вопрос не простой, но если все упростить до уровня философских рассуждений то и на этот вопрос найдется ответ. После того как запускается приложение. Мы имеем изолированные друг от друга части, модули. Каждый модуль отвечает только за один функционал системы. Спускаемся дальше каждый модуль, спроектирован как mvc приложение и имеет представление, контроллер, модель. И каждая эта часть модуля тоже отвечает каждый за свое действие. Спускаемся еще глубже и мы увидим что представление тоже имеет некие части, это классы фабрик, и расширения layout's. На самом деле layout'ы это тоже модуль, он подгружается прежде всего, все остальные модули дополняют его, и строят интерфейс (или систему вывода). А как же сделать все это мене зависимым спросите вы? И ответ будет очевиден обсерверы, на каждый рендер блока layout's выбрасывают свои event's достаточно лишь прослушать этот event, observer'ом в вашем приложение, и добавить нужное обновление блока в слоях, и получить соответствующий вывод. Так же и многие модули имеют свои евенты, на которые подписаны другие модули и способны добавлять/либо обновлять данные в переданном наборе. Все это приводит к тому что в приложение, модули мало связанны друг с другом и могут жить друг без друга.
В свете вышесказанного возникает резонный вопрос, если у нас один модуль слушает другой то необходимо иметь какую то систему по управлению зависимостями для этих модулей. То есть модуль от которого зависит другой модуль мы должны запустить в первую очередь а тот который зависимый мы должны запустить после. Так и родилась простая реализация зависимости, мы создаем очередь для запуска модулей и просто сортируем ее таким образом что бы те модули от которых зависит какие либо другие, загружались в первую очередь, после загрузки ядра конечно же.
В заключение, могу сказать следующее. Хорошая архитектура это не такая сложная и долговременная задача, что бы на ней экономить. И в конечном итоге на помогает более эффективнее расходовать ресурсы и время. Ведь поменять настройку в панеле управления это пятиминутное дело. Написать две строки для добавление тоже не так много времени. А вот сверстать вывод, каждый чих переверстывать, дебажить большие объемы данных это уже время которое во много раз превышает время разработки стратегии построения архитектуры.
Комментарии (48)
BOOTor
25.06.2019 14:39Преамбулу прочитал — чуть глаза не вырвал себе. Если пишете на серьезном ресурсе статьи — пишите хотя-бы грамотно.
lnroma Автор
25.06.2019 14:59-13Не заметил когда это хабр стал серьезным ресурсом. Максимум тут сборище тупых особей которые только и могут что комментировать и восхищаться с яндексом и мэил.ру если даже они пишут откровенное гавно.
BOOTor
25.06.2019 15:31+4Из-за таких как ВыЖаль, что Хабр скатывается до такого состояния, что многие перестают считать его серьезным ресурсом. И на это больно смотреть…Labunsky
25.06.2019 15:40+1Да ладно, по крайней мере тут нет ни политической, ни корпоративной составляющих. Написанный плохо, но живым человеком пост — куда уж ближе к оригинальному хабахабру?)
BOOTor
25.06.2019 15:42Живой человек со своим взглядом на жизнь, старающийся донести свою точку зрения — это очень хорошо. Возможно я немного погорячился, извините — накипело :)
Но и обзывать участников сообщества сборищем тупых особей тоже не совсем корректно…AleXP3
26.06.2019 03:35-4обзывать участников сообщества сборищем тупых особей тоже не совсем корректно…
У человека сложилось такое мнение. То самое за которое "… я бы отдал свою жизнь..."(с) Надо быть терпимее.
AntonSazonov
26.06.2019 12:11Серьёзным ресурсом он был всегда. Тупые особи к сожалению тоже присутствуют и присутствовали всегда. Кстати, ваше последнее слово пишется чероз "О".
AleXP3
27.06.2019 13:06-2Верно, но все дело в пропорциях. Если раньше тут процветала «борьба мнений», с вменяемыми аргументами как правило, то нынче все весьма упростилось и в фаворе «борьба лайков». Средний IQ ресурса сильно понизился.
AntonSazonov
27.06.2019 13:19Не могу не согласиться с последним предложением.
К сожалению, критерии отбора стали намного "мягче", а на правила, которые я читал при регистрации несколько лет назад, уже никто не смотрит.
Mikluho
27.06.2019 14:02Да нет тут никакой борьбы лайков. И IQ не сильно изменился. Просто раньше без статей только комментить можно было, да и то не всегда. Сейчас повылезали, отхватывают минуса, жалуются…
AleXP3
28.06.2019 01:03Сейчас стало можно и статьи без модерации размещать? Не знал. Отстал я от жизни значит. Я то еще помню времена когда без статей комментировать нельзя было.
Mikluho
28.06.2019 01:38Да не, модерация осталась, но комментить и без статей можно… Да и желающих что-нибудь сомнительное через песочницу протащить прибавилось.
igruh
25.06.2019 14:59пишите хотя-бы грамотно.
Выражаете претензии по поводу грамотности — пишите грамотно хотя бы сами.
Mikluho
25.06.2019 14:44Во-первых, тут так много ошибок в русском языке, что даже сообщать об оных не хочется, тем более что…
Во-вторых, дело даже не воде, а в том, что статья получилась «ниачём». Вам нравится архитектура вашего приложения — отлично. Но этот опус нифига не полезен тем, у кого другое приложение/система/сервис. Если хотите — распишу системные ошибки в общих рассуждениях и описаниях архитектуры. Но их почти столько, сколько и ошибок в русском языке. Ну и…
В третьих, упоминать слив кармы в заголовке — это как «грозить южному централу», сольют так, ради хохмы :)vdem
25.06.2019 15:32+1Я настолько безграмотной статьи тут не припомню. Одно дело — несколько ошибок во всей статье, и то сразу бросается в глаза, но по несколько в каждом предложении — читать становится невозможно, так как вместо попыток понять суть статьи то и дело спотыкаешься на ошибках.
c_kotik
25.06.2019 15:14Максимализм во всей красе. Меня все не любят, значит все
сборище тупых особей которые только и могут что комментировать и восхищаться с яндексом и мэил.ру если даже они пишут откровенное гавно.
xkondorx
25.06.2019 15:57Когда твоя система обвалится под собственным весом, новые программисты не смогут разобраться в хитросплетениях «гениальных решений», а ты будешь жить на работе, на грани нервного срыва внедрять простую фичу в течении уже второго месяца, тогда ты воскликнешь:
— «О хабр, я был не прав, помоги мне!»
Но хабр ответит тебе:
— «Нет.»
P.S. Чувак, лучше пиши дальше про скриншотеры…
mammuthus
25.06.2019 16:04Автор пытался пересказать The Twelve-Factor App и у него получилось так себе.
AntonSazonov
26.06.2019 08:52-1Кто пригласил этого обиженного сюда?
Stalactlte
26.06.2019 11:18-2Да, тут с кармой и минусующими дела обстоят как никогда ужасно. Вот слили мне прошлый профиль, не любят тут правду или мнение, отличное от большинства. Неугодных выдавливают с площадки. Ну и что? Создам я еще 100 акков, проблем-то. Но я продолжу отстаивать СВОЕ мнение, а не прилизанное под большинство, и продолжу стоять горой за своих. Кармабеспредел тут закончится рано или поздно, и будет демократия, когда каждый будет иметь право минусовать. Вот тогда все будет нормально.
lair
26.06.2019 11:49А вот что бы вам не создать свою площадку с теми правилами, которые вы считаете нормальными?
Stalactlte
26.06.2019 15:29-2lair, зачем что-то создавать, когда есть готовое, просто происходит беспредел от кучки в 20-30 человек, вот и все. Все наладится. Тех, кто уважает чужое мнение и не живет бредом, что не существует других людей с иными мнениями, будет со временем тут больше. Вот и сейчас кто-то нагадил просто так в карму. Детсад. Mikluho, имеет прямо отношение к тому как портят карму на Хабре. ksr123, да, «демократия на сайте, уважаем мнение любого человека» — говорили они. А по факту беспредел, плевки в лицо, слив комментариев и кармы просто так, исподтишка, аргументировать-то ничего не надо, все анонимно, ответить никто не может. Такая узурпаторская власть расслабляет тут некоторых товарищей. А была бы демократия, я бы тоже ответил в карму за беспредел, ибо за него нужно наказывать. Тогда бы и закончились все эти гадости, все было бы мирно-тихо.
lair
26.06.2019 15:48+1зачем что-то создавать, когда есть готовое
Затем, что у этого "готового" есть свои правила, с которыми вы соглашались при заведении эккаунта.
Вот и сейчас кто-то нагадил просто так в карму.
Нет никакого "нагадил в карму", это исключительно ваша реакция. Карма — это просто метрика, управляемая действиями других участников сайта.
имеет прямо отношение к тому как портят карму на Хабре
Любой участник, пользующийся механизмом кармы, имеет прямое отношение. Да, это так задумано. И что?
просто так, исподтишка, аргументировать-то ничего не надо, все анонимно
Ну… да, а что? Тут не так давно уже была дискуссия, в которой один юзер тоже жаловался на анонимность, люди, поставившие ему минусы, пришли и сказали, за что, все, что получилось — это ведро ругани. И зачем это нужно? Так лучше? Да нет, не лучше.
А была бы демократия, я бы тоже ответил в карму за беспредел, ибо за него нужно наказывать.
А почему вы считаете, что у вас по умолчанию есть право кого-то за что-то здесь наказывать?
Stalactlte
27.06.2019 07:49-3«Затем, что у этого „готового“ есть свои правила, с которыми вы соглашались при заведении эккаунта.» — правила тоже меняются, как и контингент. Перемены не за горами.
«Нет никакого „нагадил в карму“, это исключительно ваша реакция. Карма — это просто метрика, управляемая действиями других участников сайта.» — нет никакой исключительной реакции и метрики, управляемой действиями других участников сайта. Есть срач в карму. Точка.
«Любой участник, пользующийся механизмом кармы, имеет прямое отношение. Да, это так задумано. И что?» — так вот не любой. В этом и проблема. Если бы ЛЮБОЙ мог пользоваться, тогда бы было равноправие, беспредела этого не было. Каждый бы 10 раз подумал, прежде чем карму сливать. А зачем оно нужно? За все спрос будет. Со временем.
«А почему вы считаете, что у вас по умолчанию есть право кого-то за что-то здесь наказывать?» — а почему вы так считаете и такие же как вы? Вам это право дал сайт. Вы это доказываете ежедневно из года в год. Так почему другие не могут так же? Что, сразу боязно стало? Конечно. Создали тут ГУЛАГ, кучкой в 20-30 человек, которые себя полубогами почувствовали и творят что хотят, вершители судеб.xkondorx
27.06.2019 09:18Не публикуйтесь и не посещайте ресурс, за товар голосуют рублем, за ресурс голосуют участием. Если Вы уверены, что все так как говорите, то очень быстро на хабре останется только 20-30 человек. Жить в обществе — значит следовать нормам установленным обществом, если общество говорить грабить буржуев, то придется грабить, а то буржуем объявят тебя)
Stalactlte
27.06.2019 09:39-3При чем здесь участие? А так и будет, если концепцию равноправия и демократии не внедрят, тут будет 20-30 человек. Неугодных выжимают с ресурса, затыкают рты, не понимая, что есть отличное от большинства мнение, есть иные люди. А палка в руках элиты, вот и все. А следовать нормам беспредела никто не намерен.
xkondorx
27.06.2019 10:49+2Лично я здесь за информацией и полезными материалами для развития. Эта статья к ним не относится и лично мне она не нужна, не нужна как посетителю этого ресурса с конкретными целями. И я тоже голосовал бы минусами если бы мог, потому, что иначе статей подобного рода будет больше, а мне это не нужно, я хочу качественную информацию. И те кто ставят минусы в большинстве своем, скорее всего думают также.
P.S. Когда люди расширяют знания человечества (наука), они сначала изучают и стараются понять имеющиеся знания, а затем тратят целую жизнь, чтобы открыть что-то новое. Статьи подобные этой прекрасно показывают, что человек не потратил достаточно времени и усилий для изучения и осознания материалов в которых пытается выставить себя авторитетом. Я отношусь к хабру как к серьезному ресурсу с серьезной информацией в котором почему то стали появляться статьи без токового содержания. Вторая причина минусов, это подача материала и «понт», если человек не прав и готов с этим согласиться, его не будут минусовать, он переведет статью в черновик и исправит ошибки, либо удалит.
lair
27.06.2019 11:04+1правила тоже меняются, как и контингент.
Ну то есть было сообщество со своими правилами и контингентом, а потом пришли вы, и все должно поменяться для вас? Но нет.
нет никакой исключительной реакции и метрики, управляемой действиями других участников сайта. Есть срач в карму.
Это ваше отношение к происходящему. Нет никакого способа доказать, что оно единственно верное.
так вот не любой.
Любой. Вы невнимательны. Прочитайте еще раз: "любой, пользующийся механизмом кармы".
Если бы ЛЮБОЙ мог пользоваться, тогда бы было равноправие, беспредела этого не было
Во-первых, нет никакой гарантии, что беспредела бы не было (равно как и нет гарантии, что он есть сейчас).
А во-вторых, кто вам вообще обещал здесь равноправие? Его здесь нет, ровно в соответствии с правилами.
а почему вы так считаете и такие же как вы?
А я так и не считаю.
Вам это право дал сайт.
Если быть точным, мне это право дали другие участники, когда голосовали за мою карму. Но у меня не было этого права по умолчанию, чего требуете вы.
Так почему другие не могут так же?
В том-то и дело, что так же — могут. Правила это прекрасно позволяют. Если я не ошибаюсь, 191 юзер в разное время проголосовал против моей кармы.
Создали тут ГУЛАГ, кучкой в 20-30 человек, которые себя полубогами почувствовали и творят что хотят, вершители судеб.
Ну так я повторю свой вопрос: а зачем вы сюда пришли, если здесь все так, как вы пишете? За пределами этого сайта всей этой власти нет.
Mikluho
26.06.2019 15:48+1имеет прямо отношение к тому как портят карму на Хабре
— т.е. вы среагировали на слова в заголовке статьи про «как испортить карму на Хабре», и решили высказать своё демократичное мнение под статьёй про архитектуру.
Думать о том, в чём может быть не прав автор, вам не интересно. Равно как и прочесть комментарии и выяснить-таки, за что его заминусовали…
Кстати,кучки в 20-30 человек
не сольют карму до -50 или -100. Были бы согласные — были бы и плюсы, что наблюдается под спорными, но интересными статьями/комментариями.
SbWereWolf
26.06.2019 12:31Не знаю зачем ставить минуса за такие статьи, не считаю что статья прямо какую то ересь пропагандирует.
Но в статье однозначно не хватает подробностей. Автор написал её для себя, человеку не знакомому с особенностями его системы и задачами которые она решает, непонятно ни чего.
В статье есть ответы на вопрос «как?», но не понятно «зачем?».
Если разговор про архитектуру то надо схемку с частями системы, стрелки потоков управления или данных, так понятно будет о чём речь.
Надеюсь эти замечанию помогут автору писать статьи более познавательные и информативные именно для читателей. Писать для себя мне кажется можно в своём блоге, на Хабре читатели не оценят.
Mikluho
26.06.2019 12:48Автор написал её для себя, человеку не знакомому с особенностями его системы и задачами которые она решает, непонятно ни чего.
Ну так этот сайт — не личный бложик, чтобы писать для себя
AntonSazonov
27.06.2019 13:33"..., и главное простыми словами, рассказать вам о том как хорошую архитектуру."
Блин. Что?
"… луковая и д.р. шаблоны..."
"д.р." надеюсь не расшифровывается как "другие"?
Вы хоть раз перечитывали то что написали?
Wilk
> Как испортить карму на хабре?
1. Упомянуть карму.
2. Налить воды вместо статьи.
3. ???
4. PROFIT
lnroma Автор
Еще забыл послать на хабр первого комментатора )))))