Promoting the evil seed…

Πρόσφατα μου δώθηκε μια δυνατότητα να φτιάξω ενα προγραμματάκι σε C# 3.5. Παρατήρησα μια τεράστια διαφορά μεταξύ C# 2.0 (ή 1.1) και C# 3.5 η οποία μου άρεσε, αλλά με έβαλε και σε σκέψεις. Φυσικά ολα αυτά θα πυροδοτήσουν αρκετά flame wars (αν με διαβάζουν αρκετοί σχετικοί με το θέμα), όμως με έχουν βάλει σε ενα τριπάκι υλοποιήσεων που μέχρι τώρα ήταν σχετικά δύσκολο.

Η C# είναι μια αντικειμενοστραφής γλώσσα αντίγραφο της Java. Αυτό το αναγνωρίζω, το αναγνώριζα απο την πρώτη στιγμή που έπιασα κώδικα στα χέρια μου, απλώς παρέχει μερικές συντάξεις εντολών απο την C++ (structures) και αρκετές συνώνυμιες για το «διαφορετικό». Η διαφορά με την Java που θα μας απασχολήσει περισσότερο σε αυτό το post είναι οτι στηρίζεται απο την Microsoft οπότε και έχει πρόσβαση στις τεχνολογίες της Μicrosoft και ειδικότερα στο κομμάτι του Desktop (αφήνω τα aspx γιατί δεν έχω IIS λόγω χρήσης νομίμων Basic windows XP και Basic Vista πακέτων). Στην πραγματικότητα μπορείς να γράψεις και με java syntax χρησιμοποιώντας την J# αλλά αυτή είναι αλλού παππά ευαγγέλιο και δεν με αφορά κάν.

