[{"data":1,"prerenderedAt":130},["ShallowReactive",2],{"$fGt4dgi0OvOlbEXVlNxFE8DSSS-LGOTtmdXWCmiumBbg":3},{"article":4,"similarArticles":16,"tagCounts":127},{"slug":5,"content":6,"notes":7,"groupedNotes":8,"title":9,"date":10,"description":11,"tags":12,"author":15},"stemmler-khalil-client-side-architecture-basics-ii","\u003Cp>Данная статья представляет собой вторую часть руководства по архитектуре клиентских приложений, в которой автор рассматривает ключевые принципы проектирования, применимые к фронтенд-разработке. Хотя принципы «чистой архитектуры» (Clean Architecture) эффективны, на стороне клиента не требуется их точная копия; вместо этого важно адаптировать фундаментальные идеи, которые лежат в их основе. Автор выделяет два наиболее значимых принципа: разделение команд и запросов (CQS) и разделение ответственности (SoC).\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Command-Query Separation (CQS)\u003C\u002Fstrong> — это принцип, согласно которому любая операция является либо командой, либо запросом. \u003Cstrong>Команды\u003C\u002Fstrong> изменяют состояние системы, но не возвращают данные, тогда как \u003Cstrong>запросы\u003C\u002Fstrong> возвращают данные, но не вызывают побочных эффектов и не меняют состояние. Основным преимуществом этого паттерна является упрощение рассуждений о коде за счет четкого разделения путей чтения и записи. Это облегчает тестирование, так как проверку запроса проще проводить, если он гарантированно не меняет систему, а также помогает в решении проблем с инвалидацией кэша: кэш остается актуальным до тех пор, пока не будет выполнена команда. Примерами использования CQS являются API хука \u003Ccode>useState\u003C\u002Fcode> в React и структура GraphQL с его запросами и мутациями.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Separation of Concerns (SoC)\u003C\u002Fstrong> подразумевает осознанное соблюдение логических границ между различными архитектурными задачами приложения. Автор отмечает, что даже в простых приложениях одно действие пользователя (например, удаление элемента из списка) затрагивает множество аспектов: отображение, бизнес-логику, сетевые запросы и обновление состояния. Вместо хаотичного размещения разных видов логики (авторизации, валидации и т. д.), их следует классифицировать и делегировать соответствующим слоям.\u003C\u002Fp>\n\u003Cp>Взаимодействие этих принципов приводит к концепции \u003Cstrong>«вертикальных срезов» (vertical slices)\u003C\u002Fstrong>, где каждая функция приложения рассматривается как срез, проходящий через весь стек. Когда разработчик изменяет или добавляет функцию, он работает с конкретным вертикальным срезом, затрагивая только нужные слои (презентационный, слой логики взаимодействия и т. д.). Такой подход минимизирует зависимости между срезами и максимизирует связность внутри них, что позволяет быстрее находить места в коде для внесения изменений. Понимание ответственности каждого слоя помогает разработчикам осознанно выбирать инструменты (например, Apollo Client для данных или Redux для состояния) и решать, стоит ли использовать готовую библиотеку или создавать собственное решение для конкретного слоя.\u003C\u002Fp>",[],{},"Client-Side Architecture Basics: II. Principles (2020)","2026-07-22","Принципы CQS и разделения ответственности для фронтенда — чтение и запись, вертикальные срезы и выбор инструментов.",[13,14],"Frontend","Программирование","Stemmler, Khalil",[17,22,28,32,39,44,49,55,60,67,73,78,82,86,92,99,106,113,117,123],{"slug":18,"title":19,"date":10,"author":20,"tags":21},"mdn-contributors-css-performance-optimization-2025","CSS performance optimization (2025)","MDN Contributors",[13,14],{"slug":23,"title":24,"date":10,"author":25,"tags":26},"simpson-kyle-you-don-t-know-js-async-performance-2015","You Don't Know JS: Async &#x26; Performance (2015)","Simpson, Kyle",[27,13,14],"Javascript",{"slug":29,"title":30,"date":10,"author":15,"tags":31},"stemmler-khalil-client-side-architecture-basics-i","Client-Side Architecture Basics: I. Architecture (2020)",[13,14],{"slug":33,"title":34,"date":35,"author":36,"tags":37},"notashelf-taste-is-all-that-s-left-2026","Taste Is All That's Left (2026)","2026-08-10","notashelf",[38,14],"AI",{"slug":40,"title":41,"date":10,"author":42,"tags":43},"brooks-frederick-p-jr-the-mythical-man-month-essays-on","The Mythical Man-Month: Essays on Software Engineering (1995)","Brooks, Frederick P., Jr.",[14],{"slug":45,"title":46,"date":10,"author":47,"tags":48},"spolsky-joel-the-law-of-leaky-abstractions-2002","The Law of Leaky Abstractions (2002)","Spolsky, Joel",[14],{"slug":50,"title":51,"date":52,"author":53,"tags":54},"kholmatova-alla-design-systems-a-practical-guide-to","Design Systems: A practical guide to creating design languages for digital products","2026-07-16","Kholmatova, Alla",[14],{"slug":56,"title":57,"date":52,"author":58,"tags":59},"martin-robert-c-clean-code-a-handbook-of-agile-software","Clean Code: A Handbook of Agile Software Craftsmanship (2025)","Martin, Robert C.",[14],{"slug":61,"title":62,"date":63,"author":64,"tags":65},"corbin-henry-the-imago-templi-in-confrontation-with-secular","The Imago Templi in Confrontation with Secular Norms; Temple and Contemplation (1986)","2026-08-20","Corbin, Henry",[66],"Корбен",{"slug":68,"title":69,"date":63,"author":70,"tags":71},"damasio-antonio-r-descartes-error-emotion-reason-and-the","Descartes' Error: Emotion, Reason, and the Human Brain (1994)","Damasio, Antonio R.",[72],"Психология",{"slug":74,"title":75,"date":63,"author":76,"tags":77},"dixon-thomas-alexander-bain-herbert-spencer-charles-darwin","Alexander Bain, Herbert Spencer, Charles Darwin (from «From Passions to Emotions», 2003)","Dixon, Thomas",[72],{"slug":79,"title":80,"date":63,"author":76,"tags":81},"dixon-thomas-from-passions-to-emotions-the-creation-of-a","From Passions to Emotions. The Creation of a Secular Psychological Category (2003)",[72],{"slug":83,"title":84,"date":63,"author":76,"tags":85},"dixon-thomas-teoriya-dzheimsa-makkosha-iz-from-passions-to","Теория Джеймса Маккоша (из «From Passions to Emotions», 2003)",[72],{"slug":87,"title":88,"date":63,"author":89,"tags":90},"donnellan-brendan-friedrich-nietzsche-and-paul-ree","Friedrich Nietzsche and Paul Rée. Cooperation and Conflict (1982)","Donnellan, Brendan",[91],"Ницше",{"slug":93,"title":94,"date":63,"author":95,"tags":96},"heilbroner-robert-l-do-machines-make-history-1967","Do Machines Make History (1967)","Heilbroner, Robert L.",[97,98],"Политика","История",{"slug":100,"title":101,"date":63,"author":102,"tags":103},"kolesnitsa-bez-khozyaina","Колесница без хозяина","NotebookLM",[104,105],"Платон","Индия",{"slug":107,"title":108,"date":63,"author":109,"tags":110},"sanders-robert-h-an-alternative-to-dark-matter-modified","An Alternative to Dark Matter: Modified Newtonian Dynamics (from «The Dark Matter Problem. A Historical Perspective», 2009)","Sanders, Robert H.",[111,112],"Космология","Физика",{"slug":114,"title":115,"date":63,"author":109,"tags":116},"sanders-robert-h-deconstructing-cosmology-2016","Deconstructing Cosmology (2016)",[111,112],{"slug":118,"title":119,"date":63,"author":120,"tags":121},"serkov-a-i-dumskoe-masonstvo-i-vremennoe-pravitelstvo-iz","«Думское масонство» и Временное правительство (из «Истории русского масонства. 1845–1945», 1997)","Серков, А.И.",[122,98],"Масонство",{"slug":124,"title":125,"date":63,"author":120,"tags":126},"serkov-a-i-masonstvo-mikhaila-bakunina-iz-istorii-russkogo","Масонство Михаила Бакунина (из «Истории русского масонства. 1845–1945», 1997)",[122,98],{"Frontend":128,"Программирование":129},4,9,1787241654257]