26 lines
2.6 KiB
Markdown
26 lines
2.6 KiB
Markdown
---
|
||
name: feedback-engine-app-independence
|
||
description: Services/System (движок Bicycle) не должны зависеть от App-namespace классов или схемы конкретного проекта
|
||
metadata:
|
||
type: feedback
|
||
---
|
||
|
||
Код в `System/*` и `Services/*` (движок Bicycle) не должен импортировать или напрямую зависеть от
|
||
классов в `App\*` (namespace конкретного приложения) или предполагать конкретную схему БД конкретного
|
||
проекта (имена таблиц/колонок). Любая специфика проекта — через конфиг (`App/config/config.php`), а не
|
||
хардкод в движке.
|
||
|
||
**Why:** пользователь явно поправил: «движок под проект не подгоняешь? он должен быть независим и на
|
||
нём чтобы можно было любой проект реализовать». Конкретный инцидент: `Services\Auth\DbAuthDriver`
|
||
изначально импортировал `App\Repositories\UserRepository` и был жёстко завязан на таблицу `users` с
|
||
колонками `login`/`password`/`last_login` этого проекта — на другом проекте с другой структурой это не
|
||
заработало бы. Переделан на конфигурируемый драйвер: имя таблицы/колонок (`table`/`primary_col`/
|
||
`login_col`/`password_col`/`last_login_col`) читаются из `Config::get('auth', 'db')`, сам класс ничего
|
||
не знает про `App\*`. Тест (`tests/Unit/DbAuthDriverTest.php`) специально гоняется на таблице с ДРУГИМИ
|
||
именами колонок, чем реальный проект — чтобы независимость проверялась, а не подразумевалась.
|
||
|
||
**How to apply:** перед тем как добавлять что-то в `System/*`/`Services/*`, проверять: (1) нет ли
|
||
`use App\...` в файле; (2) не зашиты ли в SQL/логику конкретные имена таблиц/колонок проекта — если
|
||
зашиты, выносить в конфиг с разумными дефолтами. `App/Repositories/*`, `App/Controller/*` — наоборот,
|
||
им можно и нужно знать о конкретной схеме (`users`, `budget` и т.д.), это их уровень.
|