Pull to refresh

Comments 23

А запах остался

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

Ералаш, "Ловись, рыбка"

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

да, тема сисек не раскрыта

Осталось всего ничего, прикрутить вход через oauth (vkid, gmail)

Есть подозрение, что то, что вы называете "клиентским кодом" - это обычный Application Layer. Если я ошибаюсь - поправьте в чём отличия.

Ну и от кода, по-традиции, кровь чуть-чуть из глаз. Позвольте "подушнить":

спойлер
  1. Где PER-2, что за отсебятина?

  2. Что за "__constructor"? Эта ошибка свойственна только новичкам, начинающим изучать язык.

  3. Почему стиль PHP 5/7? А не современный?

  4. Конструктор в любом сервисе не должен вызвать сайд-эффектов, в частности исключений не касающихся pre/post-условий и/или инвариантов. Использование аутентификации внутри, т.е. полноценный воркфлоу - чистейший анти-паттерн.

  5. Те же самые DbC-инварианты тоже опущены, как и типы. Почему?

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

P.S. Почему код не сделать чище, чтоб не травмировать ранимые души разработчиков? Код такой же, но понятнее (19 строк без комментариев по PER-2 у вас и 17 строк в данном случае ниже).

<?php

declare(strict_types=1);

final readonly class UserCredentials
{
    public function __construct(
        /** @var non-empty-string */
        public string $login,
        /** @var non-empty-string */
        #[\SensitiveParameter]
        public string $password,
    ) {}
}

final readonly class POSTUserAuth implements UserAuthenticatorInterface
{
    public function authenticate(UserCredentials $credentials): AuthResult
    {
        // ... 
    }
}

P.P.S. Когда-нибудь на хабре починят тег spoiler...
P.P.P.S. О, починился, когда "P.P.S" добавил. Магия!

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

По поводу слоя Application, соглашусь с вами что код логически больше относится к нему (в некотором смысле я задал тон архитектуре одним классом, да?), но хочу заметить что слои можно называть как угодно, я под Application, например, имею ввиду прослойку между External (внешний мир) и BuisnessLogic(Domain предположу вы бы сказали). Какая разница как называть слои?

Не думаю что ваш переписанный пример проще читать, не вижу смысла что-то доказывать, и каким образом? Трудовую показать?)

В названии конструктора и правда ошибся

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

Может от того, что ты "вкатился" в IT, а не потратил 4-5 лет жизни на получение фундаментальных знаний в приличном ВУЗе, потом годик-другой на стажировку и рост внутреннего грейд?

Образование у меня как раз есть, начинал я свое "вкатывание" с пар по ассемблер и C++

Что программиста, как создателя клиентского кода, можно и нужно контролировать. Когда этот контроль пропадает - получается монолит.

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

Вы хотите сказать что микросервис это панацея и верх архитектурного искусства в программировании? Я лично видел как в большой продуктовой компании фронт ходил на 30+ микросервисов и потом собирал все это в одну кучу. Разбираться в этом было то ещё удовольствие

Автор хотел сказать, что микросервисы - не антоним монолиту. Что под монолитом можно подразумевать разное. И если код разделён на слои, то, наверное, не очень корректно называть его монолитом. Но, очевидно, это - не микросервисы

Но тут автор не совсем прав, так как нужно всего лишь учитывать контекст. В контексте архитектуры сервиса вместо монолита правильнее употребить слова легаси код. А в контексте архитектуры всей системы - монолит и микросервисы

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

это не будет микросервисом, ведь так?

Это уже можно считать распределённым монолитом.
А вообще, если относиться к переменным, как к подам, то каждая функция будет кластером.

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

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

В статье я и задаю вопросы чтобы порассуждать на общепринятые термины

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

Sign up to leave a comment.

Articles