Архитектура приложения или как испортить карму на Хабре

Можно много говорить об архитектуре приложения, SOLID, принципах ООП, о таких архитектурных патернов как слоистая или луковая и д.р. шаблоны проектирования. В течение своего опыта я понял одно сколько людей столько и мнений. Когда ты начинающий программист у тебя много амбиций, чуть растешь в квалификации у тебя ощущение что ты все знаешь, и все что сделано до тебя «плохо», и ты обязательно сделаешь лучше… Но годы идут и набранный опыт говорит об обратном. Под катом я попытаюсь кратко, и главное простыми словами, рассказать вам о том как хорошую архитектуру. Как минимум расширяемую и поддерживаемую, за подробностями прошу под кат…

Перво на перво для создания хорошей архитектуры проекта, необходимо определиться с ее признаками:

  1. Архитектура должна быть поддерживаемая.
  2. Расширяемость системы без костылей.
  3. Гибкость настройки, многие задачи должны решаться без изменения программного кода.
  4. Надежность архитектуры.

Первые пункт легкость поддержки решается следуя принципам SOLID, в основном конечно же принципу «Единственности ответственности», по этому архитектура необходимо выбирать основанную на микросервисах или же модульную архитектуру монолитного ядра система. Какой то принципиальной разницы между этими подходами нет. Я для проекта над котором работаю выбрал 2-й подход, модули.

Второй пункт можно решить используя паттерн программирования event-observer либо dispatcher Они похожи друг на друга, по этому не будем заострять внимания. Суть их работы выкинуть какое либо сообщение из модуля который сейчас выполняется, и прослушать при необходимости модулем которому необходимо поработать с данным объектом.

Третий пункт, решается тоже довольно просто, описательную часть сущности, то есть атрибуты сущностей хранить отдельно от самой сущности. Это отсылка к EAV (Entity Attribute Value) Вам не обязательно обрабатывать все поля какой либо сущности для бизнес логики, некие атрибуты несут информативную нагрузку, другие используются для сортировок и фильтрации, и только часть для построения бизнес логики. По этому если сущность храниться как EAV, мы в любой момент можем добавить или убрать ненужный нам атрибут.

Четвертый пункт наших требований это надежность, а значит минимум «костылей» и больше автоматизации. Большинство веб приложений состоит из интерфейсов отображения данных, таблицы, фильтры, сортировка, карточки сущностей. И интерфейсов ввода данных, форм. По этому стоит применять фабрики для форм, фабрики для таблиц, фабрики для карточек. Больше автоматики, в конце концов мы можем абстрагироваться от области представления, и заострить внимание на бизнес-логике и предметных задачах…

И так напрашивается вывод, что бы выстроить хорошую архитектуру, необходимо абстрагироваться, определиться с технологиями и паттернами программирования и выстроить фундамент для начала разработки…

Теперь мы разработали план, определились с требованиями, дальше надо определиться как строить архитектуру. На самом деле Я не понимаю все эти слоистые архитектуры или луковые. Я взял что то от них что то придумал сам, и не вижу в этом ничего такого, если людям просто понять что то значит это правильно. По сути вся архитектура сводиться к незамысловатым шагам:

  • В фундаменте абстракция (абстрактные классы и интерфейсы определяющие контракт тех или иных компонентов системы объедененных в модули)
  • Далее у меня идет слой ядра который запускает модули и ими управляет.
  • Загрузка системы layout'ов
  • После запуска модуля, каждый модуль как отдельный микросервис

Но что же делает архитектуру хорошей? Вопрос не простой, но если все упростить до уровня философских рассуждений то и на этот вопрос найдется ответ. После того как запускается приложение. Мы имеем изолированные друг от друга части, модули. Каждый модуль отвечает только за один функционал системы. Спускаемся дальше каждый модуль, спроектирован как mvc приложение и имеет представление, контроллер, модель. И каждая эта часть модуля тоже отвечает каждый за свое действие. Спускаемся еще глубже и мы увидим что представление тоже имеет некие части, это классы фабрик, и расширения layout's. На самом деле layout'ы это тоже модуль, он подгружается прежде всего, все остальные модули дополняют его, и строят интерфейс (или систему вывода). А как же сделать все это мене зависимым спросите вы? И ответ будет очевиден обсерверы, на каждый рендер блока layout's выбрасывают свои event's достаточно лишь прослушать этот event, observer'ом в вашем приложение, и добавить нужное обновление блока в слоях, и получить соответствующий вывод. Так же и многие модули имеют свои евенты, на которые подписаны другие модули и способны добавлять/либо обновлять данные в переданном наборе. Все это приводит к тому что в приложение, модули мало связанны друг с другом и могут жить друг без друга.

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

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

