Perché la templatura delle stringhe è migliore della concatenazione delle stringhe da una prospettiva ingegneristica?

1

Una volta ho letto (penso che fosse in "Programming Pearls") che si dovrebbero usare i template invece di costruire la stringa attraverso l'uso della concatenazione.

Ad esempio, considera il modello sottostante (usando la libreria del rasoio C #)

<in a properties file>
Browser Capabilities
Type = @Model.Type
Name = @Model.Browser
Version = @Model.Version
Supports Frames = @Model.Frames
Supports Tables = @Model.Tables
Supports Cookies = @Model.Cookies
Supports VBScript = @Model.VBScript
Supports Java Applets = @Model.JavaApplets
Supports ActiveX Controls = @Model.ActiveXControls

e successivamente, in un file di codice separato

private void Button1_Click(object sender, System.EventArgs e)
{
    BrowserInfoTemplate = Properties.Resources.browserInfoTemplate; // see above
    string browserInfo = RazorEngine.Razor.Parse(BrowserInfoTemplate, browser);
    ...
}

Da un punto di vista dell'ingegneria del software, come è meglio di un concatenamento di stringhe equivalente, come di seguito:

private void Button1_Click(object sender, System.EventArgs e)
{
    System.Web.HttpBrowserCapabilities browser = Request.Browser;
    string s = "Browser Capabilities\n"
        + "Type = "                    + browser.Type + "\n"
        + "Name = "                    + browser.Browser + "\n"
        + "Version = "                 + browser.Version + "\n"
        + "Supports Frames = "         + browser.Frames + "\n"
        + "Supports Tables = "         + browser.Tables + "\n"
        + "Supports Cookies = "        + browser.Cookies + "\n"
        + "Supports VBScript = "       + browser.VBScript + "\n"
        + "Supports JavaScript = "     + 
            browser.EcmaScriptVersion.ToString() + "\n"
        + "Supports Java Applets = "   + browser.JavaApplets + "\n"
        + "Supports ActiveX Controls = " + browser.ActiveXControls 
              + "\n"
    ...
}
    
posta stephen 28.05.2014 - 23:33
fonte

1 risposta

6

I principi di ingegneria in gioco qui sono la leggibilità e DRY .

Il driver principale della leggibilità è la lunghezza. Il codice più breve è più leggibile (per i lettori con un livello di abilità adeguato), quindi il primo caso è migliore.

Un driver secondario è confuso. L'assenza di punteggiatura e caratteri estranei favorisce il primo caso.

Il punto DRY qui è che simboli come browser e \n sono nascosti nell'astrazione nel caso 1, e ripetuti nel caso 2. Se uno di quelli deve essere cambiato ci saranno meno posti in cui cambiare caso 1 rispetto al caso 2.

Il set contro questo è WYSIWYG. Nel primo caso manca qualcosa tra il codice che vedi e come funziona, dove nel secondo caso tutto il macchinario è semplice da vedere.

[A livello di opinione, vorrei strongmente favorire il caso 1; altri non lo farebbero. Ma questo renderebbe questa una domanda basata sull'opinione e potrebbe essere chiusa, quindi non vorremmo avventurarci lì.]

    
risposta data 29.05.2014 - 02:53
fonte

Leggi altre domande sui tag