Можно много говорить об архитектуре приложения, 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'ом в вашем приложение, и добавить нужное обновление блока в слоях, и получить соответствующий вывод. Так же и многие модули имеют свои евенты, на которые подписаны другие модули и способны добавлять/либо обновлять данные в переданном наборе. Все это приводит к тому что в приложение, модули мало связанны друг с другом и могут жить друг без друга.

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

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

Комментарии (48)


  1. Wilk
    25.06.2019 13:59
    +6

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

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

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

    3. ???

    4. PROFIT


    1. lnroma Автор
      25.06.2019 14:11
      -13

      Еще забыл послать на хабр первого комментатора )))))


  1. BOOTor
    25.06.2019 14:39

    Преамбулу прочитал — чуть глаза не вырвал себе. Если пишете на серьезном ресурсе статьи — пишите хотя-бы грамотно.


    1. lnroma Автор
      25.06.2019 14:59
      -13

      Не заметил когда это хабр стал серьезным ресурсом. Максимум тут сборище тупых особей которые только и могут что комментировать и восхищаться с яндексом и мэил.ру если даже они пишут откровенное гавно.


      1. lair
        25.06.2019 15:28

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


      1. BOOTor
        25.06.2019 15:31
        +4

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


        1. Labunsky
          25.06.2019 15:40
          +1

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


          1. BOOTor
            25.06.2019 15:42

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


            1. AleXP3
              26.06.2019 03:35
              -4

              обзывать участников сообщества сборищем тупых особей тоже не совсем корректно…
              У человека сложилось такое мнение. То самое за которое "… я бы отдал свою жизнь..."(с) Надо быть терпимее.


              1. lair
                26.06.2019 09:25
                +1

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


                1. AleXP3
                  26.06.2019 09:47

                  Самому себе и надо. Быть вежливым, культурным, грамотным и терпимым нужно, в первую очередь, самому индивидууму. Даже если он работает в IT :)


                  1. lair
                    26.06.2019 11:18

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


                    1. AleXP3
                      26.06.2019 17:01

                      Понятно, что каждый сам решает кем ему быть.


      1. AntonSazonov
        26.06.2019 12:11

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


        1. AleXP3
          27.06.2019 13:06
          -2

          Верно, но все дело в пропорциях. Если раньше тут процветала «борьба мнений», с вменяемыми аргументами как правило, то нынче все весьма упростилось и в фаворе «борьба лайков». Средний IQ ресурса сильно понизился.


          1. AntonSazonov
            27.06.2019 13:19

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


          1. Mikluho
            27.06.2019 14:02

            Да нет тут никакой борьбы лайков. И IQ не сильно изменился. Просто раньше без статей только комментить можно было, да и то не всегда. Сейчас повылезали, отхватывают минуса, жалуются…


            1. AleXP3
              28.06.2019 01:03

              Сейчас стало можно и статьи без модерации размещать? Не знал. Отстал я от жизни значит. Я то еще помню времена когда без статей комментировать нельзя было.


              1. Mikluho
                28.06.2019 01:38

                Да не, модерация осталась, но комментить и без статей можно… Да и желающих что-нибудь сомнительное через песочницу протащить прибавилось.


    1. igruh
      25.06.2019 14:59

      пишите хотя-бы грамотно.
      Выражаете претензии по поводу грамотности — пишите грамотно хотя бы сами.


  1. Mikluho
    25.06.2019 14:44

    Во-первых, тут так много ошибок в русском языке, что даже сообщать об оных не хочется, тем более что…
    Во-вторых, дело даже не воде, а в том, что статья получилась «ниачём». Вам нравится архитектура вашего приложения — отлично. Но этот опус нифига не полезен тем, у кого другое приложение/система/сервис. Если хотите — распишу системные ошибки в общих рассуждениях и описаниях архитектуры. Но их почти столько, сколько и ошибок в русском языке. Ну и…
    В третьих, упоминать слив кармы в заголовке — это как «грозить южному централу», сольют так, ради хохмы :)


    1. vdem
      25.06.2019 15:32
      +1

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


  1. c_kotik
    25.06.2019 15:14

    Максимализм во всей красе. Меня все не любят, значит все

    сборище тупых особей которые только и могут что комментировать и восхищаться с яндексом и мэил.ру если даже они пишут откровенное гавно.


  1. xkondorx
    25.06.2019 15:57

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

    P.S. Чувак, лучше пиши дальше про скриншотеры…


  1. mammuthus
    25.06.2019 16:04

    Автор пытался пересказать The Twelve-Factor App и у него получилось так себе.


  1. MaximusWork
    25.06.2019 17:35

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


  1. tuxi
    25.06.2019 19:13

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



  1. tommyangelo27
    25.06.2019 22:10

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


  1. AntonSazonov
    26.06.2019 08:52
    -1

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


    1. Mikluho
      26.06.2019 10:02

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


      1. AntonSazonov
        26.06.2019 11:13

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


  1. Stalactlte
    26.06.2019 11:18
    -2

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


    1. Mikluho
      26.06.2019 11:27
      +1

      А вот скажите, какое отношение имеет этот ваш комментарий к этой статье?


    1. lair
      26.06.2019 11:49

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


      1. Stalactlte
        26.06.2019 15:29
        -2

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


        1. lair
          26.06.2019 15:48
          +1

          зачем что-то создавать, когда есть готовое

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


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

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


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

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


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

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


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

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


          1. Stalactlte
            27.06.2019 07:49
            -3

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


            1. xkondorx
              27.06.2019 09:18

              Не публикуйтесь и не посещайте ресурс, за товар голосуют рублем, за ресурс голосуют участием. Если Вы уверены, что все так как говорите, то очень быстро на хабре останется только 20-30 человек. Жить в обществе — значит следовать нормам установленным обществом, если общество говорить грабить буржуев, то придется грабить, а то буржуем объявят тебя)


              1. Stalactlte
                27.06.2019 09:39
                -3

                При чем здесь участие? А так и будет, если концепцию равноправия и демократии не внедрят, тут будет 20-30 человек. Неугодных выжимают с ресурса, затыкают рты, не понимая, что есть отличное от большинства мнение, есть иные люди. А палка в руках элиты, вот и все. А следовать нормам беспредела никто не намерен.


                1. xkondorx
                  27.06.2019 10:49
                  +2

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

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


            1. lair
              27.06.2019 11:04
              +1

              правила тоже меняются, как и контингент.

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


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

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


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

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


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

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


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


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

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


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

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


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

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


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

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


        1. Mikluho
          26.06.2019 15:48
          +1

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

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


    1. ksr123
      26.06.2019 12:41

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


  1. SbWereWolf
    26.06.2019 12:31

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


    1. xkondorx
      27.06.2019 09:20

      Значит статье место в черновиках или песочнице.


  1. Mikluho
    26.06.2019 12:48

    Автор написал её для себя, человеку не знакомому с особенностями его системы и задачами которые она решает, непонятно ни чего.
    Ну так этот сайт — не личный бложик, чтобы писать для себя


  1. AntonSazonov
    26.06.2019 13:04

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


  1. AntonSazonov
    27.06.2019 13:33

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