Αφού λοιπόν είδαμε τι ωραία πράγματα μπορούμε να κάνουμε με τα Rule Engines, ας δοκιμάσουμε κάτι hands-on. Αυτή τη στιγμή ένα από τα καλύτερα και πιο ολοκληρωμένα fully open source Rule Engines είναι το Drools της JBoss (a division of Red Hat :) ). Αρχικά, πήγαινε στη σελίδα με τα downloads του Drools και κατέβασε το Drools 4.0.7 Binaries. Αποσυμπίεσέ το σε ένα folder στο PC σου και άνοιξε το αγαπημένο σου IDE (για ‘μένα, το NetBeans ;) ).
Δε θα ασχοληθούμε με structuring και proper layering της demo εφαρμογής μας, οπότε έχε υπόψη σου ότι τα παρακάτω κομμάτια κώδικα υπάρχουν κυρίως για να σου δώσουν μια γρήγορη και πρώτη ιδέα του πως μπορείς να χρησιμοποιήσεις το Drools. Για applications στο production, you should try better than that ;)
Ας δούμε λοιπόν το specification της εφαρμογής μας. Ας υποθέσουμε λοιπόν ότι φτιάχνουμε - ένα πάααααρα πολύ απλό version - μιας εφαρμογής για τον υπολογισμό του λογαριασμού ενός πελάτη εταιρίας τηλεφωνίας. Τα στοιχεία του πελάτη αντιπροσωπεύονται από ένα Customer object και τα διάφορα items του λογαριασμού του από ένα ή περισσότερα BillItem objects. Όπως είναι λογικό, έχουμε πολλούς πελάτες, με λογαριασμούς με πολλαπλά items με τη διαφορά όμως ότι δεν έχουμε ενιαίο τρόπο υπολογισμού του τελικού κόστους του λογαριασμού μιας και ο κάθε πελάτης μπορεί να ανήκει σε διαφορετικό plan. Τι κάνουμε λοιπόν; Φτιάχνουμε ένα CostCalculator class το οποίο το επεκτείνουμε με νέες μεθόδους κάθε φορά που ένα νέο plan δημιουργείται από την εταιρία μας; Προσπαθούμε να το κάνουμε λίγο παραπάνω modularise και φτιάχνουμε όλες τις ρουτίνες υπολογισμού του κόστους των λογαριασμών με PL/SQL στη βάση, ώστε τουλάχιστον να μη χρειάζεται να κάνουμε re-deploy την εφαρμογή μας κάθε τρεις και λίγο; Φτιάχνουμε ένα custom τρόπο με τον οποίο μπορούμε να υπολογίσουμε το κόστος βασιζόμενοι σε data που έχουμε ορίσει σε κάποιο proprietary text file (του οποίου το format, φυσικά, βαριόμαστε να κάνουμε properly document και μόλις φύγει από την εταιρία ο άνθρωπος που το έφτιαξε ψάχνουμε να προσλάβουμε τους απόγονους του Ventris για να το αποκρυπτογραφήσουν); Χμ, γιατί δε δοκιμάζουμε να χρησιμοποιήσουμε ένα Rule Engine;


RSS