Toon posts:

[JAVA] Opbouw webapplicatie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Omdat ik nog niet zoveel ervaring heb met het programmeren in java en helemaal niet met design patterns begon ik me af te vragen of het ontwerp van mijn applicatie wel 'de juiste' of in ieder geval een goed ontwerp is.

Het ziet er ongeveer als volgt uit:

class:database bevat de volgende methods:
handleSelectQuery (returns ResultSet)
handleOtherQuery (void)
initDB (returns Connection)
closeDB (void)

class FactuurGegevens:
bevat de volgende methods:
maakKlantGegevens (returns Vector)
maakOrderRegels (returns Vector)
maakOrderGegevens (returns Vector)

servlet Controller
bevat, afhankelijk van de actie, aanroepen naar methods uit FactuurGegevens deze geven elk een Vector terug die in de sessie geplaatst wordt.
De sessiegegevens worden vervolgens uitgelezen in een JSP en naar het scherm geprint.


Mijn vraag is nu als volgt; Is het correct (om de volledig applicatieafhankelijke) FactuurGegevens door een aparte class te laten regelen, of zou dit moeten laten doen door mijn Controller servlet.

Ik stel deze vraag, omdat ik bij verschillende mensen verschillende aanpakken zie en niemand mij eigenlijk een eenduidig antwoord kan geven.
Als iemand overigens nog een mooie link heeft naar een site/tutorial over het ontwerpen van webapplicatie is dat meer dan welkom, hoewel ik ook eigen informatie heb is een beetje extra nooit weg natuurlijk.

Verwijderd

Er valt heel wat commentaar te leveren op de opzet die je nu hebt. In grote lijnen ben je al heel aardig op weg. Een goede webapplicatie is een leer proces en zodoende lijkt me het handig om dit stap voor stap te doen.

Vandaar dat ik enkel commentaar lever op je interactie tussen controller en jsp (view). Er bestaan meerdere scopes in een webapplicatie (page, request, session, applicatie). Ik kan je verklappen dat de keuze voor de sessie scope niet de meest handige is. Dus kijk naar de verschillende scopes en gebruik de juiste :)

  • Standeman
  • Registratie: November 2000
  • Nu online

Standeman

Prutser 1e klasse

Verwijderd schreef op vrijdag 03 februari 2006 @ 11:11:
Ik stel deze vraag, omdat ik bij verschillende mensen verschillende aanpakken zie en niemand mij eigenlijk een eenduidig antwoord kan geven.
Als iemand overigens nog een mooie link heeft naar een site/tutorial over het ontwerpen van webapplicatie is dat meer dan welkom, hoewel ik ook eigen informatie heb is een beetje extra nooit weg natuurlijk.
Ik zal alvast verklappen dat dat eenduidige antwoord er ook niet is. Er zijn gewoon meerdere wegen die naar Rome leiden en de ene is breed en mooi geasfalteerd (lees duitse snelweg) maar dan moet je omrijden. De ander is wat hobbeliger (lees belgische snelweg), maar qua km's veel korter.

Het is maar net wat je wilt, hoewel je altijd wel een goede basis wilt hebben die je makkelijk kan uitbreiden en niet al te veel onderhoud zal vragen in de toekomst.

Als ik jou was zou ik naar het DAO pattern kijken en naar het Factory pattern om je DAO objecten te instantieren.
Beide gebruik ik vrij regelmatig.

Overigens, als je je echt verveeld en je tijd overhebt is het misschien leuk om naar Hibernate (OR-Mapping) en / of struts (MVC) te kijken voor je webapplicatie. Maar aangezien je aangeeft dat je nog niet zoveel ervaring hebt, zal ik daar nog even mee wachten. Er is een kans dat je er dan helemaal nix meer van snapt ;)

[ Voor 13% gewijzigd door Standeman op 03-02-2006 11:56 ]

The ships hung in the sky in much the same way that bricks don’t.


Verwijderd

Topicstarter
Helaas heb ik niet echt veel tijd over, einde van de periode en veel werk te verzetten, maar ik ben wel begonnen MVC basics door te nemen (aangezien ik daar een enkele klasgenoot over heb horen praten).

Overigens heb ik sowieso nog een lange weg te gaan, polymorphism en inhertiance beginnen me nu wel aardig duidelijk te worden, maar kheb onze java bijbel als handig naslagwerk :)

[ Voor 32% gewijzigd door Verwijderd op 03-02-2006 15:51 ]


Verwijderd

handleOtherQuery (void)

lijkt me niet echt handig, je kan beter een integer of boolean teruggeven

Verwijderd

Topicstarter
Goed,
Java:
1
2
3
4
5
6
7
8
9
10
11
 public boolean handleOtherQuery(String q) {
        boolean done = false;
        try {
            statement = connection.createStatement();
            statement.executeQuery(q);
            done = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return done;
    }


Kan me zo voorstellen dat er nog heel wat meer van dergelijke tekortkomingen inzitten ;)

Verwijderd

Topicstarter
Na wat gelees en gekloot :P ben ik tot het volgende ontwerp gekomen (misschien enigsinds brak uitgedrukt, maar ik denk dat jullie wel een idee krijgen).
code:
1
2
3
4
5
[view: JSP] ------------------------------------------------------------
     |                                                                       |    
     |                                                                       |    
[controller: Servlet]------------------------------------------[logic: Servlet]  ----[generieke classes, zoals
                                                                                                database afhandeling]


De view stuurt een request voor een action naar de controller, de controller gaat de logic servlet vertellen wat hij terug wil, de logic servlet geeft een ResultSet, Vector of wat dan ook terug aan de view jsp die voor de formattering op het scherm zorgt.

De servlets zijn dus compleet applicatie afhankelijk, de classes staan los van de applicatie zodat ze in andere applicaties ook gebruikt kunnen worden.

Wat vinden jullie van dit ontwerp, wat zou ik moeten verbeteren (tips, flames :P) voor ik mijn uitgeschreven ontwerp daadwerkelijk ga implementeren?

  • KurtDB
  • Registratie: Juni 2004
  • Laatst online: 09-02 20:28
1. In MVC is het de bedoeling dat je hit binnenkomt op de controller en die gaat het model en de view opzoeken om deze terug te geven aan de gebruiker. (zoek desnoods ook iets op over het front controller design pattern)
2. Er bestaan veel betere collections dan de vector. Ik denk dan maar aan 'n Map en 'n List. Die zijn sowieso performanter (vector is immers al vrij gedateerd en alle operaties erop zijn synchronized wat niet echt deftig is voor de performantie)
3. De resultset zou je sowieso enkel mogen gebruiken in je DAO. Zet de teruggekregen resultaten om naar 'n domain object/business object/value object (wat je ook nodig hebt), stop die desnoods in 'n collection en sluit de resultset dan af.
4. Zorg voor de nodige abstractie-lagen tussen je front-end (je controller en je view dus) en je back-end. Zo kan je zonder al te veel moeite implementaties gaan switchen. Hiervoor is het ook aangeraden om tegen 'n interface te programmeren.

Verwijderd

Topicstarter
Oke, dankje voor de tips/aanwijzingen ga ermee aan de slag :)
Pagina: 1