Μέχρι και την έκδοση 3.5 η υλοποίηση ενός gui ήταν πάνω κάτω η ίδια, είτε μιλάγαμε για Swing(java) είτε για GDI+(C#/VB.Net/C++.Net/CLR Managed γλώσσες). Πάνω κάτω η συνταγή ήταν να δημιουργήσουμε connections με κάποιο connector στην βάση δεδομένων (Sql Server, MySQL, SQLite, PGSql, XML) με τους κατάλληλους readers και sql syntax να επιλέξουμε πράγματα απο τους πίνακες μέσα στην βάση δεδομένων, και αναλόγως στην μέν Java να δημιουργήσουμε data models και entity beans που θα κάνουν data bind στα διάφορα swing objects ή στην μέν CLR να δημιουργήσουμε databindings για να δεχτούν τα δεδομένα (η στην χειρότερη περίπτωση να διαβαστούν μέσω entity classes ξανά σε κάποιο arraylist και αυτό να συσχετισθεί με ένα control). Καλό όλο αυτό όμως είναι αρκετά επίπονη διαδικασία και συνάμα επαναλαμβανόμενη μέχρι αηδίας.

Η κυρίως ενασχόληση μου είναι με γλώσσες web oriented (server side). Εκεί η διαδικασία είναι πιο εύκολη (sans την Java). Εχεις μια γλώσσα, π.χ. PHP. Φτιάχνεις το query σου, έχεις ενα γενικό connection pool και απο εκεί παιρνεις το database object και κάνεις τα Query σου. Απλουστευμένα πράγματα. Δεν θέλω συζητήσεις για ασφάλεια, εξάλλου desktop εφαρμογή φτιάχνεις. Ο πιό «συνηθισμένος» τρόπος είναι να πάρεις ενα έτοιμο bundle (π.χ. easyphp, xampp, wamp) και να φτιάξεις μια ψευδοintranet εφαρμογή με php. Εκεί που χάνεις είναι στο διπλό κώδικα για το γραφικό/εικαστικό μέρος και στην υλοποίηση του όλου Business Logic.

Οπότε έρχεται η LINQ. Η Linq είναι μια γλώσσα querying όπως η Sql (που μοιάζει πολύ με αυτή) και κάνει το εξής. Οπουδήποτε έχει data μπορεί να τα επεξεργαστεί το ίδιο εξίσου γρήγορα και το ίδιο εξίσου απρόσωπα. Εχεις xml definition? Το επεξεργάζεται. Έχεις ενα πίνακα integers? Το επεξεργάζεται. Έχεις ένα πίνακα με objects? Το επεξεργάζεται. Εχεις δεδομένα απο database. Ναι, τα επεξεργάζεται.

Οι αρχικές beta δεν ήταν τόσο καλές, όμως το τελικό προιόν άξιζε τον κόπο. Κάνοντας μικρά queries μπορείς να έχεις την database σου και τα δεδομένα σε πολύ γρήγορη απόκριση (αναλόγως αν έχεις κάνει και τα ευαγγέλια των δεδομένων, μορφοποίηση και σωστή καταχώρηση). Ετσι λοιπόν, χρησιμοποιώντας μια σύνδεση (στο Visual Studio Express 2008 μπορεί να επεξεργαστέι μόνο απο access/mssql/mssql compact edition) αλα connection pool, μπορείς να χρησιμοποιήσεις την Linq. Είτε με Live δεδομένα (live connection) απο Datareaders κτλ, είτε απο disconnected μέσω snapshoted datasets.

Πολύ χρήσιμο για desktop εφαρμογούλες που δεν θέλουν πολλά και χρειάζεσαι αρκετό rapid development.

Για παραδείγματα, ψάξτε στο google για Linq και Desktop app.

9 thoughts on “Promoting the evil seed…

  1. H nhibernate είναι σε διάφορα alpha/beta stages για .net, την δοκίμασα για desktop. Όμως σε windows που με ενδιέφερε, η εναλλακτική αντιγραφή της java, Sql Server Compact Edition 3.5 και LINQ έπαιξε. Στην ουσία κάνει μια «Αυθαιρεσία» και το κάνει weakly typed μέσω var μεταβλητής το όλο θέμα, αρκετά πιο εύκολο, αρκεί να φτιάξεις entity class (ναι ναι αντίγραφο και αυτό απο τα beans το είπαμε!).

    Σε desktop java που άρχισα να φτιάχνω την εφαρμογή βρήκα αρκετές δυσκολίες, κυρίως στο στήσιμο της embedded derbydb (η της embedded javadb ή της embedded h2 ή της embedded hsqldb). Το ζήτημα ήταν RAD και κάτι πολύ λιτό σε απαιτήσεις, πράγματα που ικανοποιούνται (δεν θα τρέξει και σε linux ή mac η εφαρμογή ποτέ. Αμα είναι για mac το σκεφτόμαστε σε Objective-c).

    Btw στο faceboom είμαι ο Panagiotis με το λαγουδάκι στο κλουβί😉

  2. Βρε ObjC και Core Data/SQlite/KVO/KVC/key bindings και ξερό ψωμί!

    Πολύ μπροστά τα APIs της Apple, ειδικά σε 10.4+ γίνεται το έλα να δεις, persistent stores από πολλές πηγές ταυτόχρονα, αυτόματη διαχείριση και φυσικά φουλ support για ό,τι DB θες. Προσωπική προτίμηση, SQlite φυσικά για desktop περιβάλλοντα. Και το καλύτερο, πλήρη πρόσβαση στο GUI builder της Apple, με όλα τα bindings techs του, RAD και Άγιος ο Θεός.

  3. Ε για apple χαίρω πολύ. Βασισμένα στο freebsd, εκεί μπορείς να δουλέψεις και με τα Opensource apis. Εδω μιλάω για desktop δουλειές στο κατεστημένο🙂

    Περισσότερα για mac programming σύντομα που θα έχω στα χέρια μου και κανονικό mac και όχι αλχημίες με ming32.

  4. Επίσης περιμένω να γίνει μετατροπή του LINQ στο mono project ώστε να έχει μια καλύτερη υποστήριξη για mysql/pgsql/sqlite απο τους ήδη υπάρχοντες providers που είναι ακόμα σε 0.x stage.

Σχολιάστε

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s