Variabile o parametro globale?

-2

È corretto che homeitem debba essere dichiarato all'interno del metodo OnLoad e sovrascritto a tutti i metodi di rendering invece di dichiararlo semplicemente come variabile globale e accedervi tramite tutti i metodi di rendering?

public partial class Default : Page
{
    /// <summary>
    /// Initializes the module.
    /// </summary>
    /// <param name="e">
    /// The event arguments.
    /// </param>
    protected override void OnLoad(EventArgs e)
    {
        var homeItem = Sitecore.Context.Database.GetItem(Sitecore.Context.Site.StartPath);

        // some code...

        this.RenderHomeIcon(homeItem);
        this.RenderFacebookTags();
        this.RenderLanguageEntries();
        this.RenderServiceNavigation(homeItem);
        this.RenderMainNavigation();
        this.RenderCallToActionItems(homeItem, isHomeItem);
        this.RenderFooterMainNavigation(homeItem);
        this.RenderContact(homeItem);
        this.RenderFooterCulture(homeItem);

        if (isHomeItem)
        {
            this.InterfererToolbar(homeItem);
            this.RenderWebcamViews(homeItem);
            webcam.Visible = true;
        }

        // some more code...
    }
}

Vorrei solo sapere cosa è corretto / standard, quindi posso attenermi a quello!

    
posta Awusuwah 26.08.2016 - 12:29
fonte

1 risposta

0

Da quello che vedo qui ti stai chiedendo di rendere homeItem una variabile di funzione o un campo di classe, nessuno dei quali ammonta a una variabile globale.

Ora, dal tuo codice sembra che l'homeItem sia disegnato da uno stato globale di sorta, quindi risponderei alla tua domanda con più domande?.

  • Quanto spesso cambiano i dati originali? Se non cambia mai, puoi tranquillamente renderlo un campo di livello di classe. Se cambierà, probabilmente è meglio prenderlo ogni volta che ne hai bisogno (lascialo come una variabile di funzione com'è ora). Ora leggendo il codice, se le tue variabili sono nominate correttamente, dubito che il percorso iniziale cambierebbe molto dopo l'avvio dell'app.

  • Quanto è costoso ottenere il valore? cioè, sta chiamando Sitecore.Context.Database.GetItem (Sitecore.Context.Site.StartPath); qualcosa che è costoso fare a (memoria, CPU, latenza ecc.). Se no, puoi chiamarlo ogni volta che ne hai bisogno, a condizione che non cambi tra le chiamate (vedi prima domanda).

Infine, il concetto di GlobalVariable è abbastanza chiaro nel mondo dei programmatori e in un uppon molto corrucciato. La maggior parte per ottime ragioni, ma questo non significa necessariamente che dovrebbe essere vietato. Questo è il motivo per cui ho interpretato la tua GlobalVariable più come un campo privato per la tua classe rispetto a una vera variabile globale.

Quindi fondamentalmente qui il miglior consiglio disponibile su questa intera pagina IMHO sono le parole sagge di @RobertHarvey: Sapere cosa ti serve, conoscere il tuo sistema, ottenere le possibili soluzioni e quello giusto dovrebbe emergere. Soprattutto, resta curioso e non farti religioso sul codice.

    
risposta data 26.08.2016 - 17:09
fonte

Leggi altre domande sui tag