-
Notifications
You must be signed in to change notification settings - Fork 13
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
7 changed files
with
136 additions
and
80 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,21 +1,20 @@ | ||
--- | ||
title: "Основы" | ||
description: "Что такое принцип 'Один класс — одна задача'?" | ||
description: "Что такое принцип <code>One Class, One Task</code>?" | ||
--- | ||
|
||
Принцип «Один класс — одна задача» (One Class, One Task) предполагает, что каждый класс в приложении должен отвечать | ||
только за одну конкретную задачу или функциональность. Это упрощает структуру кода, делает его более понятным и легким | ||
для поддержки. В контексте Laravel этот подход помогает организовать бизнес-логику в виде отдельных классов, которые | ||
выполняют конкретные действия, что позволяет избежать перегруженности классов и улучшает читаемость кода. | ||
|
||
Преимущества использования принципа «Один класс — одна задача»: | ||
|
||
- **Читаемость кода**: каждый класс отвечает только за одну задачу, что упрощает понимание его назначения и логики. | ||
- **Поддерживаемость**: изменение и тестирование классов становится проще, так как каждый класс содержит только одну | ||
задачу. | ||
- **Изоляция логики**: каждый класс действия изолирован от других частей приложения, что упрощает его тестирование и | ||
поддержку. | ||
- **Повторное использование**: классы действий могут быть повторно использованы в разных частях приложения, что | ||
упрощает разработку и поддержку кода. | ||
- **Улучшение архитектуры**: применение принципа «Один класс — одна задача» помогает улучшить архитектуру вашего | ||
приложения, сделав его более гибким и масштабируемым. | ||
Принцип «Один класс — одна задача» (`One Class, One Task`) устанавливает требование, согласно которому каждый класс в приложении должен выполнять лишь одну конкретную задачу или функциональность. Этот подход способствует созданию более структурированного и предсказуемого кода, а также облегчает его поддержку. | ||
|
||
В Laravel это позволяет выделить бизнес-логику в отдельные классы, что освобождает контроллеры и модели от лишних обязанностей и улучшает организацию и читаемость кода. | ||
|
||
##### Что это даст? | ||
|
||
- **Читаемость кода**: Наличие класса, отвечающего за единую задачу, значительно упрощает понимание его назначения и поведения. Это особенно важно в рамках командной разработки или при возвращении к проекту спустя значительное время, так как открыв класс, разработчик может быстро оценить его функциональность. | ||
|
||
- **Простота тестирования**: Изолирование логики в небольшие классы упрощает процесс тестирования. Каждый класс может быть протестирован независимо, что повышает точность и снижает время, необходимое для написания тестов. | ||
|
||
- **Снижение сложности**: Логика приложения становится более управляемой, когда она разбивается на мелкие, специализированные части. Такой подход способствует снижению уровня сложности кода и облегчает его восприятие. | ||
|
||
- **Легкость изменений**: Внесение изменений в код становится проще, когда изменения касаются небольших классов, каждое из которых отвечает за одну задачу. Это предотвращает возникновение неожиданностей при редактировании, так как изменения в одной части приложения не затрагивают другие компоненты. | ||
|
||
Тем не менее, важно сохранять баланс между дроблением логики на мелкие классы и чрезмерной детализацией. Не все аспекты логики следует выносить в отдельные классы, необходимо учитывать контекст. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
--- | ||
title: "Пакет Laravel Actions" | ||
description: "Действие можно удобно запустить как объект, контроллер, фоновую задачу и консольную команду." | ||
--- | ||
|
||
В экосистеме Laravel есть прекрасный пакет `Laravel Actions` который способствует организации кода вокруг действий. | ||
Данный пакет позволяет создавать классы действий, которые могут быть вызваны в различных контекстах, таких как контроллеры, события и консольные команды. | ||
Это обеспечивает более универсальный и гибкий код. | ||
|
||
|
||
Пример использования: | ||
|
||
```php | ||
class GenerateReservationCode | ||
{ | ||
use AsAction; | ||
|
||
const UNAMBIGUOUS_ALPHABET = 'BCDFGHJLMNPRSTVWXYZ2456789'; | ||
|
||
public function handle(int $characters = 7): string | ||
{ | ||
do { | ||
$code = $this->generateCode($characters); | ||
} while(Reservation::where('code', $code)->exists()); | ||
|
||
return $code; | ||
} | ||
|
||
protected function generateCode(int $characters): string | ||
{ | ||
return substr(str_shuffle(str_repeat(static::UNAMBIGUOUS_ALPHABET, $characters)), 0, $characters); | ||
} | ||
} | ||
``` | ||
|
||
Класс можно вызвать следующим образом: | ||
|
||
```php | ||
GenerateReservationCode::run() | ||
``` | ||
|
||
Если вам нужно выполнить действие в очереди, то вы так же можете это сделать, например: | ||
|
||
```php | ||
GenerateReservationCode::dispatch(); | ||
``` | ||
|
||
> **Примечание** Вы можете узнать больше об удобстве использование действий с пакетом `Laravel Actions` на его [официальном сайте](https://laravelactions.com/). | ||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters