Задать вопрос
Ответы пользователя по тегу SOLID
  • О чем на самом деле идет речь в single-responsibility principle?

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

    Представим себе такой псевдокод:
    конфиг = прочитать_конфиг_из_файла()
    соединение = открыть_соединение_с_бд(конфиг.строка_подключения)
    соединение.сохранить(данные)
    соединение.закрыть()


    Если у нас контекст, что это какой-то большое приложение, которое написано в ОО-стиле, то тут SRP явно нарушен:
    Читать конфиг и открывать соединение нужно в другой функции и передавать в функцию по сохранению данных уже открытое соединение. Обработку ошибок при чтении файла или подключении стоит делать в другом месте.
    Разделение этого когда повысить надёжность и облегчит разработку и поддержку, уменьшится дублирование кода, а местами код станет сильно проще.

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

    Если после вынесения ответственностей в отдельные модули приводит к снижению качества кода и усложнению поддержки, то SRP в изначальном виде нарушен не был, либо ты допустил ошибки при попытке выделить ответственности.
    Ответ написан
    Комментировать
  • Почему в php нельзя уточнить класс аргумента при имплементации интерфейса?

    Потому что это бы нарушало принцип подстановки Барбары Лисков.

    Интерфейс предполагает, что ты можешь принимать любой объект, который реализует интерфейс ArgInterface.
    => Если ты сузишь тип, то ты уже по факту не сможешь поддерживать контракт.

    По тому при реализации интерфейса можно только расширять тип принимаемых аргументов, но не сужать.
    Ответ написан
    Комментировать
  • Где взглянуть на C# проект с "эталонной" архитектурой?

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

    Всегда можно к чему-то придраться.
    Качество архитектуры можно понять только в динамике - легко ли вносить изменения в продукт, или сложно.
    А так есть eShopOnWeb и eShopOnContainers
    Ответ написан
    Комментировать
  • Как составить план обучения после основ С#?

    Раз у тебя уже есть готовый список, то вот что можно ответить:

    Самое важное, без чего ты вообще никак не сможешь работать:
    ASP NET Core, Postgresql
    Им нужно уделить больше внимания.
    Курсы есть и по тому и по другому, есть и вполне хорошие бесплатные.
    Например у Postgrespro есть бесплатный курс (тебя должен интересовать PostgreSQL для разработчика) и книги.

    Затем то, что точно пригодится в работе, но что сравнительно быстро можно изучить:

    git - ты его не упомянул, но он очень важен. Есть бесплатная книга Pro Git где подробно описаны все его команды + есть немало видео на youtube где в действии показано, как им пользоваться.

    SOLID - можно почитать статьи и книгу "Чистая Архитектура". В любом случае от тебя не ждут знаний на уровне архитектора тут.

    Unit tests - просто попробуй сам писать тесты на каком-нибудь фреймворке. Например на xUnit.
    Ещё можешь почитать книжку Кента Бэка про разработку через тестирование.

    Code review - просто почитай пару статей о том, зачем это нужно, и как не быть мудаком-ревьюером, и как принимать обратную связь на ревью.

    Методологии разработки - просто ознакомься с теми, какие вообще есть.
    Большинство сейчас работают по Scrum или Kanban (либо на чём-то производном от них).
    Можешь ещё agile manifesto почитать
    Опять же - от тебя тут не ждут знаний уровня менеджера проектов, и тебе не придётся с нуля процесс разработки в команде выстраивать.
    Ответ написан
    1 комментарий