Sto rifattorizzando un'area client di un'app, in cui un cliente può scegliere tra diverse schermate per modificare o aggiungere impostazioni personalizzate.
Ci sono impostazioni globali e impostazioni relative al progetto. Le impostazioni globali hanno dipendenze quasi identiche, come ScreenRenderFactory
o SoftwareVersion
. Pertanto, ho gestito il rendering delle schermate delle impostazioni globali in una classe ClientAreaGlobalSettings
.
Ma ora dovrei, per una specifica schermata delle impostazioni globali, aggiungere un DTO o un modello di lettura che nessuno degli altri schermi ha bisogno. Dovrei aggiungere questo oggetto a ClientAreaGlobalSettings
o creare una classe ClientAreaFAQSettings
che sarebbe quasi identica ad eccezione di detto modello letto? Uno sembra una violazione di DRY, l'altro una violazione di SRP.
Forse non sono a conoscenza di un modello di codice che risolva questo problema.
Modifica
La classe di listener ClientAreaGlobalSettings
semplificata:
class ClientAreaGlobalSettings implements Listener{
private $ScreenRenderFactory;
public function attach(){};
public function renderScreen(){
$this->ScreenRenderFactory->render(
$params[ SoftwareVersion, Template, ClientId ]
);
}
}
$params
è i dati passati al modello di visualizzazione. Come ho detto, per le mie impostazioni FAQ, ho bisogno di un modello di lettura aggiuntivo che potrei semplicemente aggiungere all'array. Quindi tutti gli altri schermi riceveranno dati che non sono necessari.
EDIT2: Il downvoting senza la spiegazione è abbastanza inutile, quindi pls. cura di spiegare.