Mitä sisällyttää tietokantaluokkaan
On helmikuu 15, 2021 by admin Kehitän parhaillaan Java-sovellusta, joka kommunikoi SQL-palvelimen kanssa. Siksi loin luokan Database
, joka on vastuussa open()
ja close()
.
Haluan pystyä lisäämään tietoja tietokantaan. Tässä esimerkissä taulukkoa kutsutaan työksi. Siksi loin luokan Job
. Näiden töiden lisäksi tietokantaan tallennetaan (monia) erilaisia asioita. Kysymykseni kuuluu: Minne laitan menetelmän addJob(Job j)
? Toistaiseksi voin ajatella kolmea mahdollista ratkaisua:
-
Lisää menetelmä
addJob(Job j)
kohtaanDatabase
-luokka, joka tarjoaa abstraktin muulle ohjelmalle. Lopun ohjelman ei tarvitse huolehtia siitä, miten tämä toteutetaan. Tämän haittapuoli on, ettäDatabase
tulee lopulta erittäin suuri. -
Luo erillinen luokka
JobHandler
rakentajanpublic JobHandler(Database d)
kanssa, joka hyväksyy tietokannan. TässäJobHandler
aion tarjotaaddJob(Job j)
. Minun ongelmani on täällä, millä tasolla minun pitäisi olla vuorovaikutuksessaDatabase
kanssa, koska tällä hetkellä ei ole julkisia menetelmiä paitsiopen()
jaclose()
. Pitäisikö minun luoda menetelmä, joka hyväksyy puhtaat sql-lauseet? Tämä ei näytä minulle kovin hyvältä. -
Tee luokka
Database
abstraktiksi ja laajenna sitä niin, että toteutan puuttuvat menetelmät täällä . Haittapuoli on, että en voi siirtää tietokantaa ympäri ja käyttää samaa yhteyttä useissa erilaisissa kyselyissä.
Mitä tekisimme tämän ongelman ratkaisemiseksi? Kuinka minun pitäisi luokitella luokkani niin, että ne eivät tule liian suuriksi, eikä myöskään liikaa tietokantaluokkaa tarvitse altistaa luokille, jotka toteuttavat menetelmät tietojen käsittelemiseksi?
Muokkaa Huomaa, että työ on satunnainen luokka, jonka tulisi toimia vain esimerkkinä tietokantaan tallennetuille tiedoille.
Kommentit
- " Mitä voitaisiin tehdä ongelman ratkaisemiseksi? " On noin 9001 aikuista kirjastoa, jotka tekevät täsmälleen kaikki nämä asiat. Käytä yhtä niistä.
- Voitteko antaa minulle esimerkin tällaisesta kirjastosta. Haluaisin tutkia sitä.
- Mitä tarkoitat Jobin olevan vain esimerkki tiedoista?
- muotoilin lauseen uudelleen.
- Löydän sitten paremman esimerkin, muuten ihmiset ajattelevat ongelma liittyy tietokantatöihin (ajoitetut tehtävät) riippumatta selittävän muokkauksen lukemisesta.Kysymys on myös liian br oad ja / tai ei selvä.
Vastaa
Kysymys on hyvin hämmentävä. Hämmentävämmäksi tekee se, että päätit käyttää Jobia ja Jobhandleria esimerkkeinä, mikä saa ajattelemaan, että kysymys koskee tietokantatöitä (ajoitettuja tehtäviä). Luettuasi muokkauksen yrität siis kirjoittaa DAO ja puhuit työpaikoista kuten ”työpaikalla”.
Älä kirjoita tietokantaluokkaa. Luo vain JDBC-yhteys ja välitä se DAO: lle.
Voit joko yrittää kirjoittaa yleisen DAO: n tai kirjoittaa yksittäisiä DAO: ita kullekin entiteetille. DAO: lla on SQL lauseita sen sisällä.
Toinen malli on aktiivinen tietuemalli .
DAOs käyttää tietokantoja, kapseloi SQL: n ja antaa sinun DAO: lla voi olla myös menetelmiä, jotka palauttavat tietoluettelot.
Aktiivista tietuetta käytetään yleensä toteuttamaan liiketoimintaobjekteja, jotka hallitsevat kirjoitus- ja lukutietoja itse tietokannasta. Tätä pidetään liikaa koska luokkien ei pitäisi hallita omaa pysyvyyttään. Aktiiviset tietueet edustavat yhtä taulukon riviä.
Tämä kysymys aktiivisen tietueen korjaamisesta DAO-lomakkeeseen auttaa sinua, koska sillä on täydellinen esimerkki objektista, joka käyttää tietokantoja ja lisää tai päivittää, ja sen vastauksissa kerrotaan, miten DAO otetaan käyttöön.
Kommentit
- Voit mainita ORM: n myös kehyksiä.
- @COMEFROM OP on aloittelija. Hänen on opittava uimaan ennen vesiskootterilla ajamista. ORM: t ovat uskomattoman monimutkaisia.
- Kiitos vastauksestasi. Tarkoitan " vain luo tietokantayhteys ". Tämä tarkoittaisi yhteyden luomista pääluokkaan kaikilla virheiden käsittelyllä jne.? Eikö ' olisi ristiriidassa yhden vastuun periaatteen kanssa?
- Pääluokka ei noudata tyypillisesti SRP, koska se yleensä valmistelee ennakkoedellytykset, lukee kokoonpanotiedostot jne., avaa pääikkunan GUI-sovellusten tapauksessa tai ainakin kutsuu menetelmiä, jotka tekevät sen, sen tarkoitus on olla sovelluksen lähtökohta. Voit luoda toiminnon, joka palauttaa yhteyden, ja kutsua sitä pääosasta tai voit pyytää yhteyttä yhteyspoolin hallintaan, jos käytät verkkoyksikköä, joka tukee yhteyspooleja jne.
Vastaa