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

 

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

nHibernate resources

Îåêßíçóå áðü ôï ìÝëïò cap. Τελευταία δημοσίευση από το μέλος cap στις 08-02-2005, 11:00. Υπάρχουν 20 απαντήσεις.
Σελίδα 1 από 2 (21 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  01-02-2005, 11:05 1080

    nHibernate resources

    Σε προηγούμενο post μου ρωτούσα για το Lattice.Net (Ο/R persistence framework, free στο community edition). Στη συζήτηση που ακολούθησε αναφέρθηκε πολύ το nHibernate (port από το Hibernate για Java), οπότε να σας δώσω ορισμένα resources που έχω για το συγκεκριμένο (το οποίο από ο,τι φαίνεται είναι πολύ καλό):

    Καταρχήν μια άποψη: http://geekswithblogs.net/sbellware/archive/2004/12/19/18084.aspx

    Επειτα, ένα tutorial σε δύο μέρη:
    http://www.theserverside.net/articles/showarticle.tss?id=NHibernate
    http://www.theserverside.net/articles/showarticle.tss?id=NHibernateP2

    Τελος, ένα Web Site Framework ονόματι Cuyahoga που χρησιμοποιεί μεταξύ άλλων και το nHibernate και δίνει source:
    http://www.martijnboland.com/cuyahoga/1/view.aspx

    Αν έχετε και άλλα, καλοδεχούμενα.


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  01-02-2005, 12:59 1082 σε απάντηση της 1080

    Re: nHibernate resources

    Συμφωνώ και εγώ δείχνει να γίνεται πολύ καλή δουλειά :

    Unofficiall faq:
    http://www.tobinharris.com/nhibernatefaq.aspx
    http://www.tobinharris.com/nhibernateasp.aspx

    Demo για Winforms:
    http://www.codeproject.com/dotnet/nhibernatept1.asp

    Nhibernate Query Analyser
    http://dotnetjunkies.com/WebLog/davidb/archive/2005/01/05/41588.aspx

    Η βασική πηγή για τα patterns της χρήσης του είναι το site του hibernate
    όπως :
    http://www.hibernate.org/168.html

    Και για όσους θέλουν να το χρησιμοποιήσουν σε winforms πολύ χρήσιμο το TLS:
    http://www.joecheng.com/blog/entries/Thread-localstorageinJava.html


    Nikos Κ.
    ALT.NET
  •  02-02-2005, 10:35 1085 σε απάντηση της 1082

    Re: nHibernate resources

    Μήπως έχει κανείς κανένα tutorial για advanced HQL (Hibernate Query Language)? Τα tutorials του original hibernate και όσα έχω βρει για το nhibernate από άρθρα φαίνεται να ξύνουν απλά την επιφάνεια.
    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  02-02-2005, 17:48 1088 σε απάντηση της 1085

    Re: nHibernate resources

    Απ' ότι έχω δει, το μεγαλύτερο πρόβλημα που έχουν όσοι πρωτοασχολούνται με το κομμάτι του data-access στο .ΝΕΤ είναι το disconnected μοντέλο. Και μάλιστα, ένας μεγάλος βαθμός απροθυμίας στη χρήση του .ΝΕΤ οφείλεται στο γεγονός του ότι θα πρέπει να ξεχάσουν ότι αυτά τα data που χρησιμοποιούν είναι κλειδωμένα και να μάθουν να λύνουν ή να αφιερώσουν κώδικα κατά το development για τα conflicts.

    Ομολογώ ότι δεν είχα ξανασχοληθεί με O/R mappers και διαβάζοντας μερικά από τα παραπάνω άρθρα και tutorials το βρήκα πολύ ενδιαφέρον. Το θέμα των conflicts ήταν και το πρώτο πράγμα που σκέφτηκα όσο διάβαζα το υλικό. Το ερώτημά μου είναι πως συμπεριφέρεται το NHibernate όταν ενημερώνει τη db σε θέματα conflicts; Υποθέτω ότι σε κάποιο άρθρο περί αρχιτεκτονικής του θα το λέει... Απλά είπα μιας και έχετε ασχοληθεί να μου πείτε στα γρήγορα και ενδεχομένως να με παραπέμψετε σε τεχνικές πληροφρορίες...


    Vir prudens non contra ventum mingit
  •  03-02-2005, 13:59 1097 σε απάντηση της 1088

    Re: nHibernate resources

    Δηλαδή δεν παίζουν όλοι disconnected?[8-|]

    Έχω μια μικρή αμφιβολία γενικώς με την ιδέα του O/R. Αν κατάλαβα καλά, το Hibernate κάνει map το object model μου στη βάση (έχω πήξει στο διάβασμα για το MCSD.NET και δεν προλαβαίνω ούτε εγώ να ψάξω όσο θέλω Sad).  Αυτό είναι καλό αν το object model είναι σχετικά σταθερό και δεν με πειράζει να ξανακάνω compile και deploy όταν κάνω αλλαγές. Αν όμως θέλω οι αλλαγές να παίξουν άμεσα τί κάνω?

    Έχω υπόψη μου μια εφαρμογή workflow. Το O/R παίζει άνετα για τα αντικείμενα του workflow engine, ακόμα και για τον ορισμό των διαδικασιών και των βημάτων τους. Εκεί που δεν παίζει (τουλάχιστον με αυτή τη μορφή) είναι στον ορισμό των business objects. Εκεί θα ήθελα όταν αλλάζω τον ορισμό π.χ. αλλάζοντας τα πεδία ή τις σχέσεις μεταξύ κάποιον business objects, οι αλλαγές να εφαρμόζονται άμεσα, χωρίς να πρέπει να ξανακάνω compile το object model. Και δεν μπορείτε να φανταστείτε τη γλύκα να αλλάζεις το business object την ώρα που μιλάς με τον πελάτη και να βλέπει την αλλαγή αμέσως! 

      Είναι κάπως σαν τη διαφορά μεταξύ typed και untyped dataset. Με το untyped dataset μπορώ να διαβάσω δεδομένα με οποιαδήποτε μορφή, φτάνει να ξέρω το όνομα των πεδίων. Με το typed dataset πρέπει να ξανακάνω compile την εφαρμογή για να καταλάβει τις αλλαγές.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  03-02-2005, 14:10 1098 σε απάντηση της 1097

    Re: nHibernate resources

    Σιγουρα το nHibernate έχει σαν σημείο εκκίνησης το domain model σου και όχι το database layer. Υπάρχουν άλλα εργαλεία (βλ. MyGeneration, LLBLGen κλπ) που ξεκινούν από την database σου και σου φτιάχνουν τα objects.

    Αυτό για το οποίο δεν είμαι σίγουρος, είναι οτι το nHibernate έχει κάτι σαν metadata API το οποίο σου επιτρέπει να ορίζεις δυναμικα το mapping. Θα ηταν ενδιαφέρον να δουμε αν όντως συμβαίνει κάτι τέτοιο.

    Τωρα, σε καταστάσεις όπως αυτή του workflow που περιγράφεις, όντως, είναι περιορισμός να έχεις typed πραγματα. Εκεί όμως θα μπορούσες να χρησιμοποιήσεις ένα συνδυασμό nHibernate (ή άλλου mapper) και κλασικών untyped datasets. Ειδικά το nHibernate σου δίνει το Session.Connection μέσα από το οποίο μπορείς να αντλήσεις το ανοιχτό ήδη connection σου στη βάση και να κανεις ο,τι θέλεις (π.χ. να παίξεις με MS DAAB για κάτι quick ή dirty ή και τα δύο).

    Γενικά (και διαβάζοντας αρκετούς τυπους που bloggάρουν για αυτά τα θέματα) καταλαβαίνω οτι δεν είναι πανάκεια ούτε σωτηρία τα O/R mappers. Η αύξηση της παραγωγικότητάς σου εξαρτάται 1) από το τι φτιάχνεις 2) από το τι προσέγγιση χρησιμοποιείς για να το φτιάξεις. Π.χ. αν θέλεις μια φορμίτσα που να δείχνει grids και να κανει quick&dirty editing, παίξε απευθείας με datasets. Αν θέλεις όμως complex domain logic, ενσωματωμένη στα "έξυπνα" αντικείμενά σου (οχι plain data carrier objects και "managers" αυτών), τότε αρχίζεις να κοιτάς προς κάποιον o/r mapper μια και ούτως η άλλως θα κάνεις και από μόνος σου κάτι παρόμοιο.

    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  03-02-2005, 15:16 1099 σε απάντηση της 1098

    Re: nHibernate resources

    "... θα κάνεις και από μόνος σου κάτι παρόμοιο."

    Πως το κατάλαβες? Με αυτό τον τρόπο είχαμε καταφέρει πάντως να φτιάχνουμε εφαρμογές σε ελάχιστο χρόνο. Βλέπεις ΚΑΙ το business logic (ως actions των business objects) ήταν αποθηκευμένο στη βάση σε μορφή VBScript. Τα πεδία των business objects διαβάζονταν σαν object1.Property("XYZ"). Τα περιεχόμενα των business objects προέρχονταν από disconnected shaped recordsets. Τα relations ήταν SQL statements.

      Το αποτέλεσμα ήταν ότι η ανάπτυξη της πλατφόρμας πήρε αρκετό χρόνο, αλλά όχι τόσο όσο ακούγεται (περιείχε και πολλά άλλα καλούδια βεβαίως-βεβαίως). Η παραμετροποίηση μιας συγκεκριμμένης εφαρμογής χρειαζόταν ... όσο χρόνο έπαιρνε στον παρμετροποιητή να γράψει τα απλά SQL! Και παρά το ότι φοβόμασταν ότι η ταχύτητα θα επηρρεαστεί αρνητικά, το σύστημα πέτυχε τρελές επιδόσεις στα stress test (χιλιάδες ταυτόχρονοι χρήστες), πόσο μάλλον στην κανονική λειτουργία (150 χρήστες). Και χωρίς queues! Cool Ο σημαντικότερος λόγος γι αυτό ήταν ότι το data manipulation γινόταν στον SQL Server με stored procedures αντί για τη μνήμη με objects. Αλλά και τα stored procedures κατασκευάζονταν αυτόματα από τα metadata (άθλια λέξη).

    Πιστεύω ότι κάπου εκεί πρέπει να κρύβεται και το μυστικό για τη σωστή χρήση του nHibernate. Για να πετύχει κανείς καλό concurrency θα πρέπει να σηκώνει όσο το δυνατόν λιγότερα αντικείμενα στη μνήμη και να μεταφέρει όσο από τον κώδικα πειράζει data σε stored procedures ή έστω parameterized queries.

    Τώρα με το .NET βλέπω τα datasets, βλέπω το CodeDom και μου τρέχουν τα σάλια! Δεν αντέχω, κάποια στιγμή θα την ξαναφτιάξω την ιστορία με .NET! (Και τα ίδια ακούω και από τους υπόλοιπους του παλιού team!)
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  03-02-2005, 15:19 1100 σε απάντηση της 1098

    Re: nHibernate resources

    AAAAAAA! Δεν αντέχω άλλο! Με πώρωσες και αντί να διαβάζω κάθομαι και σκέφτομαι αρχιτεκτονικές!

    Αυτά πρέπει να τα συζητάει κανείς face-to-face! Δεν μπορώ κάθε φορά να γράφω μια παράγραφο ενώ ήθελα να γράψω 100! Θα πρέπει να ξεκινήσουμε τις συναντήσεις του user group σύντομα!
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  03-02-2005, 15:27 1101 σε απάντηση της 1100

    Re: nHibernate resources

    Αντε, αντε, για να σε κάνω να εγκαταλείψεις το διάβασμα Smile να σου πω οτι έφτιαξα ένα mini project για να δοκιμάσω τις δυνατότητες της HQL....

    Μου άρεσε το φραστικο ισοδύναμο του "Φέρε μου πίσω όλα τα instances των sectors οι οποίοι έχουν users των οποίων το όνομα αρχίζει από "s" εκτός αν οι sectors έχουν λιγότερους από 3 users"....Smile Και πιστεψέ με όταν έχεις σχέσεις one-to-many-to-many-to-many αρχίζει και γίνεται παλούκι η SQL..ενώ με HQL και lazy κανεις τη δουλειά σου μια χαρα καλα...το κερασακι στην τούρτα; IList και bind σε datagrid απευθείας Smile

    Σταματαω εδω γιατι θα φαω ξύλο. Smile


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  03-02-2005, 19:31 1102 σε απάντηση της 1100

    Re: nHibernate resources

     pkanavos wrote:

    AAAAAAA! Δεν αντέχω άλλο! Με πώρωσες και αντί να διαβάζω κάθομαι και σκέφτομαι αρχιτεκτονικές!
    Αυτά πρέπει να τα συζητάει κανείς face-to-face! Δεν μπορώ κάθε φορά να γράφω μια παράγραφο ενώ ήθελα να γράψω 100! Θα πρέπει να ξεκινήσουμε τις συναντήσεις του user group σύντομα!


    Είσαι σε μια κρίσημη περίοδο. Big Smile Διαβαζοντας αρχιτεκτονική σου καρφόνονται τρελές ιδέες στο μυαλό... Διάβαζε το JOURNAL από το MSDN, βάλε και λίγο Martin Fowler, αρχίζεις να έχεις κρίσεις! Big Smile Μετά έχεις παραληρήματα (βλ περιγραφή του τέλειου O/R). Στο τέλος σκέφτεσαι ότι τι να το κάνεις να αυτοματοποιήσεις το bussiness layer αν δεν μπορείς να έχεις το ίδιο και στο interface, και σε ρωτώ, γιατί έχει διαφορά αν είναι Web Forms ή Windows Forms ε; Δεν μπορεί να είναι το αποτέλεσμα ανεξάρτητο του μέσου;

    Eχμ ναι, με κοιτάνε λίγο περίεργα εδώ... Λες να φταίει που φωνάζω αυτά που γράφω;

    George J.

    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  03-02-2005, 20:49 1103 σε απάντηση της 1102

    Re: nHibernate resources

    Εεεε... Γκουχ γκουχ... Κάποιος αν μπορούσε να μου απαντήσει στην ερώτησή μου... Cap? Kyriakoy?


    Vir prudens non contra ventum mingit
  •  03-02-2005, 21:46 1104 σε απάντηση της 1103

    Re: nHibernate resources

    Δυστυχώς δεν έχω παίξει ακόμα με concurrency θέματα στο nHibernate. Μην βιάζεσαι όμως, ένας συνάδελφός μου έκανε ένα πολύ ωραίο παιχνιδάκι με το nUnit και έφτιαξε ένα stress testing frameworkάκι...θα το κολλήσουμε στο nHibernate και θα του αλλάξουμε τα πετρέλαια στο concurrency...αρκεί βέβαια ο άνθρωπος να βρει χρόνο....

    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  04-02-2005, 10:04 1106 σε απάντηση της 1104

    Re: nHibernate resources

    Ωραία, αναμένουμε λοιπόν...
    Ωστόσο, εγώ αναφέρθηκα περισσότερο στην τεχνική που γίνεται το update. Λειτουργεί με κάποιο μηχανισμό versioning (timestamp, guids, κλπ); Υλοποιεί κανένα last-in-wins σενάριο; Επιτρέπει ή αναθέτει στον χρήστη την χειροκίνητη επιλογή του version που θα γίνει update; Τέτοια πραγματάκια ρωτάω...


    Vir prudens non contra ventum mingit
  •  04-02-2005, 13:42 1107 σε απάντηση της 1106

    Re: nHibernate resources

     KelMan wrote:

    Ωραία, αναμένουμε λοιπόν...
    Ωστόσο, εγώ αναφέρθηκα περισσότερο στην τεχνική που γίνεται το update. Λειτουργεί με κάποιο μηχανισμό versioning (timestamp, guids, κλπ); Υλοποιεί κανένα last-in-wins σενάριο; Επιτρέπει ή αναθέτει στον χρήστη την χειροκίνητη επιλογή του version που θα γίνει update; Τέτοια πραγματάκια ρωτάω...



    Είμαι και εγώ στην φάση evaluate του NHibernate. Αυτό που έχω δει μέχρι τώρα:

    - Έχει transactions API.

    - Flushing: υποστηρίζει transparent write behind, οι αλλαγές στο domain model δεν περνάνε αμέσως στην database, κάποια στιγμή προχωράει σε synchronize της μνήμης με την database (αυτό το ψάχνω ακόμη).

    - Σε επίπεδο database isolation χρησιμοποιεί ότι η κάθε database κάθε φορά.

    - Μπορείς να χρησιμοποιήσεις versioned data, το κάνει αυτόματα και optimistic locking, καθώς και pessimistic locks με την χρήση του lockmode

     

    Περισσότερα μπορείς να δεις στο

    http://nhibernate.sourceforge.net/h2.0.3-docs/reference/html/transactions.html

     

    Αυτό πάντως που έχω δει μέχρι τώρα σαν πρόβλημα στην χρήση του στο .NET είναι η σωστή επιλογή (best practice) session pattern για χρήση σε winforms.


    Nikos Κ.
    ALT.NET
  •  04-02-2005, 14:08 1108 σε απάντηση της 1107

    Re: nHibernate resources

    Προσωπικά γελάω... Big Smile Πιστεύω ότι ο Μάνος σας την έχει στημένη!

    Αυτό που αναφέρεις μιλάει για το αρχικό project και αυτό είναι σε Java. Δεν μπορεί να χρησιμοποιεί τα ιδιαίτερα χαρακτηριστικά του .NET και ούτε να λεει τι χρησιμοποιεί σε σχέση με αυτά που λέμε εμείς...

    Big Smile

    Γιώργος %)


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
Σελίδα 1 από 2 (21 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems