# Architecture Layers

Sophia non e una semplice applicazione Yii 1.1. Prima di modificare codice classifica sempre il layer corretto.

## Layer

- `FRM`: framework condiviso, controller/model/base comuni, rendering, helper e costanti runtime.
- `APP`: logica applicativa e override di dominio.
- `CLI/client`: specializzazione cliente o variante installativa. Non assumere che `cli` significhi console command Yii.

## Routing e override

Il routing applicativo passa da `controllerMap`:

- `protected/config/config_frm.php`: mapping base framework.
- `protected/config/config_app.php`: override applicativi.
- `protected/config/config_client.php`: override cliente o installazione.

## Regole operative

1. Trova il controller effettivo tramite config e `controllerMap` prima di editare.
2. Applica la modifica nel layer piu vicino al dominio richiesto.
3. Non promuovere codice cliente in `FRM` senza motivazione esplicita.
4. Mantieni fallback legacy se introduci override o mapping nuovi.
5. Quando ci sono classi omonime in piu layer, documenta quale viene risolta a runtime.

## Segnali di rischio

- Fix fatto in `FRM` per una sola installazione cliente.
- Override `APP` o `CLI` ignorato perche si e letto solo il controller base.
- Nuova action non registrata o non raggiunta per `controllerMap`.
- Uso di pattern Yii generici dove il progetto ha gia una convenzione Sophia.
