{"id":20112425,"url":"https://github.com/andy87/smart-development","last_synced_at":"2026-05-10T08:51:17.276Z","repository":{"id":192776807,"uuid":"687324149","full_name":"andy87/smart-development","owner":"andy87","description":"Рекомендации к разработке + небольшой пример.","archived":false,"fork":false,"pushed_at":"2024-07-07T10:36:15.000Z","size":56,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-02T18:50:56.158Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andy87.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-05T06:02:56.000Z","updated_at":"2024-07-07T10:36:18.000Z","dependencies_parsed_at":null,"dependency_job_id":"262d9007-6d0c-4c5b-8ba4-e1dd9546eb78","html_url":"https://github.com/andy87/smart-development","commit_stats":null,"previous_names":["andy87/info-flow_development","andy87/smart-development"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/andy87/smart-development","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fsmart-development","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fsmart-development/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fsmart-development/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fsmart-development/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andy87","download_url":"https://codeload.github.com/andy87/smart-development/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fsmart-development/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286079811,"owners_count":27282121,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-27T02:00:05.795Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T18:20:13.045Z","updated_at":"2025-11-27T08:02:09.371Z","avatar_url":"https://github.com/andy87.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"Привет! Если ты тут, то тебе, видимо интересно, как разрабатывать проекты правильно и грамотно.  \nБезусловно путей множество и все они очень ситуативные, но есть общие моменты которые лучше всегда соблюдать.\n\nПервое, что стоит упомянуть - это заветы \"Чистого кода\" и здравого смысла.  \n\u003e _Многие из этих вещей я осознал сам, а в дальнейшем получил подтверждение в книгах._\n\n## 1. Всё должно быть на своих местах.\nУ всего должно быть своё место(своя директория/папка).  \n\nВсе файлы проекта группируются по типу, к примеру:\n- компоненты\n- контроллеры\n- модели\n- шаблоны\n- сервисы\n- ресурсы\n- текстуры\n- сцены\n- и т.д.  \n\nВсе эти файлы обязаны быть в \"своих папках\", при этом если файлы в группе имеют общий тип / подтип, то они так же группируются в директории расположенной внутри корневой директории группы.\n\nПри этом большая библиотека или компонент, содержащий множество вспомогательных файлов разных групп и типов, обязан располагаться в своём собственном пространстве (в персональной директории), группируя свои файлы в подпапки по назначению.  \n\u003e _Смешивать файлы разных компонентов - код кобольдов и деяние сатаны!  \nСтановится невозможно переиспользовать компонент без геморроя, в виде вычленения файлов нужных для работы требуемого компонента_\n\n## 2. У всех должно быть актуальное имя/название.\nИмя обязано ясно и чётко донести:\n- назначение _(для класса / интерфейса / примеси)_\n- содержание _(переменные / свойства / константы)_\n- действие _(методы / функции)_\n  _обязательно начинаются с глаголов: get / set / construct / add / remove и т.д._\n\n## 3. Не оставляйте закомментированный код.\nНе на будущее, не на вечер, не на пока что...\n\n1. Вы живёте здесь и сейчас, ваш код здесь и сейчас должен быть актуальным.  \n2. Исправлю потом, когда-нибудь, скоро? - оно не настанет, будьте реалистами, вы живёте здесь и сейчас!  \n3. Большинство проектов используют CSV, там сохранится ваш код, на все потом, в будущем, когда-нибудь.  \n\u003e _Если вы ещё не используете систему контроля версий, пора взрослеть!_\n\n## 4. Соблюдайте строгую типизацию.\nОна поможет определить узкие места и ошибки ещё на этапе проектирования, а не во время исполнения кода.  \n\u003e _Согласитесь: лучше когда код работает, а не выдаёт ошибку за ошибкой_\n\n## 5. Пишите тесты\nНасколько это нудно и затратно по времени, на столько же это полезно!\n\u003e _Тесты - как биткоин ₿, крафтятся долго и со временем их ценность многократно возрастает._\n\n### \u003ci\u003eЭти 5 шагов подходят практически для любого проекта и многократно упрощают жизнь разработчика...\u003c/i\u003e\n\n## Дополнительные рекомендации.\n\n#### Используйте:\n - PSR стандарты\n - интерфейсы и абстрактные классы\n - DI (Dependency Injection).\n\n#### Используйте Паттерны проектирования.\nОбязательно ознакомьтесь с такими паттернами как: \n- MVC\n- ActiveRecord\n- ORM\n- Singleton\n- Factory\n- Command\n- Service Object Architecture\n- Observer\n- и т.д.\n\nКомбинируйте паттерны.\n\n#### Реализуйте методы и функции, возвращающие значения, а не изменяющие объект.\nЭто позволит легче тестировать, а так же избежать ошибок.\n\n#### Передавая в метод / функцию большое кол-во аргументов (\u003e 3), замените их на объект _(приоритетнее)_ или массив.\nЭто позволит легче расширять функционал, упростит чтение и понимание кода.\n\n#### При проектировании проекта, разделяйте бизнес логику, логику представления и логику обработки запроса.\nМетоды сервиса не должны содержать логику представления или обработки запроса, так же как и методы контроллера  \nне должны содержать бизнес логику.\n\n#### Когда проектируете проект, старайтесь представить его как набор компонентов, которые могут быть пере использованы в других проектах.\n\n#### Если вы используете фреймворк / библиотеку / компонент, старайтесь использовать их на 100%, а не писать свои решения.\n\n#### Не закладывайте много логики в шаблоны, лучше всё это вынести в контроллеры или сервисы.\n\n#### Добавляйте к методам и функциям аннотации и комментарии раскрывающие подробности.\n\n#### Ведите документацию к проекту, она поможет вам и вашим коллегам легко разобраться в проекте быстрее.\n\n#### При проектировании Фасадов для работы с API:\n - старайтесь разделять логику работы с API и логику обработки данных  \n \u0026nbsp; \u0026nbsp; _методы API должны возвращать только данные, а обработка данных происходит в другом месте(сервисы/провайдеры)_\n - указывайте ссылки на документацию к API в аннотация к методам и функциям\n\n#### При разработке проекта используйте .env файлы для хранения конфигурации проекта.\n\n\n\n# Пример разработки проекта.\n\nВ директории `app` приведён небольшой пример \"странички\"\n\nКоторая использует следующие паттерны: \n- MVC\n- Service Object Architecture\n- ModelView\n- Repository\n- Active Record\n- ORM\n\n## MVC\nИспользуется паттерн, который разделяет бизнес логику, логику `view` и логику обработки запроса. \nТ.е. шаблон содержит только вёрстку и минимум логики, контроллер содержит только логику обработки запроса.\n\n## ModelView \u0026 Service Object Architecture \nВ `actions` методах контроллера собирается `Resource`(ModelView). \nЗначения для свойств `Resource` берутся из `Service` объектов, которые в свою очередь берут данные из `Model` \nобъектов и других сервисов.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandy87%2Fsmart-development","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandy87%2Fsmart-development","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandy87%2Fsmart-development/lists"}