Соревнование между спецами по .NET и Java: ищем золотые фрагменты кода +15


Представьте, что вы оказались в шахте: перед вами каменный монолит, в котором что-то поблёскивает — куски золота, не иначе. Блеск заманчивый, но вокруг грубый камень.

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

Мы предлагаем разработчикам .NET и Java поддаться золотой лихорадке: посмотрим, кто лучше добывает полезный код из монолита. Присоединяйтесь к своей команде и работайте на общую победу: в зачёт идёт каждый правильный ответ.


Представьте, что вы оказались в шахте: перед вами каменный монолит, в котором что-то поблёскивает — куски золота, не иначе. Блеск заманчивый, но вокруг грубый камень.

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

Мы предлагаем разработчикам .NET и Java поддаться золотой лихорадке: посмотрим, кто лучше добывает полезный код из монолита. Присоединяйтесь к своей команде и работайте на общую победу: в зачёт идёт каждый правильный ответ.





Комментарии (9):

  1. XaBoK
    /#24338982 / +1

    |А какие из перечисленных принципов SOLID уменьшают запутанность системы и увеличивают изолированность её модулей?

    |А вот и нет. Принцип открытости/закрытости говорит скорее о правильности использования сокрытия, а не о том, насколько модульной получится конечная система.

    После первого же вопроса решил дальше не продолжать. Если Open/Closed не способствует изолированности модуля, то пожалуй у нас разное понимание этого термина.

    • Enfriz
      /#24339148

      Open/Closed он же про наследование. А в модульных структурах composition over inheritance. Можно сделать жёстко сцепленный монолит, почти не нарушающий open/closed.

      • XaBoK
        /#24339186 / +2

        Полиморфный вариант не единственный. Для меня приоритетным прочтением будет принцип открытости/закрытости Мейера: A module will be said to be closed if [it] is available for use by other modules.

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

        Достигается это обычно через полиморфный принцип, введением абстракции (интерфейс - реализация).

    • makar_crypt
      /#24340398 / +1

      абсолютно согласен.

      Даже если внутри сложный адский класс , то использовать легко как , т.к. "вовне" всего 1 метод.

      mySuberBilling.SPISAT_DENEG(userid, 55);

      Больше тебе ничего не нужно знать. Если это не "уменьшают запутанность системы и увеличивают изолированность ", то ...

  2. hello_my_name_is_dany
    /#24339014 / +6

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

    Как будем обеспечивать взаимодействие между ними? Выберите самый распространённый в микросервисной архитектуре способ.

    Взаимодействие зависит от бизнес-процессов. Что-то можно асинхронно (очереди, брокеры), а что-то нужно синхронно (api, rpc). События лучше через шину передавать, а что-то получить проще через http. Мне кажется, что синхронный самый распространённый, так как это проще и быстрее сделать. Довольно холиварный вопрос

    • Enfriz
      /#24339150 / +6

      Как я понимаю, речь идёт в основном про теорию, превалирующую в литературе по .NET микросервисам. Там что ни книжка, то шина событий. В реальной жизни все мы знаем, что сервисы могут и в БД друг к другу залезать если очень нужно :)

  3. Amalexi
    /#24339154 / +7

    Это был тест на время.

    Спасибо, что предупредили.

  4. IL_Agent
    /#24339748 / +1

    класс может принимать к себе в конструктор объект другого класса и вызывать в нём нужные методы

    И почему это не агрегация?

    • a-tk
      /#24339764 / +2

      Агрегация -- это про хранение (поля объекта)

      Внедрение -- это про получение (аргументы конструктора)