Sto lavorando su un'applicazione Rails che utilizza un MVC classico come struttura fondamentale. In quella struttura il controllore dovrebbe essere responsabile di "quale vista visualizzare quando".
Ora, dopo aver letto un modello di progettazione, ho imparato a conoscere i modelli di progettazione e, ispirato, ho iniziato a cercare modi per utilizzarli per migliorare la qualità del codice. Un paio di mesi fa ho iniziato a scrivere codice che rende una collezione di libri (non proprio, sto solo semplificando qui). Ogni libro è un'istanza di classe ruby e ha una proprietà 'tipo'. A seconda della proprietà del tipo, i libri sembrano drasticamente diversi l'uno dall'altro (per i libri diversi vengono utilizzati interi confronti parziali). Ora ho avuto la possibilità di avere qualcosa come un if statement
nel mio controller o vista, scegliere quale partial renderizzare per ogni libro, o associare direttamente un partial con la proprietà type del book (che è più simile a un pattern di strategia, penso ). Il secondo modo mi è sembrato molto migliore, perché mi sono liberato di tutte le affermazioni, quindi è quello per cui sono andato. Ho semplicemente fatto qualcosa come render books
nella vista e ogni libro reso correttamente in base al tipo.
Tutto sembrava bello, comunque. Ora ho iniziato a pensare se questo è contro il modello di mvc. Il modo in cui il codice è scritto ora, il controller non sta decidendo nulla su come rendere un particolare libro. Confermando la mia paura di una potenziale stranezza, i designer con cui lavoro mi hanno portato alla mente che di solito guardano solo il livello delle viste delle rotaie (sono responsabili della scrittura della struttura html). Prima potevano facilmente seguire quale partial era stato reso per ogni libro, come prima che tutta la logica fosse nella vista in una forma di leggere facilmente if statements
. Ora per scoprire quali rendering parziali per quale tipo di libro devono andare fino in fondo nel livello del modello. Sembra sbagliato averli andare lì.
Ho fatto la cosa sbagliata inserendo la logica "which partial to render" nel modello?