Похожие публикации

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 49

    +23
    > Как испортить карму на хабре?

    1. Упомянуть карму.

    2. Налить воды вместо статьи.

    3. ???

    4. PROFIT
      –30
      Еще забыл послать на хабр первого комментатора )))))
      +1
      Преамбулу прочитал — чуть глаза не вырвал себе. Если пишете на серьезном ресурсе статьи — пишите хотя-бы грамотно.
        –49
        Не заметил когда это хабр стал серьезным ресурсом. Максимум тут сборище тупых особей которые только и могут что комментировать и восхищаться с яндексом и мэил.ру если даже они пишут откровенное гавно.
          +5

          … а что вы тут делаете, простите?

            +6
            Из-за таких как Вы Жаль, что Хабр скатывается до такого состояния, что многие перестают считать его серьезным ресурсом. И на это больно смотреть…
              +3

              Да ладно, по крайней мере тут нет ни политической, ни корпоративной составляющих. Написанный плохо, но живым человеком пост — куда уж ближе к оригинальному хабахабру?)

                +1
                Живой человек со своим взглядом на жизнь, старающийся донести свою точку зрения — это очень хорошо. Возможно я немного погорячился, извините — накипело :)
                Но и обзывать участников сообщества сборищем тупых особей тоже не совсем корректно…
                • НЛО прилетело и опубликовало эту надпись здесь
                    +1

                    Кому надо и, главное, зачем?

                    • НЛО прилетело и опубликовало эту надпись здесь
                        +2

                        Если "самому себе", то я как-нибудь сам и определю, что мне надо. Например, мне совершенно не надо быть терпимым к любому поведению.

                        • НЛО прилетело и опубликовало эту надпись здесь
              0

              Серьёзным ресурсом он был всегда. Тупые особи к сожалению тоже присутствуют и присутствовали всегда. Кстати, ваше последнее слово пишется чероз "О".

              • НЛО прилетело и опубликовало эту надпись здесь
                  0

                  Не могу не согласиться с последним предложением.
                  К сожалению, критерии отбора стали намного "мягче", а на правила, которые я читал при регистрации несколько лет назад, уже никто не смотрит.

                    0
                    Да нет тут никакой борьбы лайков. И IQ не сильно изменился. Просто раньше без статей только комментить можно было, да и то не всегда. Сейчас повылезали, отхватывают минуса, жалуются…
                    • НЛО прилетело и опубликовало эту надпись здесь
                        0
                        Да не, модерация осталась, но комментить и без статей можно… Да и желающих что-нибудь сомнительное через песочницу протащить прибавилось.
                +8
                пишите хотя-бы грамотно.
                Выражаете претензии по поводу грамотности — пишите грамотно хотя бы сами.
                +5
                Во-первых, тут так много ошибок в русском языке, что даже сообщать об оных не хочется, тем более что…
                Во-вторых, дело даже не воде, а в том, что статья получилась «ниачём». Вам нравится архитектура вашего приложения — отлично. Но этот опус нифига не полезен тем, у кого другое приложение/система/сервис. Если хотите — распишу системные ошибки в общих рассуждениях и описаниях архитектуры. Но их почти столько, сколько и ошибок в русском языке. Ну и…
                В третьих, упоминать слив кармы в заголовке — это как «грозить южному централу», сольют так, ради хохмы :)
                  +3
                  Я настолько безграмотной статьи тут не припомню. Одно дело — несколько ошибок во всей статье, и то сразу бросается в глаза, но по несколько в каждом предложении — читать становится невозможно, так как вместо попыток понять суть статьи то и дело спотыкаешься на ошибках.
                  +3
                  Максимализм во всей красе. Меня все не любят, значит все
                  сборище тупых особей которые только и могут что комментировать и восхищаться с яндексом и мэил.ру если даже они пишут откровенное гавно.
                    +1
                    Когда твоя система обвалится под собственным весом, новые программисты не смогут разобраться в хитросплетениях «гениальных решений», а ты будешь жить на работе, на грани нервного срыва внедрять простую фичу в течении уже второго месяца, тогда ты воскликнешь:
                    — «О хабр, я был не прав, помоги мне!»
                    Но хабр ответит тебе:
                    — «Нет.»

                    P.S. Чувак, лучше пиши дальше про скриншотеры…
                      0
                      Автор пытался пересказать The Twelve-Factor App и у него получилось так себе.
                        0
                        Автор просто пытает понять на сколько сильно может опуститься его карма.
                          0

                          Что это за кривая попытка увести кукис?


                            0

                            Лол, автор познакомился с Magento.

                              –1

                              Кто пригласил этого обиженного сюда?

                                0
                                он тут давно… И история показывает, что ничего за годы не изменилось…
                                  0

                                  Да; время не всех лечит.

                                –8
                                Да, тут с кармой и минусующими дела обстоят как никогда ужасно. Вот слили мне прошлый профиль, не любят тут правду или мнение, отличное от большинства. Неугодных выдавливают с площадки. Ну и что? Создам я еще 100 акков, проблем-то. Но я продолжу отстаивать СВОЕ мнение, а не прилизанное под большинство, и продолжу стоять горой за своих. Кармабеспредел тут закончится рано или поздно, и будет демократия, когда каждый будет иметь право минусовать. Вот тогда все будет нормально.
                                  +1
                                  А вот скажите, какое отношение имеет этот ваш комментарий к этой статье?
                                    +1

                                    А вот что бы вам не создать свою площадку с теми правилами, которые вы считаете нормальными?

                                      –5
                                      lair, зачем что-то создавать, когда есть готовое, просто происходит беспредел от кучки в 20-30 человек, вот и все. Все наладится. Тех, кто уважает чужое мнение и не живет бредом, что не существует других людей с иными мнениями, будет со временем тут больше. Вот и сейчас кто-то нагадил просто так в карму. Детсад. Mikluho, имеет прямо отношение к тому как портят карму на Хабре. ksr123, да, «демократия на сайте, уважаем мнение любого человека» — говорили они. А по факту беспредел, плевки в лицо, слив комментариев и кармы просто так, исподтишка, аргументировать-то ничего не надо, все анонимно, ответить никто не может. Такая узурпаторская власть расслабляет тут некоторых товарищей. А была бы демократия, я бы тоже ответил в карму за беспредел, ибо за него нужно наказывать. Тогда бы и закончились все эти гадости, все было бы мирно-тихо.
                                        +4
                                        зачем что-то создавать, когда есть готовое

                                        Затем, что у этого "готового" есть свои правила, с которыми вы соглашались при заведении эккаунта.


                                        Вот и сейчас кто-то нагадил просто так в карму.

                                        Нет никакого "нагадил в карму", это исключительно ваша реакция. Карма — это просто метрика, управляемая действиями других участников сайта.


                                        имеет прямо отношение к тому как портят карму на Хабре

                                        Любой участник, пользующийся механизмом кармы, имеет прямое отношение. Да, это так задумано. И что?


                                        просто так, исподтишка, аргументировать-то ничего не надо, все анонимно

                                        Ну… да, а что? Тут не так давно уже была дискуссия, в которой один юзер тоже жаловался на анонимность, люди, поставившие ему минусы, пришли и сказали, за что, все, что получилось — это ведро ругани. И зачем это нужно? Так лучше? Да нет, не лучше.


                                        А была бы демократия, я бы тоже ответил в карму за беспредел, ибо за него нужно наказывать.

                                        А почему вы считаете, что у вас по умолчанию есть право кого-то за что-то здесь наказывать?

                                          –6
                                          «Затем, что у этого „готового“ есть свои правила, с которыми вы соглашались при заведении эккаунта.» — правила тоже меняются, как и контингент. Перемены не за горами.
                                          «Нет никакого „нагадил в карму“, это исключительно ваша реакция. Карма — это просто метрика, управляемая действиями других участников сайта.» — нет никакой исключительной реакции и метрики, управляемой действиями других участников сайта. Есть срач в карму. Точка.
                                          «Любой участник, пользующийся механизмом кармы, имеет прямое отношение. Да, это так задумано. И что?» — так вот не любой. В этом и проблема. Если бы ЛЮБОЙ мог пользоваться, тогда бы было равноправие, беспредела этого не было. Каждый бы 10 раз подумал, прежде чем карму сливать. А зачем оно нужно? За все спрос будет. Со временем.
                                          «А почему вы считаете, что у вас по умолчанию есть право кого-то за что-то здесь наказывать?» — а почему вы так считаете и такие же как вы? Вам это право дал сайт. Вы это доказываете ежедневно из года в год. Так почему другие не могут так же? Что, сразу боязно стало? Конечно. Создали тут ГУЛАГ, кучкой в 20-30 человек, которые себя полубогами почувствовали и творят что хотят, вершители судеб.
                                            0
                                            Не публикуйтесь и не посещайте ресурс, за товар голосуют рублем, за ресурс голосуют участием. Если Вы уверены, что все так как говорите, то очень быстро на хабре останется только 20-30 человек. Жить в обществе — значит следовать нормам установленным обществом, если общество говорить грабить буржуев, то придется грабить, а то буржуем объявят тебя)
                                              –4
                                              При чем здесь участие? А так и будет, если концепцию равноправия и демократии не внедрят, тут будет 20-30 человек. Неугодных выжимают с ресурса, затыкают рты, не понимая, что есть отличное от большинства мнение, есть иные люди. А палка в руках элиты, вот и все. А следовать нормам беспредела никто не намерен.
                                                +2
                                                Лично я здесь за информацией и полезными материалами для развития. Эта статья к ним не относится и лично мне она не нужна, не нужна как посетителю этого ресурса с конкретными целями. И я тоже голосовал бы минусами если бы мог, потому, что иначе статей подобного рода будет больше, а мне это не нужно, я хочу качественную информацию. И те кто ставят минусы в большинстве своем, скорее всего думают также.

                                                P.S. Когда люди расширяют знания человечества (наука), они сначала изучают и стараются понять имеющиеся знания, а затем тратят целую жизнь, чтобы открыть что-то новое. Статьи подобные этой прекрасно показывают, что человек не потратил достаточно времени и усилий для изучения и осознания материалов в которых пытается выставить себя авторитетом. Я отношусь к хабру как к серьезному ресурсу с серьезной информацией в котором почему то стали появляться статьи без токового содержания. Вторая причина минусов, это подача материала и «понт», если человек не прав и готов с этим согласиться, его не будут минусовать, он переведет статью в черновик и исправит ошибки, либо удалит.
                                              +2
                                              правила тоже меняются, как и контингент.

                                              Ну то есть было сообщество со своими правилами и контингентом, а потом пришли вы, и все должно поменяться для вас? Но нет.


                                              нет никакой исключительной реакции и метрики, управляемой действиями других участников сайта. Есть срач в карму.

                                              Это ваше отношение к происходящему. Нет никакого способа доказать, что оно единственно верное.


                                              так вот не любой.

                                              Любой. Вы невнимательны. Прочитайте еще раз: "любой, пользующийся механизмом кармы".


                                              Если бы ЛЮБОЙ мог пользоваться, тогда бы было равноправие, беспредела этого не было

                                              Во-первых, нет никакой гарантии, что беспредела бы не было (равно как и нет гарантии, что он есть сейчас).


                                              А во-вторых, кто вам вообще обещал здесь равноправие? Его здесь нет, ровно в соответствии с правилами.


                                              а почему вы так считаете и такие же как вы?

                                              А я так и не считаю.


                                              Вам это право дал сайт.

                                              Если быть точным, мне это право дали другие участники, когда голосовали за мою карму. Но у меня не было этого права по умолчанию, чего требуете вы.


                                              Так почему другие не могут так же?

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


                                              Создали тут ГУЛАГ, кучкой в 20-30 человек, которые себя полубогами почувствовали и творят что хотят, вершители судеб.

                                              Ну так я повторю свой вопрос: а зачем вы сюда пришли, если здесь все так, как вы пишете? За пределами этого сайта всей этой власти нет.

                                            +2
                                            имеет прямо отношение к тому как портят карму на Хабре
                                            — т.е. вы среагировали на слова в заголовке статьи про «как испортить карму на Хабре», и решили высказать своё демократичное мнение под статьёй про архитектуру.
                                            Думать о том, в чём может быть не прав автор, вам не интересно. Равно как и прочесть комментарии и выяснить-таки, за что его заминусовали…

                                            Кстати,
                                            кучки в 20-30 человек
                                            не сольют карму до -50 или -100. Были бы согласные — были бы и плюсы, что наблюдается под спорными, но интересными статьями/комментариями.

                                          0

                                          Демократия на сайте, серьезно?

                                          0
                                          Не знаю зачем ставить минуса за такие статьи, не считаю что статья прямо какую то ересь пропагандирует.
                                          Но в статье однозначно не хватает подробностей. Автор написал её для себя, человеку не знакомому с особенностями его системы и задачами которые она решает, непонятно ни чего.
                                          В статье есть ответы на вопрос «как?», но не понятно «зачем?».
                                          Если разговор про архитектуру то надо схемку с частями системы, стрелки потоков управления или данных, так понятно будет о чём речь.
                                          Надеюсь эти замечанию помогут автору писать статьи более познавательные и информативные именно для читателей. Писать для себя мне кажется можно в своём блоге, на Хабре читатели не оценят.
                                            0
                                            Значит статье место в черновиках или песочнице.
                                            0
                                            Автор написал её для себя, человеку не знакомому с особенностями его системы и задачами которые она решает, непонятно ни чего.
                                            Ну так этот сайт — не личный бложик, чтобы писать для себя
                                              0

                                              "о таких архитектурных патернАХ"
                                              Вы абориген?

                                                0

                                                "..., и главное простыми словами, рассказать вам о том как хорошую архитектуру."
                                                Блин. Что?
                                                "… луковая и д.р. шаблоны..."
                                                "д.р." надеюсь не расшифровывается как "другие"?
                                                Вы хоть раз перечитывали то что написали?

                                                  0
                                                  Так плохо, что даже хорошо.

                                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                  Самое читаемое