Jak mohu nejlépe inicializovat konstanty z databáze nebo servletu kontextu?

hlasů
2

Máme konstanty deklarované v rozhraní v naší aplikace, jako je tento.

public interface IConstants
{
    public static final String FEVER=6;
    public static final String HEADACHE=8;
}

Nyní chceme naplnit tyto konstanty hodnoty (6 a 8) z databáze (nebo aplikačního servletu kontextu).

Databázové hodnoty uložené ve vyhledávací tabulky jsou již k dispozici v relaci aplikace (v servletu atributu kontextu), a proto nemám dělat databáze volání pokaždé.

Jak můžeme dosáhnout?

Položena 20/04/2009 v 17:18
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
0

Jako konstanty , nemůžete snadno.

Vytvořte třídu s těmi členy, chrání setters (nebo je nastavit z montážního závodu) a poskytnutí metod mechanismů získání.

Více detailů:

Dobře, pro začátek, nemůžete snadno inicializovat konstanty z databáze, protože musí být iniciovány v době, kdy už definovány.

Místo toho vytvořit třídu nějak takto:

public class Constants {
    private static final String FEVER ;
    private static final String HEADACHE ;

    public Constants(String fever, String headache){
        if(FEVER == null){
            FEVER = fever;
            HEADACHE = headache;
         } else {
            // Do something; shouldn't be resetting these.
         }
    }

    public String getFever(){ return FEVER; }
    public String getHeadache(){ return HEADACHE; }
}

Nyní, když jste postavit třídu, nastavit horečka a bolest hlavy. Vzhledem k tomu, že jsou statické, je tu jen jedna hodnota; protože máte jen příjemcové a jsou soukromé, nikdo si je obnovit; a vzhledem k tomu, že jsou konečné, nikdo nemůže proklouznout za zády s dědičností.

Odpovězeno 20/04/2009 v 17:24
zdroj uživatelem

hlasů
1

Vzhledem k tomu, konstantní hodnoty jsou trvalé v databázi, nejlepším řešením by bylo vytvořit typ výčtu a zpřístupnit je přes něj.

Odpovězeno 20/04/2009 v 17:29
zdroj uživatelem

hlasů
0

Aby se jim lišit v závislosti na zdroji dat, kterou budete potřebovat nějaký druh datové struktury pro ně.

Dalo by se definovat bean pro uložení hodnot (polí s getry / regulátorů), nebo pomocí mapy pro hodnoty.

Pravděpodobně byste měli myslet na to, jak spíš problémy s konfigurací než konstant problém. Konstanty jsou skutečně určeny z programového hlediska.

Odpovězeno 20/04/2009 v 17:30
zdroj uživatelem

hlasů
1

Jsou si jisti, že budete potřebovat ?!

Potřebujete-li přidat nový kód při přidávání nového onemocnění tak jako tak, nemá smysl při výrobě „konstanty“ jako data řízené statické (ne konečné) globals. (To bude jen komplikovat věci.)

  • Pokud se obáváte o nesouladu mezi databáze a kód, můžete ověřit, že databáze a konstanty odpovídají při spouštění aplikace. Máte onemocnění je definováno v tabulce a používáte nějaký druh práva referenční integrity?

  • Pokud tak učiníte, že budete potřebovat přístup dat řízený, pravděpodobně by neměla potřebovat žádné pole pro „známých nemocí“ vůbec, protože tento kód by neměl ve skutečnosti závisí na nich. V tomto případě by měl každý nemoc být správný objekt s identitou a dalších vlastností.

  • Pokud budete potřebovat speciální zacházení pro určité typy pravděpodobně měl vrátit do výčtu znovu ...

  • Pokud jste místo toho mají mnoho nemocí (které mohou být přidány dynamicky) a pouze několik druhů - několik nemocí, jsou řešeny stejným způsobem od stejného kódu; přidat typ v chorobného stolu a v kódu jako výčtu (nebo konstanta) pro onemocnění typu o-a použít ke spuštění jinou logiku.

  • Jestliže každý nemoc ve skutečnosti mají hodně složité, mohlo by to být dobrý nápad, aby se pokusili napsat jednu třídu pro každou nemoc. (Pak můžete udělat správnou věc, O / R s dílčími tříd a vše ...)

Rozhraní výčtu cludge není neccesary protože Java 5, jak se můžete dostat oba výčty a dělat statické dovoz, pokud potřebujete.

(A při použití výčet, ověřování databáze je jednodušší, jak si získat výčet zdarma).

Vaše pole by měla být zřejmě umístěny ve třídě s názvem nemoc nebo SickDude místo gigantické globální třídy konstant. (jako například pole v kalendáři). Případně jako vnitřní veřejné výčtu ve třídě, kde se „patří.“

Odpovězeno 20/04/2009 v 18:18
zdroj uživatelem

hlasů
4

Vzhledem k tomu, že nechcete měnit stávající kód příliš mnoho, nejjednodušší způsob, jak bude vypadat následovně:

public interface IConstants {
    public static final String FEVER = getConstFromDatabase("FEVER");
    public static final String HEADACHE = getConstFromDatabase("HEADACHE");
}
Odpovězeno 20/04/2009 v 18:48
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more