Si tratta di un odore di invidia caratteristica?

5

Nella mia applicazione, volevo separare la GUI e la logica di business con una sorta di ModelViewPresenter-Design.

Pertanto ho creato alcune classi di Presenter, che non hanno molto più codice delle proprietà delle mie forme per il database.

Per fornire persistenza (carica e salva) Ho creato nuove classi con metodi che impostano le proprietà delle classi di presentatori sopra menzionate in preoccupazioni separate (dati presenti in GUI e dati persistenti).

Poiché le mie classi relatore ora sono solo datacontainer senza alcun comportamento, mi chiedo se dovrei unire meglio persistenza e presentatore per semplificare il mio codice. Sembra molto esagerato per me come al momento.

Ecco alcuni frammenti C # da una delle classi Persistenza:

public override void LoadData()
{
    Presenter = (PersonalColorSettingsPresenter) PresenterFactory.GetPresenter(m_User, "ColorSettings");
    loadData();
}

private void loadData()
{
    var color = Settings.GetSelectionColor(m_User);

    Presenter.ActiveRowBackColor = color.BackColor;
    Presenter.ActiveRowBackColor2 = color.BackColor2;
    Presenter.IsActiveRowBackgroundGradientActive = color.GradientActive;
    Presenter.ActiveRowForeColor = color.ForeColor;
}
    
posta MW1971 20.01.2015 - 08:32
fonte

1 risposta

5

No, non dovresti unire la persistenza al tuo presentatore. Potrebbe non sembrare importante in questo momento, ma farlo sarebbe una violazione del Principio di Responsabilità Unica, e se tali decisioni fossero prese ripetutamente a lungo termine porterebbero a un codice che è difficile da mantenere.

Come nota a margine, se stai utilizzando il pattern MVP, il livello di persistenza dovrebbe interagire con gli oggetti del modello, non con il relatore. Il presentatore dovrebbe leggere i dati dal modello per passare alla vista e quindi scrivere i risultati sul modello dopo che è stato completato. Un modulo di archiviazione dati (ad esempio, un certo tipo di repository o DAO - per favore non utilizzare qui il record attivo in quanto viola anche SRP) viene utilizzato per caricare e salvare gli oggetti del modello. Il presentatore dovrebbe sapere come funziona il più possibile, per esempio. se possibile, non dovrebbe interagire con l'archiviazione dei dati (è possibile che si verifichi a un livello più alto), ma se deve farlo, deve farlo tramite un'interfaccia astratta.

    
risposta data 20.01.2015 - 10:03
fonte

Leggi altre domande sui tag