2.6 KiB
| name | description | metadata | ||
|---|---|---|---|---|
| feedback-engine-app-independence | Services/System (движок Bicycle) не должны зависеть от App-namespace классов или схемы конкретного проекта |
|
Код в 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 и т.д.), это их уровень.