Statische methoden met HttpContext en databaseverbindingen

Ik heb zojuist een project met een aantal kernklassen waarin statische methoden worden gebruikt.

Het is een C# -project, met een interface die sommige methoden voor JavaScript weergeeft. In deze interface zijn er veel oproepen naar statische methoden die gebruikmaken van HttpContext en gegevens ophalen uit de database (eigenlijk slechts één toegangsdatabase), zoals deze (sommige methoden hebben wat logica aan de binnenkant):

public static string UsrId {
    get{
        try {
            return HttpContext.Current.Session["usrid"].ToString();
        } catch(NullReferenceException) {
            return ServiceVars.GuestId;
        }
    }
}

Dus mijn vraag is:

Is dit een slechte praktijk? Wat zijn de nadelen (en voordelen?) Van dit te doen?

Ik heb ergens gelezen dat statische methoden die gebruikmaken van databaseverbindingen slecht zijn voor sites met veel verkeer, omdat hierdoor de verzoeken in de wachtrij worden geplaatst. Is dit waar? Of moet ik me geen zorgen maken over de databaseverbinding in statische methoden?

En hoe zit het met de HttpContext binnen statische methoden, is het slecht en waarom?

1
Wat hier slecht is, is de vangst van NullReferenceException . Doe dat nooit.
toegevoegd de auteur John Saunders, de bron
Een nadeel van het gebruik van veel statische methoden is dat ze een obstakel kunnen worden als je later besluit dat je " afhankelijkheidsinjectie ", bijvoorbeeld als u probeert een set eenheidstests voor uw code te maken. Wat betreft uw opmerking over databaseverbindingen ... er is niets inherent aan de aard van statische methoden die zo'n probleem zouden veroorzaken. Het zou afhangen van hoe iemand zijn specifieke databaseverbindingscode heeft geïmplementeerd, ongeacht of statische methoden werden gebruikt of niet.
toegevoegd de auteur Dr. Wily's Apprentice, de bron

1 antwoord

Wat hier slecht is, is de vangst van NullReferenceException . Doe dat nooit.

Controleer in plaats daarvan eerst op null:

public static string UsrId {
    get{
        var userId = HttpContext.Current.Session["usrid"];
        if (userId == null) { return ServiceVars.GuestId;}
        return userId .ToString();
    }
}

Het probleem waar u naar verwijst is ook geen probleem met statische methoden of met HttpContext . Het is een probleem bij het gebruik van de status Sessie .

1
toegevoegd
Nogmaals, de nadelen die u bedoelde hadden te maken met het gebruik van de status Sessie . Ze hebben niets te maken met het gebruik van statische methoden.
toegevoegd de auteur John Saunders, de bron
+1 vermijd alle uitzonderingen als je kunt. Als er een manier is om eruit te komen zonder een uitzondering te gooien, volg die weg.
toegevoegd de auteur JonH, de bron
Oké, bedankt daarvoor :) Het is nu opgelost. Maar over de statische methoden, geen nadelen over het gebruik ervan met database-oproepen of HttpContext?
toegevoegd de auteur Bruno Campos, de bron