Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Persistent Objects

Îåêßíçóå áðü ôï ìÝëïò epp1123. Τελευταία δημοσίευση από το μέλος Πέτρος Αμοιρίδης στις 07-07-2008, 01:08. Υπάρχουν 9 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  04-07-2008, 09:46 43236

    Persistent Objects

    Καλημέρα. Πρόσφατα ήρθα αντιμέτωπος με την έννοια των persistent objects. Δεν ήταν η πρώτη φορά, αλλά και την προηγούμενη που τα είχα συναντήσει, ήταν συνάντηση ξώφαλτση. Το  τι είναι πάνω κάτω τα persistent objects το γνωρίζω (ή τουλάχιστον έτσι θέλω να πιστεύω). Ωστόσο έχουν γεννηθεί τα εξής ερωτήσματα:

    1. Πότε και που στην πράξη, χρησιμοποιώ persistent objects, είτε η εφαρμογή είναι desktop, είτε web;
    2. Για ποιο λόγο να προτιμήσω persistent objects  για να την "επικοινωνία μου" (και όχι μόνο) με τη ΒΔ, από το να χρησιμοποιήσω stored procedures, ή t-sql;

    Ευχαριστώ
  •  04-07-2008, 12:02 43237 σε απάντηση της 43236

    Απ: Persistent Objects

    Λέγοντας "persistent objects" εννοούμε κάθε αντικείμενο τα περιεχόμενα του οποίου δεν χάνονται με το τέλος της εφαρμογής, αλλά μπορούν να αποθηκευτούν και να επανακτηθούν οταν ζητηθούν.

    Τα αντικείμενα αυτά υποστηρίζουν λοιπόν τρόπους να αποθηκεύονται και να ανακτώνται σε κάποιο αποθηκευτικό μέσο, είτε αυτός είναι βάση δεδομένων, είτε αρχείο, είτε ότι αλλο κρίνει ο προγραμματιστής.

    Τα stored procedures και η SQL που αναφέρεις δεν έχουν (άμεσα) να κάνουν με τα αντικείμενα αυτά, αλλά μπορούν να χρησιμοποιηθούν για την αποθηκεύση και την ανάκτηση τους απο την βάση δεδομένων.

    Δημοσθένης Στελλάκης

     

  •  04-07-2008, 12:06 43238 σε απάντηση της 43236

    Re: Persistent Objects

    Μμμ, λίγο ασαφής ερώτηση μια και ο όρος "Persistent Objects" έχει πολλές πρακτικές ερμηνίες, ιδιαίτερα αν ρωτήσεις developers που ασχολούνται με διαφορετικές γλώσσες.  Θα υποθέσω ότι αναφέρεσαι στην γενικότερη πρακτική να αγνοείς την βάση δεδομένων, να κρατάς τα αντικείμενα στην μνήμη (γιατί όπως λένε "ram is getting cheaper") και να τα κάνεις persist σε flat files/xml/simple databases σε τακτά χρονικά διαστήματα.

    Παρόλο που έχει κάποια πλεονεκτήματα σε performance, εγώ δεν το χρησιμοποιούσα ποτέ, ιδιαίτερα σε κάποια mission critical εφαρμογή γιατί πάσχω από οξεία παράνοια/φοβία απώλειας δεδομένων :), επίσης δε έχω συναισθηματικούς δεσμούς με τον SQL Server. Επιπρόσθετα, αν δεν είσαι 100% σίγουρος για το uptime του συστήματος που κάνει host τα bussiness objects (multi-failover architectures, robust clusters, κλπ) θα ήταν καλό να επενδύσεις σε καλά αθλητικά παπούτσια γιατί θα πέσει πολύ κυνήγι από πελάτες μια μαύρη μέρα. Μπορείς να ρίξεις μια ματιά εδώ για το φιλοσοφικό του πράγματος (είναι για Java το συγκεκριμένο, αλλά τα σχόλια είναι γενικά εύστοχα και platform independent)

    Τώρα για λιγότερο extreme πρακτικές, π.χ. χρήση διαφόρων ORM mappers, κλπ, η απάντηση πάλι δεν είναι εύκολη. Προφανώς και κάποια καλά εργαλεία μπορεί να αυξήσουν σημαντικά την παραγωγικότητα και τον κατεκερματισμό της εργασίας σε ένα μεγάλο project (αν και εδώ που τα λέμε στο ελλάντα σπάνια βλέπει κανείς μεγάλα project teams) αλλά πρέπει να έχε προηγηθεί πολύ καλή ανάλυση και design (δεν ξέρω για σας, εγώ δεν την παλεύω ιδιαίτερα με ασκήσεις επί χάρτου :) ) για να μην έχεις θέμα με πιθανό schema evolution, requirements changes, κλπ. Εν γέννει, μια και η δημοσίευση είναι στα "πρώτα βήματα" θα πρότεινα να βεβαιωθείς ότι είσαι απόλυτα εξοικιωμένος με τις "παραδοσιακές" τεχνικές ανάπτυξης και ότι μπορείς να κάνεις μια καλή εκτίμηση του χρόνου και της ποιότητας με την οποία θα ανταπεξέλθεις σε ένα project και μετά να ασχοληθείς με την πολυτέλεια του να βελτιώσεις την απόδοση του τελικού αποτελέσματος, να κάνεις refactor, κλπ.

    Εκτός βέβαια αν είσαι από τους λίγους εκλεκτούς και τυχερούς που πληρόνονται αδρά για μια θέση R&D :)

     


    The people of the straight land have really got it made, a warm friendly sleep from the craddle to the grave
  •  04-07-2008, 13:36 43244 σε απάντηση της 43238

    Απ: Re: Persistent Objects

    Χαχα, OldGeorge πολύ ωραίο το πετυχημένο με το R & D. Από πρακτικάριος φοιτητής που ασχολείται δύο μήνες με την ASP.Net "αναβαθμίστηκα" σε R&D. Μακαρι αλλά έχω ψωμί μπροστά μου.

    Λοιπόν εν ολίγοις εδώ στην εταιρεία που κάνω την πρακτικη μου, το αφεντικό μου έχει αγοράσει τα προϊόντα της Dev Express, όπου ένα προϊόν είναι και το XPO (eXpress Persistent Object), και θέλαμε να τα χρησιμοποίησουμε για βάσεις δεδομένων.

    Το θέμα, ωστόσο,  είναι αυτό που ακριβώς ανέφερες. Εδώ καλά καλά δεν έχω εξοικοιωθεί με την ASP.Net και έπρεπε να μπλέξω και με τα PO. Απλά μέχρι στιγμής που τα δούλεψα, δεν μπορώ ότι προσέφεραν κάτι παραπάνω από να φτιάχναμε τις βάσεις με τις κλασσικές μεθόδους, άσε που μου φάνηκαν και "δυσκίνητα".


    Ευχαριστώ για τις απαντήσεις.
  •  04-07-2008, 14:26 43247 σε απάντηση της 43244

    Απ: Re: Persistent Objects

    Μάλλον δεν έχεις ξεκαθαρίσει ακόμα τί σημαίνει persistent object - ίσως και επειδή δεν χρησιμοποιείται πολύ ο όρος. Άλλο αυτό και άλλο το object persistence. Καταρχήν, δεν είναι άλλος ένας τρόπος επικοινωνίας με τη βάση. Object persistence είναι η ανάγκη τα βασικά στοιχεία μίας εφαρμογής, τα αντικείμενα, να αποθηκευτούν και να ανακτηθούν από κάποιο σημείο αποθήκευσης, το οποίο συνήθως είναι η βάση. Τα βασικά στοιχεία ΔΕΝ είναι οι πίνακες της βάσης αλλά τα αντικείμενα. Προϊόντα όπως το XPO, το NHibernate, το LINQ to SQL και το Entity Framework διευκολύνουν αυτό ακριβώς, την αποθήκευση και ανάκτηση των αντικειμένων από μία βάση.

    Το XPO έχει το επιπλέον χαρακτηριστικό ότι του δίνεις το domain model της εφαρμογής σου και σου φτιάχνει μόνο του τους κατάλληλους πίνακες. Έτσι γλυτώνεις ένα σημαντικό κομμάτι του προγραμματισμού, να φτιάξεις πίνακες που να ταιριάζουν στις κλάσεις σου. Οι κανόνες για να γίνει αυτό είναι συγκεκριμένοι και όντως κλασσικοί - πως για παράδειγμα αποθηκεύεις σχέσεις inheritance σε ένα ή περισσότερους πίνακες. Αμφιβάλλω όμως αν αναφέρεσαι σε αυτούς.

    Υποψιάζομαι ότι λέγοντας "κλασσικές" μεθόδους εννοείς ότι δημιουργείς ένα πίνακα και μετά μία data entry φόρμα για να πειράξεις τα δεδομένα του πίνακα, πιθανώς βάζοντας όλη τη λογική πίσω από τις φόρμες. Δυστυχώς, αυτός ο τρόπος ταιριάζει μόνο σε εφαρμογές χωρίς ιδιαίτερη λογική και χωρίς συχνές αλλαγές. Διαφορετικά, μία αλλαγή σε ένα μόνο πεδίο μπορεί να σε αναγκάσει να αλλάξεις ολόκληρη την εφαρμογή σου. Αν ξαφνικά π.χ. σου πει κάποιος ότι το πεδίο Name θα πρέπει να είναι μόνο uppercase θα πρέπει να αλλάξεις ΟΛΕΣ τις φόρμες που μπορεί να χρησιμοποιούν το πεδίο. Αουτς.

    Καλό θα είναι να εξοικειωθείς πρώτα με τον object oriented προγραμματισμό και να καταλάβεις τί είναι και γιατί χρειαζόμαστε τα αντικείμενα. Τα αντικείμενα περιέχουν δεδομένα ΚΑΙ λογική. Δεν είναι απλά structures τα οποία γεμίζουν από μία βάση. Μία εφαρμογή σχεδιασμένη με αντικείμενα είναι ευκολότερη στην ανάπτυξη και πιο ανθεκτική στις αλλαγές από μία εφαρμογή σχεδιασμένη με τη λογική του data entry. Τότε θα καταλάβεις γιατί οι "κλασσικές" μέθοδοι θεωρούνται ακατάλληλες εδώ και χρόνια και γιατί είναι καλύτερο να σχεδιάσεις πρώτα την εφαρμογή σου και μετά τη βάση της.

    Επίσης, καλό είναι να έχεις υπόψη ότι από την πλευρά της Java τα ORM και το object persistence θεωρούνται δεδομένα. Από την πλευρά του .NET υπήρξε σημαντική καθυστέρηση, αλλά με το LINQ to SQL, το Entity Framework και το NHibernate τα ORM και το object persistence πρέπει να τα θεωρείς επίσης δεδομένα. Μόνο R&D δεν είναι αυτά τα θέματα, άσχετο αν πολλοί τώρα τα ανακαλύπτουν, μαζί με το Object Oriented Programming και το Multi-Threading. Άσε που το LINQ to SQL είναι ευκολότερο στη χρήση από τα datasets ...


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  04-07-2008, 15:58 43253 σε απάντηση της 43247

    Απ: Re: Persistent Objects

    Καταρχάς για να καταλάβω, λες πως το persistent object είναι διαφορετικό από το object peristence; Δε λέω ότι έχεις άδικο, αν είναι διαφορετικά, τότε σε τι διαφέρουν;

    Το τι είναι αντικείμενα και πως δουλεύουν, δόξα το Θεό το είδαμε στην Java (μάθημα στο ΤΕΙ), και με το παραπάνω. Επίσης γνωρίζω πως τα αντικείμενα είναι οι πίνακες στη βάση, αυτό ήταν από τα πρώτα που κατάλαβα. Άλλωστε έφτιαξα και κλάσεις με τα property τους, όπου κάθε property είναι και το πεδίο.

    Όσον αφορά την έννοια του επιμόνου γενικότερα, εκεί είναι που δεν είχα ασχοληθεί ποτέ. Ψάχνωντας το ίντερνετ βρήκα αρκετές πληροφορίες για το πως χρησιμοποιείται, για να αποθηκεύσεις ρυθμίσεις και να είναι οι ίδιες όταν ξανανοίγεις την εφαρμογή, για να κρατάς τα undo όταν τρέχεις μία εφαρμογή τύπου word πχ. Κάτι παρόμοια απαντήσαν οι συνάδελφοι πριν. Η αλήθεια είναι πως και την προηγούμενη φορά που άκουσα την φράση "persistent objects" είχε να κάνει με Java και με Web Services.

    Στο ORM εκεί είναι που κόλλησα, για τον λόγο ότι δεν μπορούσα, αλλά και ακόμα δεν μπορώ να καταλάβω γιατί να προτιμήσεις το ORM, το οποίο έχει και προβλήματα, όπως διάβασα στην wikipedia (http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch) και να μην χρησιμοποιήσεις stored procedures πχ (και γενικότερα να φτιάξεις τη βάση με το χεράκι σου), όταν φτιάχνεις ένα σάιτ με asp.net. Σαφέστατα για να υπάρχει το Persistent object (ή το object persistence) για κάποιο λόγο θα υπάρχει.

    Αλλά τώρα αν θες να φτιάξεις  (στην περίπτωση μας) ένα σάιτ με μία κονσόλα διαχείρισης από πίσω και ένα register / login για τους χρήστες, συν φόρμες παρουσίασης δεδομένων (φωτό και κείμενο) και αναζήτησης τότε τι το θες το Persistent Object (ή το object persistence) και το ORM ; Γιατί να μην χρησιμοποιήσεις όλα αυτά που σου προσφέρει η asp.net και με το παραπάνω;

    Οι πίνακες στη βάση θα είναι γύρω στους 6, όπου οι δύο θα έχουν μέσα Πόλεις και ΔΟΥ.

    Βέβαια, το XPO μου ζήτησε να το χρησιμοποιήσω μόνο και μόνο για το optimistic concurency, το οποίο ουσιαστικά απαγορεύει από άλλους χρήστες να ανανεώνουν τα αντικείμενα, όταν τα ανανεώνεις εσύ (κάτι μου θυμίζει, κάτι μου θυμίζει), αλλά η λογική του εγκαταλείπεται και έρχονται τα stored  procedures στο προσκήνιο.

    Εν τέλει αυτό που ρωτάω, είναι το εξής: Γιατί χρησιμοποιούμε ORM; Πότε το χρησιμοποιούμε, και τι παραπάνω μας προσφέρει (ταχύτητα, ασφάλεια, integrity);

    Ευχαριστώ πολύ Yes
  •  04-07-2008, 16:33 43255 σε απάντηση της 43247

    Re: Απ: Re: Persistent Objects

    Παναγιώτης Καναβός:

    Μόνο R&D δεν είναι αυτά τα θέματα, άσχετο αν πολλοί τώρα τα ανακαλύπτουν, μαζί με το Object Oriented Programming και το Multi-Threading. Άσε που το LINQ to SQL είναι ευκολότερο στη χρήση από τα datasets ...

    Δεν ξέρω αν έχω αστοχία αντίληψης στο συγκεκριμένο, αλλά από αυτά που βλέπω στην αγορά όσον αφορά της εταιρείες που γράφουν εφαρμογές η πλειοψηφία μάλλον σε φάση διερεύνησης  των συγκεκριμένων θεμάτων είναι.  Μακάρι να κάνω λάθος, αυτό μπορεί να σημαίνει ότι είμαστε πιο μπροστά σαν σύνολο απ'ότι νομίζω :)


    The people of the straight land have really got it made, a warm friendly sleep from the craddle to the grave
  •  04-07-2008, 18:03 43257 σε απάντηση της 43253

    Απ: Re: Persistent Objects

    Μία πολύ γρήγορη απάντηση, γιατί δεν προλαβαίνω τώρα. Το impedance mismatch αφορά τη δυσκολία επικοινωνίας object-oriented εφαρμογών και βάσεων. Τα ORMs αντιμετωπίζουν αυτό το πρόβλημα, δεν το δημιουργούν. Αντίθετα, η χρήση stored procedures/dynamic sql για να φορτώσεις δεδομένα και μετά να δημιουργήσεις τα αντικείμενα είναι το πρόβλημα. Κάπως θα πρέπει τα δεδομένα που σου έρχονται σε μορφή πίνακα να τα κάνεις αντικείμενα και μάλιστα ολόκληρη ιεραρχία αντικειμένων. Για παράδειγμα, πως θα φορτώσεις από μία βάση τα υλικά που χρειάζονται για να φτιάξεις .... ένα αυτοκίνητο, όταν το καθένα από αυτά μπορεί να περιέχει επιμέρους υλικά κλπ, σε μεγάλο βάθος?

    Θα επανέλθω όμως αργότερα


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  04-07-2008, 18:27 43258 σε απάντηση της 43255

    Απ: Re: Απ: Re: Persistent Objects

    Επειδή βιάζομαι, θα το πω λίγο απότομα. Ούτε μπροστά ούτε πίσω βρίσκονται οι εταιρείες, σε φάση σοκ και άρνησης βρίσκονται. Σοκ ίδιο με αυτό που έπαθαν όταν από VB6 αναγκάστηκαν να μεταβούν σε .ΝΕΤ. Κάποιες εταιρείες θα έχουν πολύ εύκολη μετάβαση, αν έχουν καν, καθώς χρησιμοποιούν ORMs και παρόμοιες τεχνικές εδώ και χρόνια. Άλλες θα το παλέψουν λέγοντας "μα τί κάνουν τα ORM που δεν κάνουν τα datasets" μέχρι να μείνουν τελευταίες απ' όλους και να μην μπορούν ούτε να ακολουθήσουν τους ανταγωνιστές τους, ούτε να βρουν καλούς προγραμματιστές πρόθυμους να δουλέψουν σε "αρχαίες" τεχνολογίες.

    Η ίδια κατάσταση που εμφανίστηκε με τη μετάβαση σε .NET θα εμφανιστεί και τώρα. Υπάρχουν ακόμα εταιρείες οι οποίες έχουν μείνει στη VB6 και δεν μπορούν να περάσουν πλέον σε .NET επειδή δεν μπορούν να βρουν πρόθυμους προγραμματιστές.

    Όταν βρω χρόνο, θα γράψω και γιατί από Java μεριά χρησιμοποιούν ORMs και JBoss για να φτιάξουν highly scalable συστήματα ενώ από MS μεριά ακόμα συζητάμε αν θα βγάλουμε τον κώδικα από τις φόρμες. Για την ώρα, το Is Microsoft Serious? του Ted Neward εξηγεί τους ιστορικούς λόγους από τη σκοπιά κάποιου ο οποίος έχει δουλέψει και έχει γράψει βιβλία και για τις δύο πλευρές (Effective Enterprise Java, C# in a Nutshell) , όπως π.χ. ότι παρότι η Microsoft είχε application servers από τον καιρό των Windows NT 4.0, έπρεπε να φτάσουμε στο .ΝΕΤ για να αποκτήσει και μία εύκολη γλώσσα.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  07-07-2008, 01:08 43290 σε απάντηση της 43236

    Απ: Persistent Objects

    Η απόφαση να χρησιμοποιήσεις κάποιο ORM προϊόν, έχει να κάνει κυρίως με το τι προτιμάει η ομάδα ανάπτυξης και με τι αισθάνεται περισσότερο άνετη. Από εκεί και πέρα, το τι είναι καλύτερο ή χειρότερο παίζει. Πριν συνεχίσω, να σας πω πως είμαι αρκετά προκατειλημμένος διότι από τότε που χρησιμοποίησα κάποιο OPF (συγκεκριμένα το XPO / www.devexpress.com/xpo) δε γύρισα ποτέ πίσω. Επίσης, όπου αναφέρω παρακάτω C# μπορείτε ελεύθερα να το αντικαταστήσετε με τη δική σας αγαπημένη γλώσσα... απλώς για ευκολία αναφέρω τη γλώσσα που χρησιμοποιώ εγώ.

    Θα προσπαθήσω να αναφέρω κάποιους από τους λόγους που με έκαναν αρχικά να αναζητήσω μια λύση σαν τα XPO.

    Παλιά, όταν ακόμα ανέπτυσσα εφαρμογές με Delphi + Oracle, όλη η ροή εργασίας μου σε επίπεδο υλοποίησης, ήταν πάνω κάτω η εξής:
    1. Σχεδίαση ενός feature ή αλλαγή κάποιου υφιστάμενου
    2. Ανάπτυξη των αντικειμένων που θα χρειαστούν στη βάση για να κρατάνε τα δεδομένα (πίνακες, sequences)
    3. Ανάπτυξη των αντικειμένων που θα χρειαστούν στη βάση για business logic (procedures, triggers, packages, views κλπ)
    4. Ανάπτυξη του κώδικα σε Delphi που να χρησιμοποιεί τα αντικείμενα αυτά
    5. Κλήση των αντικειμένων αυτών από το UI κλπ
    6. Αν θέλουμε να αλλάξουμε κάτι μετά GOTO 1
    Αυτό γίνονταν με ταχύτητα φωτός. Η εναλλαγή μεταξύ SQL, PL/SQL (η γλώσσα της Oracle), Delphi και ακόμα περισσότερο η εναλλαγή μέσα στην ίδια τη Delphi μεταξύ κώδικα για συντήρηση των "υδραυλικών" σε σχέση με την πραγματική λογική της εφαρμογής, άρχισε να με κουράζει. Όταν πέρασα λοιπόν στη C#, το πρώτο που αναρρωτήθηκα ήταν αν υπάρχει κάποιος τρόπος να γράφω τα πάντα σε C#. Να μη χρειάζεται να πηγαίνω σε επίπεδο database παρά μόνο ελάχιστα (ίσως για κάποιο migration σε κάθε upgrade της εφαρμογής κλπ). Εκεί λοιπόν ήρθε το OPF που επέλεξα για να μου λύσει τα χέρια.

    Τώρα, κάθε φορά που αναπτύσσω κάποια εφαρμογή, σκέφτομαι όσο το δυνατόν πιο OO μπορώ. Γράφω τα classes μου για τα διάφορα business entities, τα classes μου για business logic και τα εκμεταλλεύομαι απευθείας στο UI.

    Για παράδειγμα, αν θέλω να δημιουργήσω ένα νέο πελάτη:

    1
    2
    3
    4
    5
    6
    using (UnitOfWork uow = new UnitOfWork())
    {
    Customer myCustomer = new Customer(uow);
    myCustomer.Name = "Μήτσος";
    uow.CommitChanges();
    }

    Με ADO.NET πόσες γραμμές πρέπει να γράψω και στην τελική, τι σχέση έχουν αυτές οι γραμμές με αυτό που θέλω να κάνω πραγματικά; Εντάξει, θα μου πείτε, στην τελική και με τους παραδοσιακούς τρόπους, μπορούσες να φτιάξεις ένα δικό σου abstraction πάνω από το ADO.NET, ώστε να γράφεις λιγότερες γραμμές στο τέλος. Όμως, δε γλίτωνες όλη τη δουλειά μεταξύ των διαφόρων επιπέδων: βάση (πίνακες, stored procedures), .NET δήλωση των αντικειμένων αυτών, παραμετροποίηση, δημιουργία CRUD κώδικα κλπ. Αν και έχουν αυτοματοποιηθεί αρκετά αυτές οι δουλειές, δεν παύει κάποιος να τις έχει στο μυαλό του.

    Με το σωστό OPF όμως, δε χρειάζεται να ασχοληθείς καθόλου με αυτά.

    Ένα ακόμα πλεονέκτημα του να έχεις τα πάντα σε C# είναι ότι αποδεσμεύεσαι με τις ιδιαιτερότητες των διαφορετικών database γλωσσών. Ερωτήσεις τύπου, πως δηλώνεις έναν cursor στην Oracle ή πως είναι η το TO_DATΕ της Oracle στον MS SQL, δεν υπάρχουν πλέον. Η database είναι μια τέλεια μηχανή αποθήκευσης δεδομένων και διαχείρισης των sessions... αλλά μέχρι εκεί. Επιπλέον, μη έχοντας κώδικα στην βάση είμαστε ανεξάρτητοι από τη βάση που θέλουμε να επιλέξουμε. Όλα τα γνωστά OPF υποστηρίζουν πολλές βάσεις, τις οποίες μπορείς να αλλάξεις με μια γραμμή κώδικα, δίχως να χρειάζεται καμία αλλαγή στον object model που έχεις γράψει π.χ. σε C#.

    Αυτό που ανέφερα παραπάνω σχετικά με το ό,τι ένα OPF μπορεί να σε κρατήσει ανεξάρτητο από την βάση θέλει και λίγη προσοχή, γιατί πάλι μπορεί κάποιος να χρησιμοποιεί ένα OPF αλλά να γράφει παράλληλα και stored procedures με αποτέλεσμα τελικά να δένεται με τη συγκεκριμένη βάση.

    Ένα ακόμα πλεονέκτημα ενός OPF είναι πως τελικά η SQL που παράγει η engine του framework τις περισσότερες φορές είναι αρκετά πιο οptimized από ό,τι θα γράφαμε εμείς με το χέρι. Επίσης, ανάλογα τη βάση στην οποία συνδέεται, ενδέχεται να χρησιμοποιεί κάτω από το καπό μανίσιες τεχνικές για να βελτιώνει την απόδοση ακόμα περισσότερο.

    Ποιο πάνω ανέφερα "με το σωστό OPF". Γίνονται πολλές συζητήσεις και υπάρχει αρκετό advocacy σχετικά με το ποιο είναι το καλύτερο OPF κλπ. Εγώ δε θα υπερασπιστώ κάποιο, παρά μόνο θα αναφέρω μια γενικότητα που καλό είναι να ισχύει όταν θα επιλέξει κάποιος το OPF της αρεσκίας του. Φυσικά, υπάρχουν αρκετά περισσότερα κριτήρια, αλλά ήδη βλέπω η απάντησή μου γίνεται πολύ μεγάλη οπότε δε θα συνεχίσω. Θα πω μόνο πως ένα OPF δε θα πρέπει να σε βάζει στη διαδικασία να δηλώνεις τα πάντα σε εξουθενωτική λεπτομέρεια σε εξωτερικά configuration αρχεία, διότι τότε δεν απέχει και πολύ από την παραδοσιακή τεχνική που μας θέλει να ορίζουμε τα υδραυλικά και μετά να τα χρησιμοποιούμε. Θα πρέπει να είναι όσο το δυνατόν πιο φυσική η διαδικασία χρήσης του και όσο το δυνατόν πιο κοντά στη γλώσσα που χρησιμοποιούμε.

    Φυσικά, κάποια "υδραυλικά" δεν τα γλιτώνουμε όταν πάμε να "κάτσουμε" σε κάποιο legacy σχήμα που προϋπάρχει. Θα πρέπει να κάνουμε το mapping μεταξύ των πινάκων και των class με το χέρι (αν και υπάρχουν αυτόματα εργαλεία και για αυτό). Αλλά ειδικά για νέες εφαρμογές που δεν έχουν ήδη κάποιο database σχήμα, το OPF είναι "μάνα".

    Θα ανέφερα τώρα και κάποια αρνητικά, αλλά θα το αφήσω για κάποιον άλλον. :-)

    Πέτρος
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems