Предыдущий тред был тут: >>3283119 (OP)
Старые треды тут https://2ch.hk/pr/arch/ (М) (искать по слову php), а также на архиваче и в гугле по словам по словам "клуб изучающих PHP".
С чего начать - основы PHP
Наши уроки по PHP собраны по адресу http://codedokode.github.io/phpbook . Это учебник для изучающих с нуля. Там есть задачи, их нужно решать. Но если этот учебник тебе не нравится, можно читать любой другой. Или официальный справочник ( https://www.php.net/manual/ru/langref.php ). Или все сразу.
Если что-то непонятно, запости код и попроси подсказку или поищи задачу в архиве тредов.
Какой редактор использовать
Простые задачки можно решать в онлайн-песочницах вроде https://onlinephp.io/ , https://paiza.io/en/projects/new?language=php , https://www.programiz.com/php/online-compiler/ , но для программ посложнее лучше установить редактор. Есть (дорогая) IDE PhpStorm, есть бесплатный Netbeans и VSCode, условно-бесплатный Sublime Text. Чтобы в последних получить автодополнение для PHP, нужно установить и настроить PHP language server.
Вот инструкции по установке PHP на компьютер: https://github.com/codedokode/pasta/blob/master/soft/php-install.md
Гайд по командной строке: https://github.com/codedokode/pasta/blob/master/soft/cli.md
Что изучать дальше
Зная лишь основы PHP, сайт ты не сделаешь и работу не найдешь. Обычно от начинающего требуют чуть-чуть больше:
PHP, ООП, основы HTTP, HTML/CSS (основы верстки), JS, SQL, PDO, MVC, git, composer, какой-нибудь фреймворк (Laravel или Symfony), основы автоматического тестирования, основы linux, английский.
Вот неофициальный роадмап (карта того, что можно изучать): https://miro.com/app/board/o9J_lbUUBBQ=/
По многим из этих тем у нас есть уроки или задачки:
- для понимания, что такое веб-сервер, прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- для понимая MVC, работы с БД и формами, реши задачу про студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- далее есть более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- задача, близкая по сложности к реальным задачам на Laravel/Symfony: https://gist.github.com/codedokode/8733007
- после нее можно изучать автоматизированное тестирование https://gist.github.com/codedokode/a455bde7d0748c0a351a
- если ты все решил, переходи к Symfony или Laravel
- почитать про паттерны можно тут https://designpatternsphp.readthedocs.io/ru/latest/ (если ты не изучил ни одного фреймворка, то это будет рановато). Если хочешь увидеть примеры использования паттернов в реальном коде - ковыряй исходники Симфони, например Symfony Forms. Ну и скажем честно, начинающему без опыта, который не видел сложный код, паттерны понять будет сложно.
- для улучшения английского можно читать news.ycombinator.com - там много статей на тему IT.
Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.
- задачи на HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- хороший учебник по JS: https://learn.javascript.ru/
- задачи на JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- задача на SPA (сложно): https://github.com/codedokode/pasta/blob/master/js/spa.md
- проверялка решений на JS: http://dkab.github.io/jasmine-tests/
- задачки на SQL: https://www.sql-ex.ru/ (нужна регистрация), https://sql-academy.org/ru/trainer и немного наших задачек: https://github.com/codedokode/pasta/blob/master/db/databases.md
Что еще почитать
- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- https://phptherightway.com/
- Книга: Профессиональное программирование на PHP Джордж Шлосснейгл
- Книга: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- Про Git: https://git-scm.com/book/ru/v2
- Задачи на алгоритмы: https://codeforces.com/problemset
Дополнительно
- скачать учебник: зайди на https://github.com/codedokode/phpbook, нажми зеленую кнопку Code -> Download ZIP, распакуй на рабочий стол и открой index.html
- что будут спрашивать на собеседовании, если 0 опыта - будут гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- сколько времени надо изучать все это? - все зависит от тебя, в районе 10-15 месяцев
>почитать про паттерны можно тут
Мне надо про паттерны работу написать, с фреймворками еще не работал, но знаю ООП неплохо. Получится?
Может получится, а может и не получится. Дерзай!
Пхп ето кал, если есть возможность залететь на другие стеки, то дерзай, а пхп только в последнюю очередь рассматривай
>яндексы вообще не учат на пыхеров
Так это как раз хорошо! Значит, меньше вкатунов с говнокурсов, меньше алгоритмического дроча, требований вышки, зарплат по 40к на старте и вот этого всего. К слову, говнокурсы яши (а с ними и скуфбоксов etc) нигде не котируются - яндекс сам своим хрюшам спускает инструкции отсеивать выпукников собственных курсов, потому что прекрасно понимает что торгует калом и прост прогревает лохов на бабки.
Это ты еще битрикс не видел!
Там вообще по 0 откликов на каждую вакансию, самое то для вкатуна 👍
>яндекс сам своим хрюшам спускает инструкции отсеивать выпукников собственных курсов, потому что прекрасно понимает что торгует калом и прост прогревает лохов на бабки.
Неужели нет человека внутри яндекс который сольет эти инструкции в сеть и разошлет вкатунцам отдавшим 150к за обучение🤣🤣🤣😂😂
>Подскажите, этот ваш ПХП вообще что-то актуальное или уже нет?
Он будет актуален ещё лет 20 как минимум. В мире есть куча консервативных людей, которые как выучили jquery, php, mysql двадцать лет назад, они так и будут лет 20 его использовать, до 2044 года. И лично я не считаю пхп ужасным языком. Проблема не в языке. Проблема в мудаках-программистах и мудаках-заказчиках. Кто заказывает проекты на пхп? Мелкий бизнес в основном, каждый второй говномагазин в интернете написан на пхп. И разные далёкие от айти люди. Типа логических компаний, перевозчики, депутаты, государственные органы, косметологи, и прочее. Будет ли технологическая компания, которая прям живёт и дышит айти разрабатывать проекты на пхп? Да конечно же нет! Пхп нахуй не нужен яндексу, гуглу, амазону и т.д. Потому что он медленный и сфера его применения ограничена одним вебом. Стоит ли пхп учить на перспективу? Конечно же нет. Перспективы у языка нет никакой.
Лол, если на этот кал требуют два года опыта, то на остальные стеки даже смотреть смысла нет. Вкат в айти всё. Нужно вкатываться в рабочие профессии типа заводчан или сварщиков
100% помощь, а не 100% трудоустройство. Инфоцыгане любят такие тонкие моменты где можно развести гоя
>почему тогда у них на глагне написано что 100% помощь с трудоустройством после окончания курса у яндекса?
Это просто маркетинговое наебалово. "Помощь" можно трактовать как угодно. Можно сказать вы подписались на наш список рассылки с вакансиями - это мы помогаем вам. Тоже самое, вкатываетесь или вернём вам деньги. Я могу статистически посчитать, допустим один из 5 не вкатывается. Ага, значит я могу повысить стоимость на 20% и я ничего не теряю, если верну этому чуваку деньги.
В любом случае, надо читать договор и мелкий шрифт. Наплести они могут что угодно.
>Ага, значит я могу повысить стоимость на 20% и я ничего не теряю, если верну этому чуваку деньги.
Всё проще - требуем от вкатуна 10 письменных отказов, приносит - возвращаем деньги. Интересно, был ли хоть один прецедент возврата бабок за говнокурсы.
Каждый залетающий в айти и этот раздел думающий что после курсов будет комо то нужен. Так вот, такого не было никогда, владельцы курсов просто продают лопаты во время местной залотой лихорадки, им вск равно на качество продукта. Привыкайте воспринимать курсы просто как интро к каком-то иеструменту, в любом случае будете 90% времени гуглить и учиться со стронних источников и доков, если конешно хотите в айти попасть.
Нет, обязательно чтобы указано было что с яндекса тоже не берут
Норм парни не кодят на пыхе из-под винды. Хотя когда я работал на битриксе, там опытные челы его использовали, потому что надо логиниться в учетки заказчика, а там свои впн настроены и клиенты ток под винду. Лучше потрать пару дней и попердолься с vagrant homestead.
>и норм парни вручную все настраивают
Норм парни докером пользуются, лол. Как раз вручную настраивать это через опенсервер, потому что "не автоматически"
В одной маленькой конторе использовали вагрант, ковырялись в конфигах сервера и работали с консолью, затем успешно мигрировали на докер. А вот в других "крупных" компаниях использовали open server. Причем даже было такое, что у одного опенсервер на апаче, а у другуг на нджинксе.
>я говнокодер
Ты лишаешь себя опыта работы с линуксом
Ну я с заделом на будущее. Пока просто не особо пазл складывается, хотя вроде знаю какая технология для чего, например редис, бд, ларавел, апачи, пхп, реббитмк, а как все это вместе сделать сложить и почему именно линукс понимания нет. Я так сказать неуспешный студент и вписался в проект один. Поэтому выбрал что то попроще по типу опенсервер где все уже есть
>и почему именно линукс понимания нет
Хостинги на линуксе (если это не для .NET насколько я помню). Но пока нет доступа к терминалу, можно не заморачиваться наверное.
А че там накатывать то? Я просто скачал докер, ткнул галку с wsl, всё запускает работает, как я понимаю используя всл сразу.
Или ты предлагаешь прям взять всл, туда скачать образ линукса и уже на Линуксе запускать докер? Тогда наверное проще виртуалку поставить
>и почему именно линукс понимания нет
Потому что Windows Server в целом не очень. Для маленьких сайтиков он слишком сложный и обладает кучей корпоративных функций. Для больших сервисов он недостаточно свободы дает.
У него ниша это только "энтерпрайз .NET". То есть вы не айтишная компания, например крупная авиакомпания. И у вас есть собственное мега-приложение на .NET которое вы используете для автоматизации работы компании.
Вот тут виндосервер еще +- норм. Но опять же, не в российских реалиях.
>100% помощь
Максимум разберут типичные вопросы с собесов и помогут с оформлением резюме, всё. По блату никого никуда не протолкнут.
>>24498
Всё так. Сам пробовал курс по питухону, это пиздец, никто вообще не понимал чё к чему, все повторяли какой то код за преподом как обезьянки, потом он по минимуму пытался объяснить что это всё значит и переходил к следующей теме. Тупо чел сидит на зп и ему срать какого качества кадры выпустятся с курса, задаёт алгоритмические задачи при том что алгоритмам даже не учит, они вообще не упоминаются на курсе, то есть он даже не вдупляет чему вообще учил и какого уровня знаний ожидать от людей. Пара дней уделяется ООП, столько же SQL, и сразу по программе приступаешь к Джанге с кашей в голове. Мм найс. Может в яндексе всё получше, учитывая что там годовая программа, хз.
>владельцы курсов просто продают лопаты во время местной залотой лихорадки
По-моему и золотая жила уже иссякла.
До сих пор яростно пиарят курсы. Каждое видео открою - там реклама ебаного курса
>Норм парни не кодят на пыхе из-под винды.
Сейчас 2024 год на дворе, в win10 есть ядро линукса из коробки, wsl называется.
Он ломается блядь, сука, вы в КАЖДОМ треде про это говорите нахуй. Вам лень по ссылкам в шапке и по гуглу метнуться?
Ты вообще знаешь что такое wsl? Редактор запускаешь из под винды, а кодовая база находится в wsl. И пхпшторм не нужен когда есть vscode.
Ну чёт слышал, попробовать надо.
Если только вкатываешься то опенсервер норм.
В тот момент, когда ты поймёшь, что пердолинг с виндой в попытках завести очередную хуйню начинает занимать слишком много времени, спокойно перекатишься на Линукс. Убунта казуальнее некуда.
Для более-менее серьёзной разработки Линукс необходим. Винда слишком херово работает под веб парашу.
И это говорит тебе убеждённый хейтер красноглазой недосистемы.
> В тот момент, когда ты поймёшь, что пердолинг с виндой в попытках завести очередную хуйню начинает занимать слишком много времени, спокойно перекатишься на Линукс
АХАХАХАХААХАХАХАХА
Даже спермоблядь, макакающая на мразотном быдлокодерском ПЕХОПЕ, признаёт, что виндус говно, спешите видеть.
Это к репетитору
Ну надо кароч нормально так сесть, с пивасом и кальмарами. И нормально так прочитать доку за вечер. Ну и все кароч.
https://github.com/casshh87/uppu.ru
Потом переделаю
А что с ним не так?
1) Есть еще какие-нибудь ресуры, где помогают реализовать свой pet проект?
2) Какие самые понятные ресуры для полного понимая MVC и SOLID, чтобы хватало на проекты и собеседования?
3) Есть какой-нибудь понятный курс для изучения алгоритмов (желательно с применением PHP)?
4) Как быстро освоить книгу Чистый код Душного Боба?
5) Какие курсы или ресуры посоветуете для изучения английского
1-4 - подписка на Хекслет за 4к в месяц, лучше по пыхе ничего нет, там как раз разбираются все эти штуки + книга ACWA Book Adel F.
5 - хз это в /fl/
Первое что бросается в глаза: используется композер, прописан автолоад, но какого-то хуя везде все равно include и require. Разберись как работает автозагрузка наконец.
Второе это классика: вся хуйня со всей хуйней. Вот есть у тебя файл file.php Там внутри внезапно нихуя не file, а FileHandler что бы это не значило. Который делает кучу какой-то хуйни, рисует какие-то теги, за каким-то хуем лезет в базу и поет и танцет и кофе варит. А самое главное там в конце файла прописан какой-то код, который дропает все приложение и чем-то срет в буфер вывода.
Ну тебя самого то не смущает что при подключении файла с названием file у тебя приложение работу завершает? Я уж не говорю про file_list в котром уже какой-то свой хэндлер и внезапно появляется класс File. Какого хуя FIle не в file, а в file_list - загадка.
Выглядит типичный говнокод на пхп пятнадцатилетней давности. Это даже не процедурное программирование, а какое-то полускриптовое, я хуй его знаю. То что там какие-то классы используются погоды не делает, они все равно хранятся в каких-то глобальных переменных, а вместо функций используется подключение файлов.
1. Надо изучить как пишутся ооп приложения на пхп, как работает автолоадинг, как пишутся и используются классы итд.
2. Надо разобраться как пишутся сайты. Как создать конфиг, что такое роутинг, про Index.php итд.
3. Надо наконец узнать что такое MVC и привести в минимальный порядок кодовую базу.
Дальше еще пунктов до тысячи. Но начать нужно с этих трех.
>1) Есть еще какие-нибудь ресуры, где помогают реализовать свой pet проект?
>2) Какие самые понятные ресуры для полного понимая MVC и SOLID, чтобы хватало на проекты и собеседования?
>3) Есть какой-нибудь понятный курс для изучения алгоритмов (желательно с применением PHP)?
>4) Как быстро освоить книгу Чистый код Душного Боба?
Не, братан, ниче больше нет во всем интернете. Все сами тыкаем вслепую.
Выглядит страшно такая конструкция с геттерами и сеттерами. Мне нубу с публичными атрибутами такого не понять.
языку почти 30
UTF в язык так и не добавили
basedir() так и не может не обосраться на директории с русским названием
Пасиб за подробный ответ, будем изучать
Типа загружается файл -> хешируется, на выходе сохраняется в папки и вложенные папки (чтобы ФС не охуевала от количества) -> uploads/dfdf/dfdf/vbvbcv.jpg
У нас название тримится по три символа и создаются подпапки по на abc/def/ghi/abcdefghi.txt
Рандомное название + md5? Или прям хеш самого файла вычисляете типа crc?
Так же сама генерация в цикле типа while (true), типа если файл там такой есть, то по новой имя придумываем?
>Рандомное название + md5
Да, именно так.
>типа если файл там такой есть
Теоритически такое может случиться. Но за 5 лет еще не случалось. Может это заслуга генератора случайной строки во фреймворке.
https://scrutinizer-ci.com/g/yiisoft/yii2/code-structure/master/operation/yii%5Cbase%5CSecurity%3A%3AgenerateRandomString
Ну вот как я тебе написал - я так уже делал с while(true) if file_exists ... работает. У md5 коллизии же, перезапишет какой-нить файл и все
>>29994
Ну если ты планируешь там держать больше 10к файлов, то наверное и стоит замарочиться. Я бы архивиро архивированием.
>Я бы архивиро архивированием.
Чиво?
Это контент файлы для сайта, или пользователей. Тут явно архив не подойдет, т.к. нужно отдавать все
>>29985
Так коллизии именно то что и нужно.
Берется хэш от содержимого файла. Это и будет его название.
Потом этот файл ищется в структуре, обычно это двойная вложенность по первым буквам /ab/cd, но если планируются миллионы файлов то можно сделать тройную.
Если файл с таким названием уже есть, то сравниваем тело файлов и в 99.999% случаев это дубль.
Какой нахуй цикл? Мы тыкаем в то место где должен храниться новый файл и проверяем занято ли оно.
>Какой нахуй цикл? Мы тыкаем в то место где должен храниться новый файл и проверяем занято ли оно.
Это прикол? Ты проверяешь - он есть. Далее пересоздаешь - такой тоже есть. Твои действия без цикла? 10 раз if else бужешь писать, если есть то пересоздать имя?
Мой же вариант - цикл, сохранили -> break; или повторно создаем имя которого нет в папке
Бля, ты рофлишь? Если это один и тот же файл, та каким хуем он два раза будет в твоем хранилище? Хэш берется ОТ ТЕЛА ФАЙЛА БЛЯДЬ, он не случайный.
Он не-модный, но актуальный кто бы там чего не говорил.
>В мире есть куча консервативных людей, которые как выучили jquery, php, mysql двадцать лет назад, они так и будут лет 20 его использовать, до 2044 года.
Дело даже не в этом, дело в том, что создано дохуя легаси которое надо поддерживать и развивать. Да и инструментарий стал настолько хорош, что на пыхе современной с совреенными фрейворками тупо быстро и удобно разрабатывать проекты типовые. Берешь условный Laravel и поехали.
>Выглядит типичный говнокод на пхп пятнадцатилетней давности
То ощущение когда я вижу код худшего качества, который был написал американцем менее 10 лет назад для крупной компании кек.
>>30247
Да нет, просто так существует жизнь вне айти-компаний. Это хэлскер и образование, у них айти тема это просто инструмент, работает и слава богу. Васян пришел считай нубом к ним, делал у них считай всё что надо, опыта не было, скиллов не было, хуяк-хуяк и клепал, а хуле работает, задачу выполняет. Зашквары там конечно были, вроде плэйнтекст паролей в БД и т.п., но в целом почему нет. У меня конечно глаза на лоб немного вылезли, поэтому мы им по чуть-чуть переписывали самый зашквар и более нормальные подходы внедряли.
У меня одного ощущение что ебаные исключения - это говно и ненужный рак?
Серьезно, по факту это сраный goto хуй знает куда.
Если ты (или библиотека которой ты пользуешься) пробрасываешь исключения грамотно, то есть свой тип исключения на каждую возможную проблему - у тебя уродуется код, половина логики переезжает в блоки catch. Если же исключения кидаются хуй знает как (99.9% всех библиотек), то и обработать их ты нормально не можешь, и все что тебе остается - оборачивать код на самом верхнем уровне просто для того, что бы отдавать клиенту не 500 ошибку, а 400.
Проанализировал свой опыт.
Сколько раз у нас были проблемы от того, что мы не перехватывали исключения, а прямо и открыто хуярили юзеру 500 ошибку в ебало?
Да на самом деле нисколько, лол. Дело кончается визгами менеджеров и оперативным фиксом проблемы.
А вот попытки ОБРАБАТЫВАТЬ исключения рано или поздно кончаются тем, что ты проблему скрываешь, но не решаешь. И вот в таких случаях всплывают уже косяки такого уровня, при которых тимлида ебут, а разрабов пиздят арматурой.
Годтир решения - на одном из проектов мы перешли на пробрасывание по методам дтошек, которые содержали в себе статус операций, массив ошибок если есть, массив соообщений если есть. И это было супер пиздато. Ловкой исключений занимались только там, где были уверены что это необходимо и мы этой ловлей делали что-то полезное и нужное,.а не заметали проблему под плинтус.
Мы вообще про разные подходы говорим, ты свое думаешь, я свое. Надо изначально было писать - для чего. А не додумывать что вот у него так как у меня. - это правило нужно внедрять всем программерам чтобы не плодить лишние разговоры и недопонимание.
Мой вариант просто сохранять файлы, если удаляешь пост, то все удаляется без лишнего кода и напряга что затронет что-то другое.
Твой вариант файл строредж для хостинга, чтобы экономить место на диске, но дрочить процессор. Вычисления хеша файлов очень долгая операция. Если есть 7zip архив, сам проверь, там в контекстном меню будет вычисления crc32 + будет хуево если популярный сервис куда дохуя че заливается и нужно думать как все делать асинхронно для обработки, очереди подключать, логику разруливания мол если Вася удалит пост, то общий файл не удалять.
>Мы вообще про разные подходы говорим
Ну если ты называешь подходом "насрать хуйней", то да. Я говорю как сделать нормально.
>Мой вариант просто
У нас разные понимания о простом. Чтобы сделать все по уму нужно написать небольшую либу из нескольких классов. Это для программиста минимальные усилия, делается за пару часов. Я хуй знаю куда еще проще. Запихнуть это все в одну функцию, которую вклячить где-нибудь прямо в шаблоне посреди хтмл?
>Твой вариант файл строредж для хостинга, чтобы экономить место на диске, но дрочить процессор. Вычисления хеша файлов очень долгая операция.
Ну и нахуя ты начал кукоретизировать если нихуя в теме не шаришь? Вычисление хеша будет твоей самой меньшей проблемой при большом потоке файлов и нагрузке.
Короче как всегда. Написать нормальный код это сложна. А маняфантазировать про то как оно "если популярный сервис" легко.
>"насрать хуйней
Аргументы
>Я говорю как сделать нормально.
Аргументы
Ты же думаешь что ты обладаешь авторитетом и твои слова теперь нужно воспринимать на веру?
>кукоризироваться
>не шаришь
>маняфантазии
Очередной петух ЧСВ-шный, который в реальности смотрит всегда в пол, прячет глаза и боится людей в реале, чтобы по ебалу не получить ненароком, сейчас же, сидя в безопасности расписывает тему на 10 постов с целью самоутвердиться хоть где. Вместо того чтобы написать верный путь в качестве одного ответа, он плодит посты как хуесос и выебывается наслаждаясь что гандона вынужденно терпят - Да пошел ты нахуй чмошник.
Адеватный люди либо не отвечают, либо отвечают сразу и не сосут внимания на 10 постов попутно говоря что ты хуесос. Это как ученик приходит учится водить машину, а инструктор вместо того чтобы показать как - хуесосит его. Так вот нахуй иди потомок гнилозубых крестьян, шариков ебаный.
Бля, будет бизнес, с русскими работать не буду. А то как же свое ВЕЛИЧИЕ не продемонстрировать, не самоутвердится за счет другого, нахуй иди пидорас
Ебать там насрано в башке.
С такими вводными надо не в пхп вкатываться, а на прием к психологу.
С пассажа про крестьян, бизнес и величие прогиграл.
А Логи что пишут? Вообще связку пхп-апачи-БД можно и вручную запустить спокойно
Вот такую штуку заметил, теперь надо поискать что за сервер уже работает, хотя вроде никаких не ставил и не запускал.
Всё анон, разобрался, оказывается какойто апач и правда уже был в системе и работал, теперь всё норм, решил проблему с ксампом, спасибо!
Поясни вкатуну. Типа что жс можно и на бек сайд использовать?
>поделиться ссылкой
>годноту найти сложно
У тебя уже с логикой траблы. Ну и вкатываться сейчас бесполезно
Хуйня.
Когда работал на прошлом проекте, при создании сущности было нахуеверчено несколько обработчиков, которые ходили в сторонние сервисы и что-то писали в базу. Заебался это говно отлаживать. Какие нормальные юзкейсы есть?
А причем тут симфони? Как событийная модель связана с фреймворком?
Событийная модель нужна чтобы избегать прямых вызовов. Чтобы не было кода типа: сделай это, потом вот это, потом вот это, а потом еще то. Потому что это излишняя централизация, точка пересечения всего на свете и генератор багов.
Событие это результат выполнения чего-то. Доменное событие - это результат выполнения метода доменной модели. Системное событие - это резултат обращения к методу апи или контроллеру. refreshCart() -> CartRefreshed, createOrder() -> OrderCreated.
Юзкейсов для этого миллион. По сути весь CQRS, всё DDD и микросервисы так работают. В статью не уместится объяснение как это правильно организовывать и почему. Это надо серию лекций проводить. Объяснять что такое юнит оф ворк, про два эвент лупа итд.
Тут скорее вопрос какие такие проблемы с отладкой? Включил дебаггер, поставил брейкпоинт в нужном обработчике, дернул апишку через постман или форму в браузере отправил. Ну или в нужных обработчиках логи подрубил и все. Какие проблемы?
>Когда оправдано использование событий
Почти никогда
>Какие нормальные юзкейсы есть
Когда лень думать над потоком выполнения данных -- пукнул в кафку и забыл
Таненбаума еще прочитай и в опенсорс коммиты.
>И надо ли перед этим паттерны проектирования знать
Это для продвинутых, ты все равно нихуя не поймешь если прочитаешь про них
>Нужно ли попробовать свой фреймворк создать перед работой с другими?
А зачем? На работе ты все равно будешь работать только с ларкой или симфонией. Как работает mvc надо знать, в вакухаа часто встречается такое требование, но с этим разберешься по ходу изучения существующего фреймворка.
>>36179
Я лично понял, уделив пару недель чтобы вникнуть. Они напрямую из изучения ооп вытекают как и солид, и грасп, эти темы неотрывны друг от друга. Не понимаю, как можно обходить эти темы при вкате. Это же маст хэв.
>из изучения ооп вытекают
>грасп
>Я лично понял, уделив пару недель
И сразу ясно что ты нихуя не понял.
Грасп это сборник паттернов аля GoF. Только крайне неудачный. Навыдумано куча не прижившихся теминов для уже устоявшихся вещей. Перепутанны паттерны с принципами. Все это полито хуевым слогом автора и хуевыми же переводами из девяностых. Интерес это представляет чисто археологический. И уж совершенно точно ниоткуда не вытекает и никуда не втекает.
>Грасп это сборник паттернов аля GoF.
Грасп это не "шаблоны" буквально, просто так назвали, а скорее "принципы", - это слово больше подходит, - такие как солид - как разделять ответсвенность между классами при проектировании. В нем хотябы эти 2 высокое единство и низкое зацепление напрямую проистекают из приинципа единой ответсвенности и инверсии зависимостей.
Паттерны банды четырех, у меня сложилось впечатление, практически все solid'ные [по крайней мере из примеров на рефакторинг гуру], это действительно "паттерны", а не это грубое слово "шаблоны": фабрики, адаптеры, это все добро ты пишешь и без знания как они именуются, но знать бы хорошо. Кроме банды 4х еще есть другие такие как Спецификация, null object, текучий интерфейс.
>И уж совершенно точно ниоткуда не вытекает и никуда не втекает.
Как же - вся эта ооп хуйня взаимо переплетена, логикой и здравым смыслом, даже многослойная архитектура, ddd, например, то что зависимость слоев должна быть внутрь.
Это помогает писать понятный хорошо поддерживаемый код.
Разве я где-то ошибся, не нужно это знать вкатуну? Просто в вакансиях вижу часто, значит есть причина, по которой это туда записывают.
>Грасп это не "шаблоны" буквально, просто так назвали, а скорее "принципы"
Пчел. Хватит гадать и фантазировать. У этой хуйни есть конкретный автор - Крейг Ларман. У него есть конкретная книга. Книга хуевая. Че ты тут раскумариваешь вилами по воде?
>Паттерны банды четырех, у меня сложилось впечатление, практически все solid'ные
Опять, нахуя с умным видом че-то из пальца рассусоливать? Год выпуска книги 1994. А значит она основана на опыте ДО 1994 года. Никакими солидами еще лет десять вонять не будет.
>Как же - вся эта ооп хуйня взаимо переплетена
>даже многослойная архитектура, ddd, например, то что зависимость слоев должна быть внутрь
Просто чушь написана. Внутрь чего блядь? Снаружи чего? Ты просто определение "слоя" можешь сформулировать?
>Это помогает писать понятный хорошо поддерживаемый код.
Формальные доказательства этому какие-нибудь есть? Вот и думай.
>Разве я где-то ошибся, не нужно это знать вкатуну? Просто в вакансиях вижу часто, значит есть причина, по которой это туда записывают.
Потому что хотят сеньора по цене вкатуна. А получают человека, который начитался всего подряд и следующие десять лет будет эту информацию в башке систематизировать, производя километры говнокода. В лучшем случае разумеется. В худшем будет просто срать говном и в бороду не дуть.
>Хватит гадать и фантазировать. У этой хуйни есть конкретный автор - Крейг Ларман.
Я чё, ебич книги читать? Лучше тикток короткие статьи посмотрю, видосы в ютубе, да чат гопоту подрочу. Меньше времени и мозговых усилий.
> Год выпуска книги 1994.
Я их везде вижу, эти билдеры, адаптеры, фабрики. Что ты имеешь ввиду?
>А значит она основана на опыте ДО 1994 года.
И что с того? Законы гравитации открыты Ньютоном в 1666 году.
>Внутрь чего блядь? Снаружи чего?
Зависимости классов в каждом слое должны быть направлены внутрь.
- Слой представления или слой интерфейса (слой UI, UIL, пользовательский интерфе́йс, уровень представления в многоуровневой архитектуре)
- Слой приложения (сервисный слой, сервисный уровень)
- Слой бизнес-логики или доменный слой (слой предметной области, BLL, доменный слой)
- Слой доступа к данным или слой инфраструктуры (слой хранения данных, DAL, слой инфраструктуры; логирование, сетевые взаимодействия и другие сервисы, требующиеся для поддержания конкретного слоя бизнес-логики).
Слой это логический уровень, который выполняет строго определённые функции и изолирован от других слоёв, чтобы обеспечить модульность, читаемость и переиспользуемость кода.
Каждый слой отвечает только за свои задачи и общается с другими через четко определенные интерфейсы.
Зависимости должны быть направлены внутрь и это согласуется DIP.
По уровню вложенности центральный слой - бизнес-логики(домейнс). Он же одновременно самый абстрактный (абстракция ооп), автономный и не зависит ни от чего.
Слой инфраструктуры зависит от слоя приложения и бизнес логики(доменного слоя)
Слой приложения от слоя бизнес логики.
Слой презентации/интерфейса самый внешний. Презентация обращается к Application Layer, он обращается к слою бизнес логики, имплементацию которого мы делаем в слое инфраструктуры. Связываем короче с фреймворком и библиотеками.
Эта вся архитектура опирается на ооп принципы, солид, грасп и прочую хуйню, вероятно о которой я еще не знаю. Оно все взаимосвязано, понимаешь?
>Формальные доказательства этому какие-нибудь есть?
Например, если меняется технология базы данных (например, с MySQL на PostgreSQL), изменения вносятся только в Infrastructure Layer, не затрагивая доменную логику. Проект с разделением слоёв требует меньше времени на адаптацию, так как центральные модули во внутренних слоях остаются неизменными.
Модульность, переиспользуемость, расширяемость, меньше времени на адаптацию посторонних. В случае говнокода, все наоборот. Разумные люди все эти принципы вывели!
> следующие десять лет будет эту информацию в башке систематизировать
Я всё систематизировал, успокойся, братишка. Просто выделил место и время чтобы вникнуть. Может еще расписать именно какие классы в каком слое писать, какие классы фреймворка соотвествуют слоям? Мне не лень, правда интересно.
>Хватит гадать и фантазировать. У этой хуйни есть конкретный автор - Крейг Ларман.
Я чё, ебич книги читать? Лучше тикток короткие статьи посмотрю, видосы в ютубе, да чат гопоту подрочу. Меньше времени и мозговых усилий.
> Год выпуска книги 1994.
Я их везде вижу, эти билдеры, адаптеры, фабрики. Что ты имеешь ввиду?
>А значит она основана на опыте ДО 1994 года.
И что с того? Законы гравитации открыты Ньютоном в 1666 году.
>Внутрь чего блядь? Снаружи чего?
Зависимости классов в каждом слое должны быть направлены внутрь.
- Слой представления или слой интерфейса (слой UI, UIL, пользовательский интерфе́йс, уровень представления в многоуровневой архитектуре)
- Слой приложения (сервисный слой, сервисный уровень)
- Слой бизнес-логики или доменный слой (слой предметной области, BLL, доменный слой)
- Слой доступа к данным или слой инфраструктуры (слой хранения данных, DAL, слой инфраструктуры; логирование, сетевые взаимодействия и другие сервисы, требующиеся для поддержания конкретного слоя бизнес-логики).
Слой это логический уровень, который выполняет строго определённые функции и изолирован от других слоёв, чтобы обеспечить модульность, читаемость и переиспользуемость кода.
Каждый слой отвечает только за свои задачи и общается с другими через четко определенные интерфейсы.
Зависимости должны быть направлены внутрь и это согласуется DIP.
По уровню вложенности центральный слой - бизнес-логики(домейнс). Он же одновременно самый абстрактный (абстракция ооп), автономный и не зависит ни от чего.
Слой инфраструктуры зависит от слоя приложения и бизнес логики(доменного слоя)
Слой приложения от слоя бизнес логики.
Слой презентации/интерфейса самый внешний. Презентация обращается к Application Layer, он обращается к слою бизнес логики, имплементацию которого мы делаем в слое инфраструктуры. Связываем короче с фреймворком и библиотеками.
Эта вся архитектура опирается на ооп принципы, солид, грасп и прочую хуйню, вероятно о которой я еще не знаю. Оно все взаимосвязано, понимаешь?
>Формальные доказательства этому какие-нибудь есть?
Например, если меняется технология базы данных (например, с MySQL на PostgreSQL), изменения вносятся только в Infrastructure Layer, не затрагивая доменную логику. Проект с разделением слоёв требует меньше времени на адаптацию, так как центральные модули во внутренних слоях остаются неизменными.
Модульность, переиспользуемость, расширяемость, меньше времени на адаптацию посторонних. В случае говнокода, все наоборот. Разумные люди все эти принципы вывели!
> следующие десять лет будет эту информацию в башке систематизировать
Я всё систематизировал, успокойся, братишка. Просто выделил место и время чтобы вникнуть. Может еще расписать именно какие классы в каком слое писать, какие классы фреймворка соотвествуют слоям? Мне не лень, правда интересно.
>Слой это логический уровень, который выполняет строго определённые функции и изолирован от других слоёв, чтобы обеспечить модульность, читаемость и переиспользуемость кода.
Водянистая мокрая вода с точки зрения банальной эрудиции.
Где у слоя верх, а где низ? Вот я добавляю в мое приложение слой "похуйструктуры", куда у него внутрь смотрит, а куда наружа?
>Зависимости должны быть направлены внутрь и это согласуется DIP
Вот есть сервис "календарь" и сервис "часы". Кто от кого зависит и кто направлен внутрь?
>В случае говнокода, все наоборот.
Ну я тебя и спросил: есть этому какие-то доказательства кроме "траст ми бро"? Пикрелейтед тоже умные люди писали, модульно и понятно с первого взгляда, а если че-то надо поменять... кайф.
>Я всё систематизировал, успокойся, братишка.
Оно и видно. Хуйню несешь с вдохновением, СИСТЕМНО.
>Может еще расписать именно какие классы в каком слое писать, какие классы фреймворка соотвествуют слоям?
Кароч квадратные классы пиши в верхнем слое, чтобы с крыши не скатились. А круглые в нижнем, чтобы пружинило.
Ты че-то такое хотел увидеть? Ты как вообще классы друг от друга отличешь? Что значит "какой" класс? Че в нем особенного?
>модульно и понятно с первого взгляда, а если че-то надо поменять...
Вот поэтому надо читать ТАНЕНБАУМА полностью.
Главное не забыть ISBN на удачу три раза перечитать и описание.
>Где у слоя верх, а где низ?
Верх - ближе к клиенту. Низ - ближе к фреймворку, внешним библиотекам, базе данных.
Они в разных местах по разному называются, я пишу их через слэш чтобы было понятно что это одно и то же.
Слой интерфейса/презентации самый верхний, тут контроллеры, artisan команды, вьюхи.
Слой инфраструктуры - самый нижний. Тут происходит реализация интерфейсов, наследование, композиция из верхних слоев чтобы связать абстракцию с реализацией.
Критерий отделения - ответственность. Если у тебя модель элоквент инжектится в контроллер напрямую, то тут слои смешиваются. То же самое касательно отдельно взятых классов.
Ответственности:
- Слой интерфейса/презентации отвечает за взаимодействие с пользователем, не более.
- Слой приложения(application) чисто координирует классы из слоя бизнесс-логики/доменной логики. Не более.
- Слой бизнесс-логики/доменный слой -
> Вот я добавляю в мое приложение слой "похуйструктуры"
Полагаю, ты можешь условно нарезать лишь существующие 4 слоя на подслои. Потому что они исчерпывают вопрос полностью. На пике 1, например, бизнес слой это слой application + domain слой, а persistence и database это слой инфраструктуры. Я хз по какому критерию они здесь нарезаны.
>Вот есть сервис "календарь" и сервис "часы". Кто от кого зависит и кто направлен внутрь?
В слое бизнес логики у тебя абстрактный календарь. Его можно бесконечно делить на подсущности (по необходимости), а можно сделать эти подсущности/Value Objects просто полями сущности. Например таймстемп класс может быть поделен еще на value object'ы здесь - дата, время, секунды, etc.
Что описывает слой доменов/бизнес-логики конкретно? Он выполняет конкретную работу. Слой доменов не знает о внешнем мире. Если конкретно понятие "доменный", а не бизнесс-логики, то он выполняет атомарные операции над классами-сущностями домена, которые тоже лежат в в слое доменов. И бизнесс-правила - как они должны обрабатываться, не зависимо от фреймворк-специфичной хуйни. И эти классы, что выполняют конкретную работу в более абстрактном доменном слое "связываются" с фреймворком, внешними библиотеками через слой инфраструктуры (реализация интерфейсов, наследование, композиция), понял?
Слой приложения более верхний к пользователю собирает в себе эти атомарные операции в сценарии/экшины и координирует.
Слой интерфейса чисто взывает эти сценарии. Отсюда правило что контроллеры должны быть "тонкими."
Вернемся к календарю. Роадмап как проходит процесс через слои.
Слой интерфейсов:
Ты нажимаешь кнопку "назначить встречу", это отправляется реквестом, оборачивается фреймворком в объект форм реквест.
Слой приложения:
Далее вызывается событие/сценарий/экшин/похуй "НазначитьВстречу". В него импортируются классы из слоя бизнесс-логики/доменного. Эти классы атомарны, здесь они все связываются по "идеи" того что происходит, круд операции, рассылка, синхронизация между календарями.
Слой домена/бизнес логики
Здесь переводится из человеческого языка и понятий (Ubiquitous Language) в классы.
Слой инфраструктуры:
Классы домена/БЛ абстрактны, здесь они связываются через сервис провайдер с их реализациями. Реализации тоже здесь.
Напомню, что структура папок !== архитектуре.
>Оно и видно. Хуйню несешь с вдохновением, СИСТЕМНО.
Я так и не понял твой доеб. Все объясняю как я понял.
>Ты че-то такое хотел увидеть? Ты как вообще классы друг от друга отличешь? Что значит "какой" класс? Че в нем особенного?
Неясен вопрос. Может быть переменнная, может быть массив, может быть трейт, ватэвер.
>Где у слоя верх, а где низ?
Верх - ближе к клиенту. Низ - ближе к фреймворку, внешним библиотекам, базе данных.
Они в разных местах по разному называются, я пишу их через слэш чтобы было понятно что это одно и то же.
Слой интерфейса/презентации самый верхний, тут контроллеры, artisan команды, вьюхи.
Слой инфраструктуры - самый нижний. Тут происходит реализация интерфейсов, наследование, композиция из верхних слоев чтобы связать абстракцию с реализацией.
Критерий отделения - ответственность. Если у тебя модель элоквент инжектится в контроллер напрямую, то тут слои смешиваются. То же самое касательно отдельно взятых классов.
Ответственности:
- Слой интерфейса/презентации отвечает за взаимодействие с пользователем, не более.
- Слой приложения(application) чисто координирует классы из слоя бизнесс-логики/доменной логики. Не более.
- Слой бизнесс-логики/доменный слой -
> Вот я добавляю в мое приложение слой "похуйструктуры"
Полагаю, ты можешь условно нарезать лишь существующие 4 слоя на подслои. Потому что они исчерпывают вопрос полностью. На пике 1, например, бизнес слой это слой application + domain слой, а persistence и database это слой инфраструктуры. Я хз по какому критерию они здесь нарезаны.
>Вот есть сервис "календарь" и сервис "часы". Кто от кого зависит и кто направлен внутрь?
В слое бизнес логики у тебя абстрактный календарь. Его можно бесконечно делить на подсущности (по необходимости), а можно сделать эти подсущности/Value Objects просто полями сущности. Например таймстемп класс может быть поделен еще на value object'ы здесь - дата, время, секунды, etc.
Что описывает слой доменов/бизнес-логики конкретно? Он выполняет конкретную работу. Слой доменов не знает о внешнем мире. Если конкретно понятие "доменный", а не бизнесс-логики, то он выполняет атомарные операции над классами-сущностями домена, которые тоже лежат в в слое доменов. И бизнесс-правила - как они должны обрабатываться, не зависимо от фреймворк-специфичной хуйни. И эти классы, что выполняют конкретную работу в более абстрактном доменном слое "связываются" с фреймворком, внешними библиотеками через слой инфраструктуры (реализация интерфейсов, наследование, композиция), понял?
Слой приложения более верхний к пользователю собирает в себе эти атомарные операции в сценарии/экшины и координирует.
Слой интерфейса чисто взывает эти сценарии. Отсюда правило что контроллеры должны быть "тонкими."
Вернемся к календарю. Роадмап как проходит процесс через слои.
Слой интерфейсов:
Ты нажимаешь кнопку "назначить встречу", это отправляется реквестом, оборачивается фреймворком в объект форм реквест.
Слой приложения:
Далее вызывается событие/сценарий/экшин/похуй "НазначитьВстречу". В него импортируются классы из слоя бизнесс-логики/доменного. Эти классы атомарны, здесь они все связываются по "идеи" того что происходит, круд операции, рассылка, синхронизация между календарями.
Слой домена/бизнес логики
Здесь переводится из человеческого языка и понятий (Ubiquitous Language) в классы.
Слой инфраструктуры:
Классы домена/БЛ абстрактны, здесь они связываются через сервис провайдер с их реализациями. Реализации тоже здесь.
Напомню, что структура папок !== архитектуре.
>Оно и видно. Хуйню несешь с вдохновением, СИСТЕМНО.
Я так и не понял твой доеб. Все объясняю как я понял.
>Ты че-то такое хотел увидеть? Ты как вообще классы друг от друга отличешь? Что значит "какой" класс? Че в нем особенного?
Неясен вопрос. Может быть переменнная, может быть массив, может быть трейт, ватэвер.
> - Слой бизнесс-логики/доменный слой -
Недописал здесь, но дописал дальше по тексту:
>Здесь переводится из человеческого языка и понятий (Ubiquitous Language) в классы.
> А что может быть креатором, который в граспе? Сервис, репозиторий или активрекорд/елоквент?
Все верно. Отличие от фабрики из GoF - в том, что оно хранит в себе создаваемые объекты, чисто фабрика занимается только генерацией.
>Потому что они исчерпывают вопрос полностью.
Ну так хули ты тогда тут воду льешь? Верх, низ, ебало умное делаешь. Заучил как дядя сказал и все. Какая разница где там верх, а где наружа, если это ригидная не изменяемая структура, котрую нужно просто принимать целиком как должное, просто потому что?
>Налил какой-то воды про сущности хуючности
>Начал про календарь, закончил тем что контроллеры долджны быть тонкие.
Пчел. Чтобы вычислить правильное время нужно знать какое сегодня число. А чтобы узнать какое сегодня число нужно знать время. Кто от кого зависит? Кто куда направлен? Ты в двух сервисах запутался? Меньше некуда, вопрос предельно простой.
>Неясен вопрос. Может быть переменнная, может быть массив, может быть трейт, ватэвер
Это твой вопрос не ясен. Ты спросил "какие классы в каком слое?". Это бессмыслица. Что блядь значит какие? Они что в разных "слоях" разные что-ли? В одном трейты, а в другом "переменные"? А в третьем что круглые блядь? Класс - это структура языка. Ты же не пишешь в одном обзаце предложениями, а в другом сказуемыми. Не пишешь же? Вопрос риторический. Не надо его сводить к слоям и высирать жпт пасту на страницу.
Короче эта дискуссия утомляет. Напоминает анекдот про студента на экзамене по зоологии, который выучил только про блох и ебет мозги преподу.
>это ригидная не изменяемая структура
Нет, почему? Можно сливать слои вместе, если не нужна высокая абстракция, можно разделять эти слои на подслои.
>нужно просто принимать целиком как должное, просто потому что
Не обязательно. Тогда не будет всех преимуществ solid и многослойной архитектуры.
>Чтобы вычислить правильное время нужно знать какое сегодня число. А чтобы узнать какое сегодня число нужно знать время.
Запросы и команды это 2 разных экшена, относится к слою приложения, из принципа CQR. Я описал команду "назначить встречу". Описать как происходит получение времени (запрос)? То же самое, только возвращаются данные.
>Кто от кого зависит? Кто куда направлен?
Зависят - слои. Абстрактные от реализаций. Конкретное выражение - в классах. Как выражается - DIP. Как связываются - через наследование, композицию, агрегацию, сервис-контейнеры.
>Ты спросил "какие классы в каком слое?" Это бессмыслица. Что блядь значит какие? Они что в разных "слоях" разные что-ли?
Конечно.
>Класс - это структура языка.
Ну ок. Ты не поверишь, но функциями тоже допустимо реализовать многослойность.
>Напоминает анекдот про студента на экзамене по зоологии, который выучил только про блох и ебет мозги преподу.
Ну так а что я не учёл, может скажешь мне? Будь няшкой. Я буду благодарен, потому что только начал изучать всё вышеперечисленное. Возможно у меня в голове на самом деле каша и/или пробелы в компетенции и знаниям. Со стороны виднее. А возможно что ты просто доёбываешься до ответов, спор ради спока, ибо я под твоими вопросами не улавливаю объеденяющего ничего.
Ты бака или няша?
>Нет, почему?
Может потому что ты так и не смог найти место новому слою в этой структуре?
>Тогда не будет всех преимуществ solid и многослойной архитектуры.
И хуй стоять не будет, и деньги из дома уйдут.
>из принципа CQR
Все бля смешал. Пиздец просто. Без DDD и CQRS не разобраться какой из двух сервисов от какого зависит. Но ответа так и нет. Через пару постов выяснится что надо коллайдер строить чтобы это вычислить.
>Зависят - слои. Абстрактные от реализаций.
До этого угарали над абстрактными фабриками интерфейсов. Щас будем угорать над абстрактными слоями. Слой календаря и слой часов. Абстракный. Как выражается - DIP. Как связываются - через наследование, композицию, агрегацию, сервис-контейнеры. В народе — колхозник. В магазине — продавец. В экономике, так сказать, необходим. ШИЗОФАЗИЯ.
>Они что в разных "слоях" разные что-ли?
>Конечно.
В одном классе методы курсивом написаны, а во втором задом наперед?
>Ну так а что я не учёл, может скажешь мне? Будь няшкой. Я буду благодарен, потому что только начал изучать всё вышеперечисленное.
Код забыл написать.
Забить башку хуйней - забил. А написать реальный код, чтобы увидеть как этот мусор с реальной жизнью соотносится - забыл.
Давай включим счетчик дебила.
>Может потому что ты так и не смог найти место новому слою в этой структуре?
Ты дебил, потому что я уже говорил, что их можно только на подслои поделить условно и их делят кто по какому критерию хочет. Как ты более конкретно ниже инфраструктуры опустишься, шизик? Что это за слой будет, приведи пример? Это физически и логически невозможно. Или выше слоя интерфейса? Чтение мыслей пользователя? Нейролинк? Это будет тот же слой интерфейса. Поделить существующие слои - да. Разделить по каком-то другом критерию ответственности - да, но это будет за рамками сабжа, о котором сейчс речь. Поэтому здесь вывод очевиден - ты дебил.
>Все бля смешал.
Ты дебил, потому что я несколько раз говорил, что эти все принципы взаимосвязаны. Что тебе еще не ясно? Ну можешь вместо запросов и команд назвать блять как хочешь, сервис, не пользуйся CQRS. Но суть его от этого не поменяется. Вывод здесь - ты дебил, потому что игнорируешь факт что все взаимосвязано. Аргументов против не услышал.
>ШИЗОФАЗИЯ
Да-да, держи в курсе.
>В одном классе методы курсивом написаны, а во втором задом наперед?
Чё сказать то хотел?
>>37006
> Ну так а что я не учёл, может скажешь мне?
На вопрос ты не ответил, значит я не ошибся, ты дебил, критикующий ради критики. Спор ради спора. С твоей стороны аргументов нет, только >пук. Я аргументы привел, почему все эти принципы взаимосвязаны и почему их нужно использовать.
> А написать реальный код, чтобы увидеть как этот мусор с реальной жизнью соотносится - забыл.
Говнокодера порвало. Какой у тебя стаж говнокода? Дебил, ты проигнорировал аргумент про говнокод.
Итого, ты заработал очков дебила: 4. В следующий раз уже постарайся!
Смысла продолжать не вижу, пользы от тебя и разговора с тобой никакой, пошел нахуй.
Ну в общем какой итог беседы?
0) Что такое слой? Ответа нет. Налито воды что стой это кароч классы. Почему один класс в одном слое, а другой в другом? Ответа нет. Как глядя на класс определеить в каком он слое? Ответа нет.
1) Как определить куда добавить новый слой? Ответа нет. Есть какая-то залупа про подслои. Но даже рассказать что мы отслаиваем: низ вернего или верх нижнего ты не в состоянии.
2) Как определить какой из двух сервисов от какого зависит? Ответа нет. Есть охуительные истории про то как все взаимосвязано (ноу щит шерлок, это в вопросе написано) и на кой-то хуй приплетено CQRS.
3) Выдан тезис что в разных слоях классы написаны по разному. Объяснений нет. Ну по разному епты. Как по разному и что это вообще означает ответа нет.
Ну и разумеется именно меня порвало. И разумеется именно я не смог внятно ответить на вопросы. И именно я в бессильной злобе послал собеседника нахуй.
>Что такое слой?
Я тебе ответил здесь:
(>>36491)
>Слой это логический уровень, который выполняет строго определённые функции и изолирован от других слоёв, чтобы обеспечить модульность, читаемость и переиспользуемость кода.
-----
>Как глядя на класс определеить в каком он слое?
Ответил здесь:
(>>36911)
>Критерий отделения - ответственность.
-----
>Как определить какой из двух сервисов от какого зависит?
Ответил здесь:
(>>36911)
>И эти классы, что выполняют конкретную работу в более абстрактном доменном слое "связываются" с фреймворком, внешними библиотеками через слой инфраструктуры (реализация интерфейсов, наследование, композиция), понял?
И здесь:
(>>37006)
>Зависят - слои. Абстрактные от реализаций. Конкретное выражение - в классах. Как выражается - DIP. Как связываются - через наследование, композицию, агрегацию, сервис-контейнеры.
-----
>Выдан тезис что в разных слоях классы написаны по разному.
Глупый вопрос, ибо ответ очевиден и вытекает из вопроса про разделение слоёв. Или не очевиден? Дебилы просто мыслят квадратными, круглыми, курсивными классами, отсюда и желание приводить подобные аналогии, правильно понимаю?
-----
>И разумеется именно я не смог внятно ответить на вопросы.
Какие вопросы, такие и ответы.
-----
>Налито воды что
>И именно я в бессильной злобе послал собеседника нахуй
В текст нужно вникать, для начала, тогда не будет вопросов про воду и как один ответ связан с другим. Не удивляйся, почему ты послан нахуй.
>Что такое слой?
Я тебе ответил здесь:
(>>36491)
>Слой это логический уровень, который выполняет строго определённые функции и изолирован от других слоёв, чтобы обеспечить модульность, читаемость и переиспользуемость кода.
-----
>Как глядя на класс определеить в каком он слое?
Ответил здесь:
(>>36911)
>Критерий отделения - ответственность.
-----
>Как определить какой из двух сервисов от какого зависит?
Ответил здесь:
(>>36911)
>И эти классы, что выполняют конкретную работу в более абстрактном доменном слое "связываются" с фреймворком, внешними библиотеками через слой инфраструктуры (реализация интерфейсов, наследование, композиция), понял?
И здесь:
(>>37006)
>Зависят - слои. Абстрактные от реализаций. Конкретное выражение - в классах. Как выражается - DIP. Как связываются - через наследование, композицию, агрегацию, сервис-контейнеры.
-----
>Выдан тезис что в разных слоях классы написаны по разному.
Глупый вопрос, ибо ответ очевиден и вытекает из вопроса про разделение слоёв. Или не очевиден? Дебилы просто мыслят квадратными, круглыми, курсивными классами, отсюда и желание приводить подобные аналогии, правильно понимаю?
-----
>И разумеется именно я не смог внятно ответить на вопросы.
Какие вопросы, такие и ответы.
-----
>Налито воды что
>И именно я в бессильной злобе послал собеседника нахуй
В текст нужно вникать, для начала, тогда не будет вопросов про воду и как один ответ связан с другим. Не удивляйся, почему ты послан нахуй.
Вот, точно про тебя описано, слово в слово ситуация итт. Без обид, братишка.
https://ru.m.wikipedia.org/wiki/%D0%94%D0%B5%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C
>При нерезко выраженной дебильности ребёнок может ничем внешне не отличаться от сверстников. Сохраняются механическаяпамятьиэмоционально-волевая сфера. Внимание очень трудно привлечь и фиксировать. Запоминание замедленно и непрочно. У них преобладает конкретно-описательный тип мышления, в то время как способность кабстрагированиюпочти отсутствует. Тем не менее они могут формировать простейшие обобщения. Для них составляет трудность охватывание ситуации целиком, и обычно они улавливают только внешнюю сторону событий. Сложно воспринимают логические связи между предметами, понятия «пространство», «время» ит.д. Часто встречаются нарушения речи (отстаёт в развитии, искажение звуков, нарушения грамматического строя речи, скудныйсловарный запас). Хотя может быть и достаточно большой словарный запас, но речь при этом всё равно бедна и однообразна. Обычно не могут пересказать прочитанное, услышанное. Однако некоторым дебилам при задержке общего психического развития и малой продуктивностимышлениясвойственна частичнаяодарённость(вплоть досиндрома саванта): отличная механическая память (без осмысления повторяемого), способность производить в уме сложныеарифметические операции, умениерисовать,абсолютный слухи др.При более тяжёлой степени олигофрении (имбецильности) одарённость также встречается.Эмоциипреобладают актуальные на данный момент. Действия не целенаправленны, импульсивны, развитнегативизм.
>Слой это логический уровень, который выполняет строго определённые функции и изолирован от других слоёв
Сепульки.
Ты просто подменил термин. Слой - это логический уровень, а логический уровень - это слой. Слой - это когда слой отделен от других слоев. Слой - это когда слои.
Чел, это софистика. Причем топорная. Никакой ценности такое определение не несет. Из него нет никаких формальных следстий. Высрешь таке на собесе - отлетишь обратно в пицценосцы мгновенно.
Ну давай разберем по частям тобою написанное.
>Ты просто подменил термин.
>Чел, это софистика.
>Слой - это логический уровень, а логический уровень - это слой. Слой - это когда слой отделен от других слоев. Слой - это когда слои.
Нет, я дал определение, а не выразил тождество терминов. Моё определение включает существенное понятие логический уровень. А также второстепенные, которые ты не заметил, они выводятся легко из предложения дальше после "логический уровень:
>чтобы обеспечить модульность, читаемость и переиспользуемость кода.
-----
>Логика. Учебник для средней школы. 1954 г.
>Определение понятия есть такое логическое действие,
в процессе которого раскрывается содержание понятия.
>Каждый предмет имеет бесконечное число признаков, и пытаться указать все признаки предмета невозможно.
>Определение содержит в себе лишь такие признаки, которые, являясь существенными, отграничивают понятие от других понятий.
То есть, определение это множество понятий. Смотри пикрил.
А понятие это смысловая единица в этом множестве.
>Понятие — это мысль, которая отображает общие и существенные признаки предметов>Например, в понятии «комета» отображены следующие признаки комет: 1) светило, 2) состоит из крайне разреженных газов, 3) при приближении к Солнцу постепенно выбрасывает светящийся хвост.
>Все три перечисленных признака являются общими и существенными для комет
>термин
>софистика
https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%80%D0%BC%D0%B8%D0%BD
>Те́рмин (от лат. terminus «предел, граница») — слово или словосочетание, являющееся названием строго определённого понятия какой-нибудь области науки, техники, искусства и так далее.
Нет противоречия, я дал строго конкретный термин и далее в предложении второстепенные в рамках определения, а не выразил тождество понятий.
-----
>Из него нет никаких формальных следстий.
Следствие это вывод из множества понятий.
>Никакой ценности такое определение не несет.
Для тебя не несёт, ты же говнокодер. Пруфы что ты говнокодер:
(>>36179)
>Это для продвинутых, ты все равно нихуя не поймешь если прочитаешь про них
(>>36363)
>Интерес это представляет чисто археологический.
>Перепутанны паттерны с принципами.
Это при том, что эти граспы, солиды везде используются, считаются best practice. Но говнокодер будет упираться до последнего. Без учёта того, что там перепутано, потому что термины отражают смысл предназначения этих принципов.
-----
Примеры хорошо спроектированной архитектуры, следующей граспам, солидам и прочему, я приводить не буду. Почему не буду? Ты говнокодер, занимаешь пассивно-агрессивную позицию ко всему хорошему. Ценности от разговора с тобой - ноль, ну разве что посмеяться с клоунизма. К тому же легко, проходишь тест на дебильность. Но я знаю, почему ты так трясёшься перед моим превосходством: я посмотрел тиктоки о всему сабжу, почитал статьи и понял смысл и назначение всего этого добра за минимальное время. А ты видимо читал оригинальные книги, въебал времени и не осилил из-за дебильности (тест на которую ты прошёл выше) и остался в позиции говнокодера.
Пруфы, что ты не осилил:
(>>36363)
>Все это полито хуевым слогом автора и хуевыми же переводами из девяностых.
>Опять, нахуя с умным видом че-то из пальца рассусоливать?
(>>36477)
>Опять, нахуя с умным видом че-то из пальца рассусоливать?
(>>36179)
>Это для продвинутых, ты все равно нихуя не поймешь если прочитаешь про них
С учётом всего этого, делаем заключение, что я умнее тебя, поэтому ты трясёшься и приебываешься, пытаясь хоть где-то самоутвердить свою ничтожную глупость.
Возвращайся, когда сможешь в анализ и осилишь то, в чём ты обосрался в этой нити.
Вот этот самый учебник логики. Почитай на досуге и не позорься больше.
https://techlibrary.ru/b1/2j1j1o1p1d1r1a1e1p1c_2z.2v.,_2s1u1i2d1n1j1o_2h.3c._2t1p1d1j1l1a._1954.pdf
Ну давай разберем по частям тобою написанное.
>Ты просто подменил термин.
>Чел, это софистика.
>Слой - это логический уровень, а логический уровень - это слой. Слой - это когда слой отделен от других слоев. Слой - это когда слои.
Нет, я дал определение, а не выразил тождество терминов. Моё определение включает существенное понятие логический уровень. А также второстепенные, которые ты не заметил, они выводятся легко из предложения дальше после "логический уровень:
>чтобы обеспечить модульность, читаемость и переиспользуемость кода.
-----
>Логика. Учебник для средней школы. 1954 г.
>Определение понятия есть такое логическое действие,
в процессе которого раскрывается содержание понятия.
>Каждый предмет имеет бесконечное число признаков, и пытаться указать все признаки предмета невозможно.
>Определение содержит в себе лишь такие признаки, которые, являясь существенными, отграничивают понятие от других понятий.
То есть, определение это множество понятий. Смотри пикрил.
А понятие это смысловая единица в этом множестве.
>Понятие — это мысль, которая отображает общие и существенные признаки предметов>Например, в понятии «комета» отображены следующие признаки комет: 1) светило, 2) состоит из крайне разреженных газов, 3) при приближении к Солнцу постепенно выбрасывает светящийся хвост.
>Все три перечисленных признака являются общими и существенными для комет
>термин
>софистика
https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%80%D0%BC%D0%B8%D0%BD
>Те́рмин (от лат. terminus «предел, граница») — слово или словосочетание, являющееся названием строго определённого понятия какой-нибудь области науки, техники, искусства и так далее.
Нет противоречия, я дал строго конкретный термин и далее в предложении второстепенные в рамках определения, а не выразил тождество понятий.
-----
>Из него нет никаких формальных следстий.
Следствие это вывод из множества понятий.
>Никакой ценности такое определение не несет.
Для тебя не несёт, ты же говнокодер. Пруфы что ты говнокодер:
(>>36179)
>Это для продвинутых, ты все равно нихуя не поймешь если прочитаешь про них
(>>36363)
>Интерес это представляет чисто археологический.
>Перепутанны паттерны с принципами.
Это при том, что эти граспы, солиды везде используются, считаются best practice. Но говнокодер будет упираться до последнего. Без учёта того, что там перепутано, потому что термины отражают смысл предназначения этих принципов.
-----
Примеры хорошо спроектированной архитектуры, следующей граспам, солидам и прочему, я приводить не буду. Почему не буду? Ты говнокодер, занимаешь пассивно-агрессивную позицию ко всему хорошему. Ценности от разговора с тобой - ноль, ну разве что посмеяться с клоунизма. К тому же легко, проходишь тест на дебильность. Но я знаю, почему ты так трясёшься перед моим превосходством: я посмотрел тиктоки о всему сабжу, почитал статьи и понял смысл и назначение всего этого добра за минимальное время. А ты видимо читал оригинальные книги, въебал времени и не осилил из-за дебильности (тест на которую ты прошёл выше) и остался в позиции говнокодера.
Пруфы, что ты не осилил:
(>>36363)
>Все это полито хуевым слогом автора и хуевыми же переводами из девяностых.
>Опять, нахуя с умным видом че-то из пальца рассусоливать?
(>>36477)
>Опять, нахуя с умным видом че-то из пальца рассусоливать?
(>>36179)
>Это для продвинутых, ты все равно нихуя не поймешь если прочитаешь про них
С учётом всего этого, делаем заключение, что я умнее тебя, поэтому ты трясёшься и приебываешься, пытаясь хоть где-то самоутвердить свою ничтожную глупость.
Возвращайся, когда сможешь в анализ и осилишь то, в чём ты обосрался в этой нити.
Вот этот самый учебник логики. Почитай на досуге и не позорься больше.
https://techlibrary.ru/b1/2j1j1o1p1d1r1a1e1p1c_2z.2v.,_2s1u1i2d1n1j1o_2h.3c._2t1p1d1j1l1a._1954.pdf
Забыл пикрил присобачить.
Зависит от задачи, типовая шаблонизация заруливает почти любой не-вебапп проект. Хотя бы потому что серверный рендеринг, потому что проще кешировать и в целом меньше работы.
Читаю книгу 'Чистый код' Роберта Мартина и там в третьей главе о функциях используют понятие уровни абстракции. И я не могу нормально понять что это за уровни или как тут помогут TO-абзацы?
Я это понимаю так, что есть какое-то общее название функции, которое олицетворяет бизнес-логику, — это один уровень абстракции, а те операции, которые уже непосредственно выполняют действия, которые позволяют выполнить бизнес-логику (допустим запрос в БД или модификация строки), — это другой уровень.
Но потом в книге приводят пример из пика.
Далее в книге пишут, что эта функция
>совершенно очевидно выполняет более одной операции
А мне это вообще не очевидно, ведь тут подразумевается, что в методе несколько уровней абстракции, но почему?
Я из-за этой главы не могу дальше книгу прочитать, поэтому прошу, объясните, пожалуйста, по простому, что это за уровни абстракции, как их выделять?
> Читаю книгу 'Чистый код' Роберта Мартина
дропай этот кал, блять, и не забивай себе мозг хуйнёй. Иди билди тудулист
Как на нём вообще работают?
Делают на нём API если да то вообще как?
Есть ли там роутинг как на laravel где пишешь глагол или дальше уже там путь и callback или функцию?
Ну а кто тебе виноват что ты читаешь уебищный перевод от каких-то пидарасов? Сто раз говорено - читай в оригинале.
Я чет запутался, тут под thing означает вещей? Или так еще действительно можно назвать функции?
Ты не запутался, ты обосрался.
В переводе написано, что оно выполняет больше одной операции, в оригинале написано, что оно выполняет больше одной вещи, в чем разница?
Где ты там увидел "выполняет", дебс? Тут из контекста очевидно что имеется ввиду не прямо сейчас блядь выполняет, а в потенциале делает разную хуйню. И общий интерфейс это наебка.
Пиздец, еще англискому вас кретинов учить. Давайте лучше дальше занюхивайте этот уебищный перевод. Будем считать чтоя нихуя не видел. Проехали.
>читаю клин код
>не додумался забилдить хотя бы один рил симпл проджект
брух... джаст стоп
>Аноны, накидайте годных материалов по Битриксу.
Нету, лол. Смотри в депрессию не скатись когда начнешь вкатываться в битрикс
Начинаю читать первую главу книги 2003 года про apache
Не один ты запутался. Я вот не читал книжку, но очень хочется узнать про "there is more than one reason to change", это он к свитчу придрался?
https://qntm.org/clean
Речь о направлении зависимостей в коде.
Ты когда добавляешь в Employee новый type обязан знать что на это завязан какой-то код и его тоже нужно поменять.
В свою очередь функция вычисления оплаты должна меняться потому что кому-то за каким-то только ему известным хуем понадобилось что-то поменять в Employee.
Все эти ваши "нипанимаю" от того что вы нихуя не пишете код, а тем более не пишете код в команде. Не согласовываете изменения и не переписываете друг за другом.
>Ты когда добавляешь в Employee новый type
Ты пиешь про "fourth, it violates OCP". А он в "third, it violates SRP" что-то другие имел виду похоже.
>обязан знать
Так в тестах же исключение будет, что там знать?
Причина "меняться" у калькулятора зарплаты - изменился расчет зарплаты. А в этом коде вычисление зависит от совершенно другой структуры. Получается что причин "меняться" уже две: поменялся расчет зарплаты или поменялаясь структура Employee.
Ты до двух считать умеешь?
>поменялся расчет зарплаты
Этот момент изменяет только кподфункцию расчета. Сам calculatePay при этом не изменяется.
>поменялаясь структура Employee
если подфункциям claculate* требуется класс Employee, то расчет зарплаты изначально зависит от структуры, иначе бы он в родительскую функцию просто EmployeeTypeEnum передавал, а подфункции были бы без аргументов вообще.
По этой логие гораздо справидливее было бы придираться к "подфункциям", CalculateHourlyPay(e) например. ВОт он действительно и от стркутуры класса зависит и от изменения расчета выплаты. Что такого плохо сделал calculatePay(Employee e) не вижу вообще.
Для нового типа нужно написать новый case в switch. Это троллинг тупостью? Да даже если не троллинг, то объяснять что-то такому тупорезу - мартышкин труд.
Нахуй я на это тупое говно байчусь каждый раз?
Просто ты не можешь объяснить что автор имел в виду, когда писал, "очевидно, что функция делает больше одной вещи" и "она нарушает прицип единой ответственности". На эти оба пункта ты третий раз приводишь пример из его четвертого замечания "он нарушает принцип открытости/закрытости". Потому что это единственный пункт, который он разжевал. У тебя чувство на уровне инстинкта, что так писать не нужно, а доводов в пользу этих 2 пунктов нет. Поэтому ты скорее всего просто создашь 3 класса Invoice-ов c единым интерфейсом calculate?
Вот я привык создавать отдельно класс модели, отдельно репозитории моделей, отдельно сервисы под бизнес логику с этими моделями (если нужно), отдельно контроллеры
Открыл ларавель и гайды, так мне там предлагают в модель засовывать бизнес логику и вызывать в контроллере. Что за хуйня?
Хотя нашел бест практикс ларавель на гитхабе
Видимо репозитории тут не в почете
А сервисы норм
На завод
Сначала ставь в систему: php, mysql, apache/nginx.
Поставив и запустив первый домен у себя будет некоторое понимание как это работает. Сделаешь пару проектов, поиграешься с версиями и можешь пробовать docker compose.
Я, работая на аутсорсе, обычно всякие проекты на cms ставлю на системную mysql + php + nginx. А вот проекты на фреймворках - или сразу в докере, или встройка php + бд(sql/no sql) под проект в контейнере.
к сожалению уже не прокатывает, им дешевле скипнуть
Благодарю
События придуманы (как мне кажется) для того, чтобы можно было расширять функционал фреймворка. То есть, например, ты хочешь писать в лог каждый запрос - ты вешаешь обработчик на событие kernel.request, или же это может делать сторонняя библиотека.
Если ты пишешь свой код, то в нем генерировать события особо смысла нет, так как ты можешь вызвать нужные функции напрямую и это будет проще.
Судя по тексту, твое недовольство вызывают не исключения, а необходимость их ловить и обрабатывать. Ну так просто не лови их.
Без исключений писали до их изобретения, приходится if писать после каждой функции.
> у тебя уродуется код, половина логики переезжает в блоки catch.
Исключения вбрасываются в исключительных ситуациях, и их, как правило, не обрабатывают специально.
> что ты проблему скрываешь
Ты же сам понимаешь, что это неправильно.
> на одном из проектов мы перешли на пробрасывание по методам дтошек, которые содержали в себе статус операций, массив ошибок если есть, массив соообщений если есть.
Ну это просто возврат в прошлое, где ты после каждой функции пишешь if и раздуваешь код.
> а не заметали проблему под плинтус.
Так с исключениями ты ничего не заметаешь - при исключении программа падает с 503 ошибокой, а подробности исключения пишутся в лог. Не понимаю, чем твой вариант лучше.
>Ну так просто не лови их.
Ты вообще не понял о чем он.
Он использует исключения как возврат негативного результата. Как с валидацией, например: ты не можешь просто упасть с 503 если мыло с пробелом заполнено, тебе нужно показать пользователю что не так, причем желательно сразу для нескольких проверок, а не по одной за раз.
Или другой вариант. Ты что-то у себя поменял, а перед фиксацией результата делаешь веб запрос. А газзл отвалился с исключением, например ConnectException. Ты не можешь просто пропустить это исключение и класть с ним все приложение, у тебя свои дела, свой флоу. Че-то надо откатить, а может сохранить чтобы потом опять попробовать. Пользователю че-то надо показать.
Короче хорошим тоном при использовании сторонней библиотеки считается ловить её исключения, и как минимум оборачивать их в свои.
>Ну это просто возврат в прошлое, где ты после каждой функции пишешь if и раздуваешь код.
Так эту проверку невозможно избежать в принципе. Если тебе нужно что-то сделать если что-то не получилось, то у тебя будет условный оператор или try.
Самое пиздатое решение этой проблемы - монада Maybe. Оно тоже не избавляет от условного оператора, пушо это невозможно. Но зато позволяет этот условный оператор передвинуть выше по цепочке вызовов, каждый из которых возвращает maybe. В пхп что-то похожее недавно добавили ?-> если значение не null, то вызов выполнится: $user?->getAddress()?->getHouse()
Звучит так, будто ты не mvc пытаешься понять, а как работает какой-то конкретный фреймворк.
Помню на андроид давно курс платный проходил, там прям ахуенно рассказано было и очень легко, правда БД была локальная прям в программе, то есть не настоящая. А что щас смотрю тоже не понятно, либо теория либо реализация без обьяснений на фреймворке
>Я понял что там идет разделение логики от отображения, но вот техническую часть не могу вкурить...
Ну так что тебе еще не понятно? Контроллер - просто собрание обработчиков эндпоинтов, модель - абстракция, через которую ты лезешь в БД, вьюха это шаблон без логики для вставки готовых обработанных данных.
Весь интерес у тебя в обработчиках контроллера происходит, вот там про ооп надо думать.
Как сказать заплатил, там чисто косарь был символически как поддержка. А андроид нахуй надо у нас в городе 2(!) вакансии и то на мидла. На пхп их 110
И сколько из этих пхп вакансий являются битриксом?
Вот бы был сайт, где бы были прописаны пхп функции, что они возвращают и какие исключения выбрасывают.
>Весь интерес у тебя в обработчиках контроллера происходит, вот там про ооп надо думать.
А можно пример как думать об ооп в "обработчиках контроллера"?
>техническую часть
Во первых в шапке про студентов есть описание mvc, техническая часть в том что вся логика твоего приложения это модель. Набор кода в виде классов и функций который делает все расчеты и обращается к базе данных. Один или много файлов похуй, моделью будет папка с набором папок. Контроллер это просто вызов метода этой модели что бы вызывать их напрямую из модели, что бы было "отдельно". Ну а отображение очевидно фронтенд - html код с шаблонами.
В laravel при обучении мне показалось что работы больше с контроллерами чем с моделью, ну видимо потому что пример был простенький, я не писал банковское приложение.
Еще я видел книгу по ларавелю которую тут как то кидали, там было сказано что MVC в современных фреймворках невозможно нормально реализовать и все равно придется насрать гору логики например в контроллеры. Потому что у тебя не 3 файла, и все усложняется.
Поэтому предлагаю забить хуй на MVC и не ебать себе мозги.
Почитай главу про mvc в книге php в подлиннике 8 котерова, там полный пример mvc разделения с роутером. Или глянь курс Лаврика по ООП, лежит на рутрекере, в нем пример разработки простого mvc фреймворка с нуля.
xhprof
Да я. Пишу хуйню с умным видом. Вкатуны не понимают что в моих постах просто тарабарщина из терминов. А если кто более сведущий спросит че я блядь вообще несу, то я его просто шлю нахуй и продолжаю городить бессмысленную хуйню.
Шизло не осилило эти термины и как они взаимосвязаны и обвиняет в этом всех окружающих. Это надо просто видеть. Спокидзе, это не последнее, что ты не поймешь в своей жизни
>не осилил
>сложно
>ни нужно
>как это связано? бред
"обработчики контроллера" это вообще не термин. Это шиза которую ты просто выдумал на ходу. То что ты имеешь ввиду называется Action.
Про ооп написана полная хуйня.
Причем тут вообще "думать" или не думать? У тебя все приложение это иерархия объектов. Я выше по треду уже скидывал скриншот. Пикрелейтед как выглядит ооп приложение. Это не вопрос "думанья" или какого-то выбора. Твой код будет внутри метода объекта. Без вариантов.
Когда читаешь высеры такого кукоретического долбоеба от кринжа можно сдохнуть. Физически больно эту хуйню видеть. Нет бы сука взять сесть вечерком и написать код. Ну просто блядь статью на вики запостить если зудит. Нет нахуй, надо свою шизофрению вывалить. И ведь сука двух слов связать не может, контроллеры эти в глаза блядь не видел, но срееееет паскуда.
>это вообще не термин.
Я буду называть обработчики запроса, методы контроллера, как мне нравятся, а на твое мнение срал. Вопросы какие-то еще?
>>40302
>Причем тут вообще "думать" или не думать?
У тебя пример с фреймворком приведённый, тут за тебя уже подумали и решили. А твоё самостоятельное "думать в рамках ооп" начинается именно с обработчиков контроллеров, как сделать их тонкими. Я не знаю, почему ты решил высраться и усложнить вопрос ввиду того, что у анона простой вопрос, как работает mvc. Почему?
Какое отношение "тонкость" контроллеров к ооп имеет? Типа толстые контролееры перестают объектами быть? Может речь идет про ПРОЕКТИРОВАНИЕ или АРХИТЕКТУРУ, а не про ооп?
>усложнить вопрос
Рашн мазафакер, ду ю спик ит? Ты же блядь двух слов связать не можешь. Чем отличается вопрос от ответа знаешь?
>Почему?
Потому что твой ответ это бессмысленный высер шизоида, который не то что сам mvc не реализовывал, а вообще ни одного контроллера в жини не написал.
Так не хочется этим аналом пользоваться...
Фреймворк на 70% это его орм. Если не нравятся элоквент, лучше другой фреймворк выбери.
>Какое отношение "тонкость" контроллеров к ооп имеет?
Прямое: контроллер mvc это controller из граспа, он занимается чисто координацией и делегированием, что не должно нарушаться согласно SRP из солида, это значит, что контроллеры должны быть тонкими и заниматься только своей ответсвенностбю.GRASP и SOLID это о том как реализовать 4х принципа ооп. Объектами они быть не перестанут, но и ты должен понимать, что ооп не заканчивается этими 4мя принципами.
>Ты же блядь двух слов связать не можешь.
В глаза ебешься или трудности с обобщением? С диагнозом "дебильность" это частый симптом, не переживай.
Тонкие контроллеры
@
Жирные сервисы
@
Реквест передается через параметры
@
Ad hoc сервис разбирает мелкодрисню из реквеста
@
Ко-ко-ко! Архитектура!
чатгота спамит мне такой информацией: "В SOA (Service-Oriented Architecture) сервис — это отдельная единица функциональности, которая решает конкретную задачу. Это как "черный ящик", который выполняет определенную операцию, и у него есть чётко определённые входные и выходные данные. Сервисы взаимодействуют друг с другом, используя стандартизированные интерфейсы, как, например, REST API или SOAP.". но блять это же просто описание философии сервиса, а как его блять писать я не понимаю. пока что догадка что сервис это просто монолит на Laravel, который только по api общается.
>Тонкие контроллеры
Да, так и следует быть.
>Жирные сервисы
>Ко-ко-ко! Архитектура!
Перемещение говна из контроллеров в сервисы должно было бы тебе показаться лишней работой чтобы задуматься о смысле действия.
"Сервис" о котором ты говоришь это service layer / application layer. Он не должен быть жирным как и контроллеры, а должен лишь собирать в себе логику из bussiness layer / domain layer (он ниже по зависимостям DYP, - от него зависят, - и выше по абстракции ООП), в последнем слое и содержится основная логика. Она здесь "атомарна", то есть поделенная на домены или модули, ватевер. Эта "атомарность" собственно и разбивает основную жирность, протекающую через слои. Вместо имя "сервис" в service layer / application часто используются CQRS/UseCases/Action найменования.
>Реквест передается через параметры
Между слоями данные передаются через DTO.
Сычев, ты когда интеграцию с тинков банком доделаешь? Ты уже три месяца возишься. Какие блядь юзкейсы, какой эскьюэрэс? Там просто хттп ручку дернуть. Понедельник крайний срок. Если не будет готово к дейлику в понедельник, для тебя будут плохие последствия...
Граспа ебаная, ты со своими солидами в конец одебилел?
О том чтобы язык соответствовал принципам ооп заботятся те кто этот язык пишет. В го нет нихуя наследования, и классов нет, а в ооп стиле на нем писать можно.
То что ты до бесконечности в своих жпт пастах из граспа в солид слои переливаешь абсолютно бесполезная хуета.
>То что ты до бесконечности в своих жпт пастах из граспа в солид слои переливаешь абсолютно бесполезная хуета.
А ты в контроллерах пишешь всё?
Нет, это service layer / application layer. Он не должен быть жирным как и контроллеры, а должен лишь собирать в себе логику из bussiness layer / domain layer (он ниже по зависимостям DYP, - от него зависят, - и выше по абстракции ООП), в последнем слое и содержится основная логика.
Ю ноу?
И не спрашивай меня что такое "зависимости DYP" и откуда я эту формулировку высрал. Меня попустило и я того прихода не помню.
Здесь это база. Здесь с важным видом кидаются баззвордами, но никто нихуя не понимает нахуй всё это надо. Такой карго-культ.
>Пишу логику в контроллерах, нихуя не понимаю сам и агитирую тоже нихуя не понимать
пофиксил тебя
Че ты лепишь. Аниме хуесос ничего не пишет. Он просто пиздит. Он даже не читал нихуя про этот грасп и солид.
Ага потом сидишь дедлоки полдня на проде ковыряешь из-за евент-дривен пидарасов криворуких
Чел, ты набрался баззвордов и думаешь, что все понял. Когда начнутся реальные задачи твои "знания" посыпятся как песок. Чтобы нормально вкурить ООП, нужно несколько лет, понимание приходит с годами и опытом.
У тебя на проекте долбаебы работают просто, тут что угодно будет и они прод положат к хуям
>>40838
Уловка 32. Озадачить и сбить противника с толку бессмысленным набором слов и фраз. Эта уловка основывается на том, что «люди, если что нибудь слышат, привыкли думать, будто под фразами скрывается какая-нибудь мысль».
Если противник такой человек, который в душе сознает свою слабость и привык слышать много непонятных вещей и делать вид, что все отлично понимает, то можно импонировать ему, засыпая его с совершенно серьезным выражением лица ученым или глубокомысленно звучащим абсурдом, от которого у него онемеют слух, зрение и мысль; все это можно выдавать за бесспорное доказательство своего тезиса. Всем известно, что подобную уловку употребляли в последнее время немецкие философы с поразительным успехом, когда имели дело даже с большим скоплением публики.
- Артур Шопенгауэр
Твоя самоуверенность спадет, когда тебе дадут спроектировать элементарную систему (просто классы).
Ты как человек, который насмотрелся научпопа, запомнил какие-то кротовые ноты, сигнулярности и теперь думает, что он что-то понимает в физике, но стоит только тебе столкнуться с реальной задачей, как ты обомлеешь от собственного незнания и немощи.
Ну я потренеруюсь на кошках в предстоящем учебном проекте, прежде конечно же нужно было разобраться как писать код. В пхп чатиках часто срачи за архитектуру четаю. К тому же, дядьки с видео приводят разумные аргументы в пользу, тем более это опирается на баззворды, которые я постоянно вижу в вакансиях, этот же DIP из солида. Хочется сразу учиться писать правильно.
>Хочется сразу учиться писать правильно.
Не получится. Умные люди всю эту ООП дрисню выводили из своего опыта, у тебя такого опыта нет, ты просто не докумыкаешь "зачем" и "почему" что-то использовать.
Прикинул как приходит такой мамин архитектор с паттернами, слоями и домейнсами. А ему суют проект который вчерашний студент наговнякал на коленке впопыхах и говорят "роботай".
Даже ебало его в тот момент не могу имаджинировать.
Но ты то посмотрел десять минут из тридцати, а на одиннадцать часов хуй забил, дауненок.
Проецируешь, свинья.
> Как научиться отвечать на вопросы, типа "а что не так с этим кодом?"
Смотришь что не так с кодом - отвечаешь что не так.
>Смотришь на код - вроде должен работать.
Отвечаешь что всё ок, лажаешь, после занимаешься поиском ошибок. В следующий раз стараешься не допускать подобного рода ошибок.
Чтоб понять что не так с кодом - ты должен сам что-то подобное реализовывать и на своих ошибках понять почему это говно.
Даже если просто прочитаешь clean code, не факт что поймешь
>git pull origin master
Already up to date.
>git push origin master
Everything up-to-date
>git commit
× No valid configuration found.
Это мой приватный репозиторий древний. Какие еще конфиги нужны?
https://github.com/CackeBepHucb/calculator
послушал бы предложения/пожелания там по архитектуре, чистому коду и тд.
Я не троллю, попробуй сам открыть свою ссылку через инкогнито, с неавторизованного акка твой репозиторий должен спокойно открываться
Блин ряльно. Пойду ковырять настройки чтотам не так
Есть файлы готовые для комита.
Локальный недавно ввел. Сейчас поробую затереть локальный и переписать глобальный. Если не получится, то буду заново вытягивать проект.
Пох другой акк сделаю. Странно конечно они так.
В туториалах по laravel страницу пишут на php, на blade этом самом, то есть можно и фронтенд на laravel сделать что ли?
Потому что весь цикл книг про то как жену ГГ ебут злодеи. Видимо Гудкайнд на это теребонькает
Смотря на пик, я боюсь ответить да.
Только один раз ебали, да и то через магическую связь.
>Поясните нюфане, вот когда в вакансии пишут React и Laravel вместе, то это имеется в виду, что в Laravel пишется api, а страница делается в реакте?
Да. Но чаще Лару с Вью берут для SPA.
>В туториалах по laravel страницу пишут на php, на blade этом самом, то есть можно и фронтенд на laravel сделать что ли?
Конечно можно. Будет классическое MPA веб-приложение. Но никто не мешает и ажакс прикрутить, или livewire.
> Конечно можно. Будет классическое MPA веб-приложение.
А как совместить js с php вообще? Что то у меня в голове все это не стыкуется. С одной стороны js скрипты отдельными файлами, с другой стороны эти <?php-вставки в html файлах
У Лары из коробки идет фронтенд модуль для ажакс запросов, называется axios. Погугли с ним примеры, там понятнее должно стать.
Эти хтмл вставки могут генериться и в отдельных пхп-файлах. А совмещается это всё просто - жс может отправлять запросы на сервер, напр. тем же ажаксом, и получать ответы от сервака и что-то дальше с ними делать, вот и совмещение получается. Я вот как раз мозгоеблей с ажаксом и занимаю в данный момент, чатик пилю.
а все я передумал, мне чат гпт ахуенный дизайн наконец сгенерил. фронтендеров в помойку
Если я правельно понял, есть 3 вида фулл стека на ларке, эти аббревиатуры в вакухах и роадмапах часто можно видеть:
1. VILT (React, Inertia, Laravel, TailwindCSS)
2. TALL (TailwindCSS, Alpine.js, Laravel, Larawire)
3. RILT (React, Inertia, Laravel, TailwindCSS)
Как для фуллстека их там на беке и фронте связывают библиотеки Inertia и Larawire. Но можно и без них обойтись, с изолированным апи от фронта. Тогда больше писанины, но меньше гибкости в случае если надумаешь мобильное приложение делать.
Популярны они именно в том порядке, в котором я перечислил. Если вздумал реакт учить, то лучше не надо, лучше вуе.
Вот в ларке не описываются поля модели, следовательно и тайпхинтов нет. Мне запоминать их что ли для обращений и работы с ними?
Ваще почти нихуя не дает в контексте кверибилдера в ларке. Разве что в ресурсах будешь говно из одного места (модель) в другое (ресурс) перекладывать.
Ну код да еще сделал, но там тупо чтобы рутинной работой не заниматься и не подгонять шрифты, флексы и прочую хрень. Типо нахуй эта свора фронтендеров нужна и дизайнеров? Щас 90% функционала это ненужные свистоперделки, я понимаю бекенд нужен там с БД работать, кешем и другими нужными вещами. Но нахуя вообще фронтенд как явление нужен? Смотри я не работал с фреймворками типо вью и реакты, но на голом ксс и хтмл написал ахуенный сайт по типу пикрил, где все понятно, МИНИМУМ кнопок, всего лишь 3 основных цвета в дизайне и все очень просто и доступно НОРМАЛЬНОМУ человеку. Теперь смотрим на пикрил 2 говно которое клепают на смсках
ладно пикрил 2 плохой пример, щас приблизительно вот такое клепают уебанство, просто вы еще представляйте как заходите на сайт а там миллиард всплывающих окон и лаги
На фронте куча логики удобной и запросов накидать, чтоб у тебя не как статичная залупа сайт выглядел
Не нравится - сделай сам. Нах ты тут ребёнка включил?
>>45005
Да так всего лишь расстрелять КАЖДОГО пидараса который испортил все сайты и приложения любимые своими свистоперделками, заебись теперь открываются полчаса и лагают. Зато дети с сдвг довольны. Главное не забыть контекстной рекламы накидать, чат бота с ВАМ ТРЕБУЕТСЯ ПОМОЩЬ?, предложением о ПОСЛЕДНЕЙ СКИДКЕ 99%, предложение зарегистрироваться, предложением принять куки и еще стопицот предложений, и только потом ты гой можешь посмотреть на содержимое
А ну и легендарное "ВЫ ТОЧНО УВЕРЕНЫ ЧТО НЕ ХОТИТЕ ВОСПОЛЬЗОВАТЬСЯ СКИДКОЙ? СКИДКА СГОРАЕТ ЧЕРЕЗ ОДНУ НАНОСЕКУНДУ"
И "ПОДПИШИТЕСЬ НА НАШИ СОЦ СЕТИ ЧТОБЫ БЫТЬ В КУРСЕ"
>Как же тяжко без фронтендера и дизайнера сайт пилить рибята
Не пизди, ничего не тяжко. В чём заключается тяжесть? В том, чтобы пойти на маркетплейс и купить готовый дизайн за 50 баксов? Или в том, чтобы скачать бесплатный ui кит типа fluent ui, material ui, sapui5, chakra ui?
>первый пик
Литерали пикрелейтед. Бездушное, холодное, илитное позерство. Добавили эти три точки, чтобы уж совсем страница не выглядела как пустой проект на WindowsForms.
Погроммисты дизайн не покупают.
Ага, причем спрашивает каждый раз и ты залогинен. Так и хочется таким похуистам в рожу руки нассать.
Ты ебанулся? Причём здесь технологические стек если придумывают пихание всех этих окошек в морду посетителю именно эффективные менеджеры?
Скажи в чем блять недостаток то? Такими сайтами просто ахуенно пользоваться, можно чисто кончать от использования, допустимо если там будет какая нибудь мягкая анимация ползунков и кнопок и все. И самое главное - такие сайты как ты видишь не для нищей хуеты создаются, а для богачей которые ценят эстетику. Ты давно видел стул с бабкиного гаража за 250 евро?
Вот для питоpахи обычной там уже не важно, накидал в кучу говна всяких цветов баннеров и реклам, приправил всплывающими окнами и дешевой анимацией ШОБ НЕОБЫЧНА, и скормил ей же
Без лица, без души. Ты хоть понять на каком сайте находишься можешь, по этим уебищным скриншотам?
Ты бы еще принес этих корпоративных блевотных человечков на одно ебало.
Наткнулся на слитый код крупного ру даркнет маркета, так вот он написан на ларавеле. Вопрос, это база писать сайты для даркнета на пыхе? Чем-то обосновано или просто совпало?
мимо залетный питонодебил
Ну ты пидарас, я нофап из-за тебя сорвал
Задумался о сайтах на пыхе, которые знаю. Пошел чатурбейт проверять, он на джанге оказался
Ты своими тезисами питараху напоминаешь. Которая живет внутри пик1, который выглядит снаружи как пик2 или пик3. Нет ну а чо. Зато душевно, оригинально
Конкретно вот эти детали интерфейса просто ебаный мусор, нахуя он? Чтобы нищей хуете впарить какое то говно в обертке СПЕЦПРЕДЛОЖЕНИЯ СКИДКИ? Вот в чем качественное отличие богатых и успешных людей от нищего скота. Нищих держат за обезьян и помыкают разноцветными баннерами об очередной "скидке". Пользоваться сайтами для скота значит не уважать себя
Да не ссы ты, это обычная сезонность через месяц все станет как было. Ну и на худой конец битрикс всегда ждёт тебя.
>)))
Там просто сразу поняли по обилию скобочек, что ты заводобыдло гречневое и ФИТА С КОМАНДОЙ упругих зумеров у тебя не будет. И нахуй ты такой нужен, скуфидон кринжовый?
Я нужен, чтобы молодые лучше обьединялись на фоне чмырения меня за спиной. И переставали думать о плохом кабане, маленьких зарплатах и потогонке. Я один их теперь буду раздражать одним своим видом
Так а смысл в этих вакансиях? Все на новогодние праздники уходят недели на полторы-две. Зачем кого-то нанимать чтобы он тупо ждал когда все работать начнут?
Апишки и круды чистые или mvc дефолт сайтик на пыхе?
И не имеют собственного лица, до полного смешения с интерфейсом телефона.
И то, и другое