Mit kell felvenni egy adatbázis osztályba
On február 15, 2021 by admin Jelenleg egy java alkalmazást fejlesztek, amely egy SQL szerverrel fog kommunikálni. Ezért létrehoztam a (z) Database
osztályt, amely a open()
és close()
.
Szeretnék adatot hozzáadni az adatbázishoz. Ebben a példában a táblázatot jobnak hívják. Ezért létrehoztam egy osztályt: Job
. Ezeken a munkákon kívül (sok) különböző dolog lesz, amelyeket az adatbázis tárol. A kérdésem a következő: Hova tegyem a módszeremet addJob(Job j)
? Eddig három lehetséges megoldás juthat eszembe:
-
Adja hozzá a
addJob(Job j)
metódust aDatabase
osztály, amely absztrakciót biztosít a program többi részéhez. A program többi részének nem kell aggódnia, hogy ez hogyan valósul meg. Ennek hátránya, hogy azDatabase
végül nagyon nagy lesz. -
Hozzon létre egy külön osztályt
JobHandler
azpublic JobHandler(Database d)
konstruktorral, amely elfogad egy adatbázist. Ebben aJobHandler
aaddJob(Job j)
szolgáltatást tervezem. Itt a problémám, hogy melyik szinten lépjek kapcsolatba aDatabase
vel, mivel jelenleg nincsenek nyilvános módszerek, kivéve aopen()
ésclose()
. Készítsek olyan módszert, amely tiszta sql utasításokat fogad el? Ez számomra nem tűnik nagyon jónak. -
Tedd absztraktvá a
Database
osztályt, és bővítsd ki úgy, hogy a hiányzó módszereket itt valósítsam meg . Hátránya, hogy nem adhatom át az adatbázist, és nem használhatom ugyanazt a kapcsolatot többféle lekérdezéshez.
Mit tenne a probléma megoldása érdekében? Hogyan kell felépítenem az osztályaimat, hogy ne legyenek túl nagyok, és az adatbázis-osztály túl nagy részét sem kell kitenni azoknak az osztályoknak, amelyek megvalósítják az adatok kezelésére szolgáló módszereket?
Szerkesztés Felhívjuk figyelmét, hogy a job véletlenszerű osztály, amelynek csak példaként kell szolgálnia az adatbázisban tárolt adatokra.
megjegyzések
- " Mit tenne a probléma megoldása érdekében? " Körülbelül 9001 olyan érett könyvtár van, amelyek pontosan mindezt elvégzik. Használja az egyiket.
- Mondjon egy példát egy ilyen könyvtárra. Szeretnék utánanézni.
- Mit értesz azon, hogy Jób csak példa az adatokra?
- Átfogalmaztam a mondatot.
- Ezután keress egy jobb példát, különben az emberek azt gondolják, hogy probléma az adatbázis-feladatokról (ütemezett feladatok) szól, függetlenül a magyarázó szerkesztés elolvasásától zab és / vagy nem világos.
Válasz
A kérdés nagyon zavaró. Ami zavaróbbá teszi, az a tény, hogy úgy döntött, hogy Jobot és Jobhandlert használja példaként, ami arra készteti az embereket, hogy az adatbázis-feladatokról (ütemezett feladatok) szóljon. De a szerkesztés elolvasása után azt hiszem, megpróbálsz írni egy DAO-t , és olyan munkahelyekről beszéltél, mint “foglalkoztatási helyzetben”.
Ne írjon adatbázis osztályt. Csak hozzon létre egy JDBC kapcsolatot, és adja át a DAO-nak.
Megpróbálhat általános DAO-t írni, vagy írhat egyes DAO-kat minden entitáshoz. A DAO-k SQL-t fognak tartalmazni mondatok benne.
Egy másik minta: Aktív rekordminta .
A DAO hozzáfér az adatbázisokhoz, beburkolja az SQL-t és lehetővé teszi az üzleti objektumok feltöltésére. A DAO-k is rendelkezhetnek olyan módszerekkel, amelyek adatlistákat adnak vissza.
Az Active Record-ot általában olyan üzleti objektumok megvalósításához használják, amelyek maguk kezelik az írást és az adatok beolvasását az adatbázisból. Ezt túl soknak tartják mivel az osztályoknak nem szabad saját kitartásukat kezelniük. Az Aktív rekordok egy táblázat egyetlen sorát képviselik.
Ez a kérdés az Active Record DAO formába történő visszafejlesztéséről segít, mert rendelkezik egy Az adatbázisokhoz hozzáférő, beillesztett vagy frissített objektumok teljes példája, és annak válaszai elmagyarázzák, hogy helyette hogyan kell megvalósítani a DAO-t.
Megjegyzések
- Megemlíthetné az ORM-et keretrendszereket is.
- @COMEFROM OP kezdő. Meg kell tanulnia úszni, mielőtt jet-ski vezetne. Az ORM-ek hihetetlenül összetettek.
- Köszönjük válaszát. A " -re hivatkozom, csak hozzon létre egy adatbázis-kapcsolatot ". Ez azt jelentené, hogy kapcsolatot teremtsünk a főosztályban az összes hibakezeléssel stb. ' nem ütközne ez az egyetlen felelősség elvével?
- A főosztály nem felel meg tipikusan a SRP, mert általában előkészíti az előfeltételeket, elolvassa a konfigurációs fájlokat stb., megnyitja a fő ablakot a GUI alkalmazások esetében, vagy legalábbis meghívja az ezt végrehajtó módszereket, célja, hogy az alkalmazás belépési pontja legyen. Létrehozhat egy függvényt, amely visszaadja az összeköttetést, és meghívhatja a main-ból, vagy kérhet kapcsolatot a kapcsolatkészlet-kezelőhöz, ha olyan webes tárolót használ, amely támogatja a kapcsolati készleteket stb.
Vélemény, hozzászólás?