Comments 23
"Здесь рыбы нет"
Очень понравилось вступление про собеседования, ООП и шаблоны программирования, но как только скатились в заголовок, то и остались в нем без пояснения ради чего все это...
Del
Осталось всего ничего, прикрутить вход через oauth (vkid, gmail)
Есть подозрение, что то, что вы называете "клиентским кодом" - это обычный Application Layer. Если я ошибаюсь - поправьте в чём отличия.
Ну и от кода, по-традиции, кровь чуть-чуть из глаз. Позвольте "подушнить":
спойлер
Где PER-2, что за отсебятина?
Что за "__constructor"? Эта ошибка свойственна только новичкам, начинающим изучать язык.
Почему стиль PHP 5/7? А не современный?
Конструктор в любом сервисе не должен вызвать сайд-эффектов, в частности исключений не касающихся pre/post-условий и/или инвариантов. Использование аутентификации внутри, т.е. полноценный воркфлоу - чистейший анти-паттерн.
Те же самые 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 лет жизни на получение фундаментальных знаний в приличном ВУЗе, потом годик-другой на стажировку и рост внутреннего грейд?
а что сказать то хотели?
Что программиста, как создателя клиентского кода, можно и нужно контролировать. Когда этот контроль пропадает - получается монолит.
А когда нет - получаются микросервисы?
Вы хотите сказать что микросервис это панацея и верх архитектурного искусства в программировании? Я лично видел как в большой продуктовой компании фронт ходил на 30+ микросервисов и потом собирал все это в одну кучу. Разбираться в этом было то ещё удовольствие
Автор хотел сказать, что микросервисы - не антоним монолиту. Что под монолитом можно подразумевать разное. И если код разделён на слои, то, наверное, не очень корректно называть его монолитом. Но, очевидно, это - не микросервисы
Но тут автор не совсем прав, так как нужно всего лишь учитывать контекст. В контексте архитектуры сервиса вместо монолита правильнее употребить слова легаси код. А в контексте архитектуры всей системы - монолит и микросервисы
Если относится к классам как микросервисам и построить взаимодействие через шину данных (gRPC) это не будет микросервисом, ведь так? Мне кажется что микросервис это про вывод задачи и зависимостей которые помогают её реализовать в отдельный докер контейнер например. Что именно ложить в микросервис и для чего уже отдельный вопрос.
это не будет микросервисом, ведь так?
Это уже можно считать распределённым монолитом.
А вообще, если относиться к переменным, как к подам, то каждая функция будет кластером.
Всё-таки важно говорить общей терминологией и оперировать принятыми понятиями, а не уходить в философию.
Я тоже не понял, про что статья. Есть рассуждения, но они быстро заканчиваются ничем.
и что это было...
Клиентский код