Skip to content

Commit 9c304b8

Browse files
authored
Merge pull request #306 from lazynvim/patch-1
Update README_RU.md
2 parents 6c3c9d1 + 3fed3f5 commit 9c304b8

File tree

1 file changed

+33
-33
lines changed

1 file changed

+33
-33
lines changed

README_RU.md

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# Go Чистая Архитектура
44

5-
Шаблон Чистой Архитектурой для приложений на Golang
5+
Шаблон Чистой Архитектуры для приложений на Golang
66

77
[![Release](https://img.shields.io/github/v/release/evrone/go-clean-template.svg)](https://github.com/evrone/go-clean-template/releases/)
88
[![License](https://img.shields.io/badge/License-MIT-success)](https://github.com/evrone/go-clean-template/blob/master/LICENSE)
@@ -25,7 +25,7 @@
2525
Цель этого шаблона - показать принципы Чистой Архитектуры Роберта Мартина (дядюшки Боба):
2626

2727
- как структурировать проект и не дать ему превратиться в спагетти-код
28-
- где хранить бизнес-логику, что бы она оставалась независимой, чистой и расширяемой
28+
- где хранить бизнес-логику, чтобы она оставалась независимой, чистой и расширяемой
2929
- как не потерять контроль при росте проекта
3030

3131
[Go-clean-template](https://evrone.com/go-clean-template?utm_source=github&utm_campaign=go-clean-template) создан и
@@ -91,7 +91,7 @@ make compose-up-all
9191

9292
### `cmd/app/main.go`
9393

94-
Инициализация конфигурации и логгера. Здесь вызывается основаная часть приложения из `internal/app/app.go`.
94+
Инициализация конфигурации и логгера. Здесь вызывается основная часть приложения из `internal/app/app.go`.
9595

9696
### `config`
9797

@@ -125,19 +125,19 @@ Protobuf файлы также используются для генераци
125125

126126
### `internal/app`
127127

128-
Здесь находится только одна _Run_ функция. Она размещена в файле `app.go` и является логическим продолжением функции
128+
Здесь находится только одна функция _Run_. Она размещена в файле `app.go` и является логическим продолжением функции
129129
_main_.
130130

131131
Здесь создаются все основные объекты.
132-
[Внедрение Зависимостей](#внедрение-зависимостей) происходит через конструктор "New ...".
133-
Эта позволяет слоировать приложение, делая бизнес-логику независимой от других слоев.
132+
[Внедрение зависимостей](#внедрение-зависимостей) происходит через конструктор "New ...".
133+
Это позволяет слоировать приложение, делая бизнес-логику независимой от других слоев.
134134

135-
Далее, запускается сервер и ожидается сигнал в _select_ для корректного завершения работы.
135+
Далее запускается сервер и ожидается сигнал в _select_ для корректного завершения работы.
136136
Если `app.go` стал слишком большим, вы можете разделить его на несколько файлов.
137137

138138
Если зависимостей много, то для удобства можно использовать [wire](https://github.com/google/wire).
139139

140-
Файл `migrate.go` испольузется для автоматической миграции базы данных.
140+
Файл `migrate.go` используется для автоматической миграции базы данных.
141141
Он включается в компиляцию только при указании тега _migrate_.
142142
Пример:
143143

@@ -147,17 +147,17 @@ go run -tags migrate ./cmd/app
147147

148148
### `internal/controller`
149149

150-
Слой хэндлеров сервера (MVC контроллеры). В шаблоне показана работа серверов:
150+
Слой хэндлеров сервера (MVC контроллеры). В шаблоне показана работа 3 серверов:
151151

152152
- AMQP RPC (на основе RabbitMQ в качестве транспорта)
153153
- gRPC ([gRPC](https://grpc.io/) фреймворк на основе protobuf)
154154
- REST API ([Fiber](https://github.com/gofiber/fiber) фреймворк)
155155

156156
Маршрутизаторы http сервера пишутся в едином стиле:
157157

158-
- Хэндлеры сгруппируются по области применения (по общему критерию)
159-
- Для каждый группы создается свой маршрутизатор
160-
- Объект бизнес-логики передается в маршрутизатор, что бы быть доступным внутри хэндлеров
158+
- Хэндлеры группируются по области применения (по общему критерию)
159+
- Для каждой группы создается свой маршрутизатор
160+
- Объект бизнес-логики передается в маршрутизатор, чтобы быть доступным внутри хэндлеров
161161

162162
#### `internal/controller/amqp_rpc`
163163

@@ -199,7 +199,7 @@ reflection.Register(app)
199199
#### `internal/controller/http`
200200

201201
Простое версионирование REST API.
202-
Для создания версии v2, нужно создать папку `http/v2` с таким же содержимым.
202+
Для создания версии v2 нужно создать папку `http/v2` с таким же содержимым.
203203
Добавить в файл `internal/controller/http/router.go` строки:
204204

205205
```go
@@ -221,18 +221,18 @@ swagger [swag](https://github.com/swaggo/swag).
221221
### `internal/entity`
222222

223223
Сущности бизнес-логики (модели). Могут быть использованы в любом слое.
224-
Также они могуть иметь методы, например, для валидации.
224+
Также они могут иметь методы, например, для валидации.
225225

226226
### `internal/usecase`
227227

228228
Бизнес-логика.
229229

230-
- Методы сгруппированы по области применения (по общему критерию)
230+
- Методы группируются по области применения (по общему критерию)
231231
- У каждой группы своя отдельная структура
232232
- Один файл - одна структура
233233

234234
Репозитории, webapi, rpc и другие структуры передаются в слой бизнес-логики в связующем файле `internal/app/app.go`
235-
(смотрите [Внедрение Зависимостей](#внедрение-зависимостей)).
235+
(смотрите [Внедрение зависимостей](#внедрение-зависимостей)).
236236

237237
#### `internal/repo/persistent`
238238

@@ -242,7 +242,7 @@ swagger [swag](https://github.com/swaggo/swag).
242242

243243
Это абстрактное web API, с которым взаимодействует бизнес-логика.
244244
Например, это может быть внешний микросервис, к которому бизнес-логика обращается через REST API.
245-
Название пакета выбирается таким, что бы соответствовать его назначению.
245+
Название пакета выбирается таким, чтобы соответствовать его назначению.
246246

247247
### `pkg/rabbitmq`
248248

@@ -252,13 +252,13 @@ RabbitMQ RPC паттерн:
252252
- Используется fanout-обмен, к которому привязана одна эксклюзивная очередь - это наиболее производительная конфигурация
253253
- Переподключение при потере соединения
254254

255-
## Внедрение Зависимостей
255+
## Внедрение зависимостей
256256

257257
Для устранения зависимости бизнес-логики от внешних пакетов используется внедрение зависимостей.
258258

259259
Например, через конструктор "New" внедряется репозиторий в слой бизнес-логики.
260260
Это делает бизнес-логику независимой и переносимой.
261-
Мы можем переписать реализацию интерфейса репозитория не внося изменения в пакет бизнес-логики `usecase`.
261+
Мы можем переписать реализацию интерфейса репозитория, не внося изменения в пакет бизнес-логики `usecase`.
262262

263263
```go
264264
package usecase
@@ -298,7 +298,7 @@ func (uc *UseCase) Do() {
298298

299299
Программисты создают оптимальную архитектуру приложения после написания основной части кода.
300300

301-
> Хорошая архитектура позволяет отклыдывать изменение как можно дольше.
301+
> Хорошая архитектура позволяет откладывать изменения как можно дольше.
302302
303303
### Основной принцип
304304

@@ -309,28 +309,28 @@ func (uc *UseCase) Do() {
309309
Например, приложение можно разделить на два слоя - внутренний и внешний:
310310

311311
1. **Бизнес-логика** (например, стандартная библиотека Go).
312-
2. **Инструменты** (базы данных, сервера, брокеры сообщений и другие библиотеки и фреймворки).
312+
2. **Инструменты** (базы данных, серверы, брокеры сообщений и другие библиотеки и фреймворки).
313313

314314
![Чистая архитектура](docs/img/layers-1.png)
315315

316316
**Внутренний слой** с бизнес-логикой должен быть чистым. Он обязан:
317317

318-
- Не импортировать пакеты с внешних слоев.
318+
- Не импортировать пакеты из внешних слоев.
319319
- Использовать только стандартную библиотеку.
320320
- Взаимодействовать с внешними слоями через интерфейсы (!).
321321

322322
Бизнес-логика не должна ничего знать о Postgres или о реализации web API.
323-
Бизнес-логика имеет интерфейс для взаимодейсвтия с _абстрактной_ базой данных или _абстрактным_ web API.
323+
Бизнес-логика имеет интерфейс для взаимодействия с _абстрактной_ базой данных или _абстрактным_ web API.
324324

325325
**Внешний слой** имеет ограничения:
326326

327-
- Компоненты этого слоя не могут знать друг о друге и взаимодействать напрямую. Обращение друг к другу происходит через
327+
- Компоненты этого слоя не могут знать друг о друге и взаимодействовать напрямую. Обращение друг к другу происходит через
328328
внутренний слой - слой бизнес-логики.
329329
- Вызовы во внутренний слой выполняются через интерфейсы (!).
330330
- Данные передаются в формате, удобном для бизнес-логики (структуры хранятся в `internal/entity`).
331331

332-
Например, нужно обратиться к базе данных из HTTP хэндера (в слое контроллер).
333-
База данных и HTTP находятся во внешнем слое. Они не знаю друг о друге ничего и не могут взаимодействовать напрямую.
332+
Например, нужно обратиться к базе данных из HTTP хэндлера (в слое контроллер).
333+
База данных и HTTP находятся во внешнем слое. Они не знают друг о друге ничего и не могут взаимодействовать напрямую.
334334
Взаимодействие будет происходить через слой бизнес-логики `usecase`:
335335

336336
```
@@ -366,12 +366,12 @@ func (uc *UseCase) Do() {
366366

367367
### Терминология в Чистой Архитектуре
368368

369-
- **Entities** (сущности) - это структуры, с которыми работает бизнес логика.
369+
- **Entities** (сущности) - это структуры, с которыми работает бизнес-логика.
370370
Они располагаются в папке `internal/entity`.
371371
В терминологии MVC сущности - это модели.
372-
- **Use Cases** это бизнес-логика. Располагается в папке `internal/usecase`.
372+
- **Use Cases** - это бизнес-логика. Располагается в папке `internal/usecase`.
373373

374-
Слой, с которым бизнес-логика взаимодействует напрямую, обычно, называется _инфраструктурным_ слоем.
374+
Слой, с которым бизнес-логика взаимодействует напрямую, обычно называется _инфраструктурным_ слоем.
375375
Это может быть репозиторий `internal/usecase/repo`, внешнее webapi `internal/usecase/webapi`, любой пакет или
376376
микросервис.
377377
В шаблоне пакеты _infrastructure_ размещены внутри `internal/usecase`.
@@ -392,7 +392,7 @@ func (uc *UseCase) Do() {
392392
для создания больших монолитных приложений предложено 4 слоя.
393393

394394
В исходной версии внешний слой делится на два, которые также имеют инверсию зависимостей в другие слои и взаимодействуют
395-
через интерфесы.
395+
через интерфейсы.
396396

397397
Внутренний слой также делится на два (с использованием интерфейсов) в случае сложной логики.
398398

@@ -403,11 +403,11 @@ func (uc *UseCase) Do() {
403403

404404
### Другие подходы
405405

406-
Кроме Чистой Архитектуры есть и другие подоходы:
406+
Кроме Чистой Архитектуры есть и другие подходы:
407407

408408
- Луковая Архитектура
409-
- Гексогональная (_Порты и адаптеры_ также на неё похожа)
410-
Они обе основаны на на принципе инверсии зависимостей.
409+
- Гексагональная (_Порты и адаптеры_ также похожа на неё)
410+
Они обе основаны на принципе инверсии зависимостей.
411411
_Порты и адаптеры_ очень похожи на _Чистую Архитектуру_. Различия в основном заключаются в терминологии.
412412

413413
## Похожие проекты

0 commit comments

Comments
 (0)