ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΕΤΑΠΤΥΧΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΕΙΔΙΚΕΥΣΗΣ «ΣΥΣΤΗΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ» ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ ΜΕ ΘΕΜΑ: «ΑΝΑΠΤΥΞΗ JAVA EE ΕΦΑΡΜΟΓΩΝ ΜΕ ΧΡΗΣΗ ΛΟΓΙΣΜΙΚΟΥ ΑΝΟΙΚΤΟΥ ΚΩΔΙΚΑ ΚΑΙ ΑΞΙΟΠΟΙΗΣΗ ΠΡΟΤΥΠΩΝ ΣΧΕΔΙΑΣΗΣ» της ΜΑΡΙΑΣ ΜΟΥΡΑΤΙΔΟΥ ΕΠΙΒΛΕΠΩΝ: ΧΑΤΖΗΓΕΩΡΓΙΟΥ ΑΛΕΞΑΝΔΡΟΣ ΕΞΕΤΑΣΤΕΣ: ΧΡΗΣΤΟΣ ΓΕΩΡΓΙΑΔΗΣ Ιανουάριος 2007
Στόχος της εργασίας Στόχος της εργασίας είναι η διερεύνηση των αρχών που πρέπει να διέπουν τη σχεδίαση μιας Java EE εφαρμογής, ώστε αυτή να συντηρείται και να επεκτείνεται με ευκολία καθώς και ο ποιοτικός και ποσοτικός υπολογισμός του οφέλους που προκύπτει από την εφαρμογή προτύπων σχεδίασης σε μία επιχειρησιακή εφαρμογή επίδειξης. Τα πρότυπα σχεδίασης που θα χρησιμοποιηθούν για τον υπολογισμό του οφέλους είναι τα: Front Controller Model-View View-Controller Transfer Object Service to Worker
Η Java EE πλατφόρμα Η Java EE πλατφόρμα είναι μια πλατφόρμα για ανάπτυξη, εγκατάσταση και εκτέλεση επιχειρησιακών εφαρμογών σε κατανεμημένο περιβάλλον. Χρησιμοποιεί ένα κατανεμημένο μοντέλο πολλών επιπέδων. Τα επίπεδα αυτά είναι: το επίπεδο πελάτη που εκτελείται στο μηχάνημα του πελάτη το επίπεδο web που εκτελείται στο Java EE διακομιστή το επίπεδο επιχείρησης που εκτελείται στο Java EE διακομιστή το επίπεδο συστήματος επιχειρησιακών πληροφοριών (Enterprise Information System ή EIS) που εκτελείται στο EIS διακομιστή Τα Java EE στοιχεία είναι λειτουργικές μονάδες λογισμικού που επικοινωνούν μεταξύ τους και συγκεντρώνονται σε μία Java EE εφαρμογή περιλαμβάνοντας σχετικές κλάσεις και αρχεία. Ως Java EE στοιχεία είναι: οι εφαρμογές πελάτη και τα applets (εκτελούνται στο πελάτη). τα Java Servlets και Java Server Pages (JSP)) (εκτελούνται( στον διακομιστή). τα Enterprise JavaBeans (EJB) γνωστά ως enterprise beans (εκτελούνται στον διακομιστή).
Container Module Packing εφαρμογών Container είναι η διεπιφάνεια μεταξύ ενός στοιχείου και της λειτουργίας χαμηλού επιπέδου μιας συγκεκριμένης πλατφόρμας που υποστηρίζει το στοιχείο. Ο Java EE διακομιστής παρέχει Ένα module αποτελείται από ένα ή υπηρεσίες με τη μορφή ενός περισσότερα Java EE στοιχεία που container για κάθε τύπο χρησιμοποιούν τον ίδιο τύπο container και στοιχείου. Οι υπηρεσίες αυτές ένα xml αρχείο (deployment descriptor) το είναι: οποίο καθορίζει τις ρυθμίσεις του container. Ασφάλεια, Οι τύποι των module είναι: Συναλλαγές, EJB modules,, (σε(.jar αρχείο) JNDI αναζήτησης και Web modules,, (σε(.war αρχείο) απομακρυσμένη σύνδεση Modules εφαρμογών πελάτη (σε.jar Ενώ υπάρχουν οι εξής τύποι αρχείο) και container: Modules προσαρμογέων πηγών (σε.rar Enterprise JavaBeans (EJB) αρχείο) container Web container Μια Java EE εφαρμογή μεταφέρεται σε ένα Container εφαρμογής πελάτη αρχείο.ear αρχείο που περιέχει τα module από τα οποία αποτελείται και deployment Applet container descriptors.
Enterprise JavaBeans (EJB) Ένα Enterprise JavaBean (EJB) είναι μια δομημένη μονάδα που μπορεί να χρησιμοποιηθεί μόνη ή με άλλα EJB για την εκτέλεση της επιχειρησιακής λογικής στον Java EE διακομιστή. Τα είδη των EJB είναι: session beans τα οποία διακρίνονται σε stateful και stateless, message-driven beans και entity beans τα οποία αντικαθίστανται από τα persistent entities. Ο πελάτης καλεί ένα EJB: Αναζητώντας το αντικείμενο Home μέσω της JNDI τεχνολογίας και μέσω του αντικειμένου Home δημιουργεί το EJB και καλεί τις μεθόδους του. Από την Java 2 Από την Διανομή του EJB Από τον προγραμματιστή Παράγεται από το Container <Διασύνδεση> javax.ejb.ejbhome <home Διασύνδεση> SessionRemoteHome Αντικείμενο Home <Διασύνδεση> Java.rmi.Remote <Διασύνδεση> javax.ejb.ejbobject <remote Διασύνδεση> SessionRemote Αντικείμενο EJB <Διασύνδεση> java.io.serializable <Διασύνδεση> javax.ejb.enterprizebean <Διασύνδεση> javax.ejb.sessionbean <session bean> SessionBean Μοντέλο session bean
JSPs, Servlets Μια JSP σελίδα είναι ένα έγγραφο βασισμένο σε κείμενο που περιέχει δύο τύπους κειμένου, α) τα στατικά δεδομένα (HTML, WML και XML) και β) JSP στοιχεία. Τα διαφορετικά είδη του κώδικα Java που μπορούν να εισαχθούν σε μία JSP σελίδα ονομάζονται στοιχεία σεναρίων (scripting elements). Τα στοιχεία σεναρίων είναι τα εξής: εκφράσεις (expressions), τμήματα κώδικα (scriptlets) και δηλώσεις (declarations) Όταν ζητείται μία JSP σελίδα ο διακομιστής web την μεταφράζει σε servlet και την εκτελεί. Τα πλεονεκτήματα των Servlets: βασίζονται και αναπτύσσονται στην Java και όχι σε μία script γλώσσα, υπάρχει η έννοια της συνόδου (session) και δυνατότητα πρόσβασης σε βάσεις δεδομένων μέσω του JDBC API. Τα servlets είναι πιο κατάλληλα για εκείνα τα στοιχεία μιας web εφαρμογής που έχουν αρκετή προγραμματιστική λογική (π.χ. δημιουργούν αντικείμενα, προσπελάζουν βάσεις δεδομένων κλπ.) και ελάχιστα ή καθόλου στοιχεία απόκρισης προς τον χρήστη.
Δημιουργία ηλεκτρονικού βιβλιοπωλείου Για λόγους επίδειξης δημιουργήθηκε μια επιχειρησιακή εφαρμογή, ένα ηλεκτρονικό κατάστημα (βιβλιοπωλείο). Το διαχειριστικό τμήμα Ενώ ο πελάτης μπορεί: (http://localhost localhost:8080/mybookstore- να δει τα διαθέσιμα βιβλία, WebModule/admin/ admin/pages/admincatalog) της εφαρμογής παρέχει στον να αναζητήσει κάποιο βιβλίο, διαχειριστή τη δυνατότητα: να δει τα στοιχεία κάποιου βιβλίου, να ενημερώνει την ποσότητα κάθε να προσθέτει βιβλία στο καλάθι αγορών, βιβλίου, να δει τα περιεχόμενα του καλαθιού να ανανεώνει την τιμή κάθε βιβλίου, αγορών του να διαγράφει κάποιο βιβλίο, να αφαιρέσει κάποιο από τα περιεχόμενα να εισάγει κάποιο βιβλίο, του καλαθιού αγορών του, να ενημερωθεί για τις συναλλαγές να αδειάσει εντελώς το καλάθι αγορών, που έχουν ολοκληρωθεί, να αλλάξει όλα τα προσωπικά του να αλλάζει τα στοιχεία των χρηστών, στοιχεία και τον κωδικό του πρόσβασης, να διαγράφει κάποιους χρήστες. να δει μήνυμα για την κατηγορία βιβλίων που προτιμά σύμφωνα με τις Μια υπηρεσία web δέχεται τον κωδικό προηγούμενες αγορές του. ISBN ενός βιβλίου και επιστρέφει τον (http://localhost localhost:8080/mybookstore- τίτλο του. WebModule/pages/enter) (http://localhost localhost:8080/bookinfoclient)
Υλοποίηση ηλεκτρονικού βιβλιοπωλείου Η εφαρμογή χρησιμοποιεί δύο enterprise beans (ένα stateful και ένα stateless). το stateful υλοποιεί τη λειτουργικότητα του καλαθιού αγορών ενός πελάτη και το stateless περιλαμβάνει μεθόδους που υλοποιούν την λογική της επιχείρησης Η web υπηρεσία αναπτύχθηκε χρησιμοποιώντας το Java API για XML RPC (Remote Procedure Calls). Η κλήση της web υπηρεσίας γίνεται χρησιμοποιώντας το πρωτόκολλο SOAP. Στην διασύνδεσης BookInfoServiceSEI που επεκτείνει την java.rmi.remote δηλώνονται οι μέθοδοι που ο πελάτης μπορεί να καλέσει. Η εφαρμογή πελάτη καλεί την web υπηρεσία μέσω του αρχείου wsdl που περιγράφει την υπηρεσία. Επίσης χρησιμοποιούνται τα servlets: AdminCatalogServlet, BookDetailsServlet, BookStoreServlet, CashierServlet, CatalogServlet, ChangeUserServlet, CreateUserServlet, LogoutServlet, ReceiptServlet και ShowCartServlet Τέλος, χρησιμοποιούνται και 2 φίλτρα: το HitCounterFilter και το OrderFilter
Πρότυπα Σχεδίασης Πρότυπο σχεδίασης είναι μια καλά ορισμένη λύση σε ένα επαναλαμβανόμενο πρόβλημα. Στο επίπεδο παρουσίασης υπάρχουν τα πρότυπα: Model-View View-Controller (διαχωρίζει το μοντέλο, την παρουσίαση και την επεξεργασία), Front Controller (συγκεντρώνει την κοινή λειτουργικότητα), Intercepting Filter (προσθέτει λειτουργίες), Service to Worker (διατηρεί το διαχωρισμό ανάμεσα σε ενέργειες (actions), όψεις και ελεγκτές), View Helper (μειώνει την εξειδίκευση στις όψεις), Composite View (για την επαναχρησιμοποίηση κοινών τμημάτων όψεων), Context Object (ενσωματώνει τα δεδομένα του συστήματος ανεξαρτήτως πρωτοκόλλου), Application Controller (προσδιορίζει την κλήση εντολών και τον καθορισμό και την προώθηση των όψεων για ένα είδος αιτήματος), Dispatcher View (προωθεί την κατάλληλη όψη όταν υπάρχει μικρή επιχειρησιακή λογική).
Πρότυπα Σχεδίασης Στο επίπεδο επιχείρησης υπάρχουν τα πρότυπα: Business Delegate (αποκρύπτει λεπτομέρειες της υλοποίησης της επιχείρησης), Service Locator (αποκρύπτει λεπτομέρειες πρόσβασης σε ένα στοιχείο), Session Façade ade (αποκρύπτει την πολυπλοκότητα χειρισμού της επιχείρησης), Application Service (συγκεντρώνει την λογική της επιχείρησης), Business Object (διαχωρίζει τα δεδομένα και τη λογική της επιχείρησης), Composite Entity (εκμεταλλεύεται τα χαρακτηριστικά της EJB αρχιτεκτονικής), Transfer Object (μεταφέρει πολλά δεδομένα μεταξύ επιπέδων), Transfer Object Assembler (συναθροίζει πολλά Transfer Objects) και Value List Handler (διαχειρίζεται προσωρινά δεδομένα) Στο επίπεδο συστήματος επιχειρησιακών πληροφοριών υπάρχουν: Data Access Object (ενσωματώνει όλη την πρόσβαση στη Βάση Δεδομένων), Service Activator (για την ασύγχρονη επεξεργασία αιτημάτων), Web Service Broker (υπηρεσία που εξυπηρετεί ως μεσολαβητής άλλες) και Domain Store (με διαφανή τρόπο διατηρεί ένα μοντέλο δεδομένων).
Εφαρμογή προτύπων σχεδίασης Front Controller: Στα servlets α) BookDetailsServlet, β) BookStoreServlet, γ) CashierServlet, δ) το CatalogServlet, ε) ChangeUserServlet, στ) LogoutServlet, ζ) ReceiptServlet και η) ShowCartServlet υπάρχει μια κοινή λειτουργία, ο έλεγχος για αν ο χρήστης έχει εισαχθεί στο ηλεκτρονικό βιβλιοπωλείο είτε ανώνυμα είτε εισάγοντας το όνομα χρήστη και τον κωδικό πρόσβασής του, η οποία μεταφέρεται σε ένα servlet που καλείται πριν την κλήση των άλλων servlets. Model-View View-Controller: Στα servlets υπάρχει και ο κώδικας που σχετίζεται με τη λειτουργικότητα και ο κώδικας που σχετίζεται με την παρουσίαση της εφαρμογής. Ο κώδικας που σχετίζεται με την παρουσίαση μεταφέρεται σε JSP σελίδες ( α) BookDetails.jsp jsp, β) BookStore.jsp jsp, γ) Cashier.jsp jsp, δ) το Catalog.jsp jsp, ε) ChangeUser.jsp jsp, στ) Logout.jsp jsp, ζ) Receipt.jsp jsp, η) ShowCart.jsp jsp, θ) CreateUser.jsp jsp, ι) AdminCatalog.jsp jsp, κ) AdminLogin.jsp jsp, λ) AdminLogout.jsp jsp, μ) InsertBook.jsp jsp, ν) Transactions.jsp και ξ) Users.jsp jsp).
Εφαρμογή προτύπων σχεδίασης Transfer Object: Η λίστα βιβλίων, χρηστών και αγορών δεν χωρά σε μία σελίδα. Για αυτό επιστρέφονται αυτά που χωράνε σε μία σελίδα και δημιουργούνται σύνδεσμοι για τις άλλες. Τα αντικείμενα μιας σελίδας καθώς και ο συνολικός αριθμός των αντικειμένων επιστρέφονται μαζί (με μία ανάκτηση). Service to Worker: Τα servlets καταργούνται και όλες οι ενέργειες της εφαρμογής που εμπεριέχονται στα servlets μεταφέρονται σε διαφορετικές κλάσεις. Την επιλογή της κατάλληλης ενέργειας που θα πρέπει να εκτελεστεί καθώς και η επιλογή της κατάλληλης όψης αναλαμβάνουν δύο αντικείμενα (ένα για το διαχειριστικό τμήμα και ένα για το τμήμα των πελατών), Dispatcher.
Μετρικές Η ποιότητα του κώδικα της εφαρμογής θα μετρηθεί μέσω μετρικών. Η μείωση των τιμών των μετρικών που ακολουθούν σημαίνει αυτόματα και βελτίωση του κώδικα. Οι μετρικές που μεταβάλλονται από την εφαρμογή των προτύπων σχεδίασης είναι: ΗμετρικήCoupling Between Objects (CBO) αναπαριστά τον αριθμό των άλλων κλάσεων με τις οποίες έχει σύζευξη η κλάση. ΗμετρικήChanging Methods (CM) προσδιορίζει τον αριθμό διακριτών μεθόδων στο σύστημα που είναι πιθανόν να επηρεαστούν από αλλαγές σε μία κλάση. ΗμετρικήChanging Classes (ChC) προσδιορίζει τον αριθμό των κλάσεων του πελάτη όπου οι αλλαγές που πρέπει να γίνουν είναι αποτέλεσμα μιας αλλαγής της κλάσης του διακομιστή. ΗμετρικήResponse For Class (RFC) ορίζει το μέγεθος της απόκρισης για μία κλάση. ΗμετρικήWeighted Methods Per Class 1 (WMPC1) είναι το άθροισμα της πολυπλοκότητας όλων των μεθόδων μιας κλάσης. ΗμετρικήWeighted Methods Per Class 2 (WMPC2) μετρά την πολυπλοκότητα μιας κλάσης υποθέτοντας πως μια κλάση με περισσότερες μεθόδους από μια άλλη είναι πιο πολύπλοκη.
Μεταβολές των μετρικών CBO, RFC και WMPC1 μετά την εφαρμογή του Front Controller Μ.Ο. μείωσης της CBO: 15% (LogoutServlet( LogoutServlet: : 27%) Μ.Ο. μείωσης της RFC: 13% (BookStoreServlet( BookStoreServlet: : 28%) Μ.Ο. μείωσης της WMPC1: : 12% (LogoutServlet( LogoutServlet: : 20%) Μείωση συζεύξεων (CBO) Μείωση απόκρισης (RFC) Μείωση πολυπλοκότητας (WMPC1) Μείωση του κώδικα: 0,8% (από( 4562 γραμμές σε 4525) 50 40 30 20 10 0 Μεταβoλές μετρικών μετά την εφαρμογή του Front Controller BookDetail sservlet BookStore Servlet CashierSer vlet CatalogSe rvlet ChangeUs erservlet LogoutSer vlet ReceiptSer vlet ShowCartS ervlet CBO πριν 15 25 17 18 14 11 16 20 CBO μετά 13 21 14 17 12 8 14 18 RFC πριν 28 46 28 43 36 18 24 37 RFC μετά 25 33 25 38 33 15 21 34 WMPC1 πριν 6 19 15 25 16 5 10 11 WMPC1 μετά 5 16 14 23 15 4 9 10 CBO πριν CBO μετά RFC πριν RFC μετά WMPC1 πριν WMPC1 μετά
Μεταβολές των μετρικών RFC, WMPC1 και WMPC2 μετά την εφαρμογή του Model-View View-Controller Μ.Ο. μείωσης της RFC: 25% % (ChangeUserServlet( : 42%) Μ.Ο. μείωσης της WMPC1: 35% % (ChangeUserServlet( : 67%) Μ.Ο. μείωσης της WMPC2: 7,6% % (ChangeUserServlet( : 28,6%) Μείωση απόκρισης (RFC) Μείωση πολυπλοκότητας (WMPC1, WMPC2) 100 80 60 40 20 0 Μετάβολές μετρικών μετά την εφαρμογή του Model-View-Controller AdminC atalogs ervlet BookDet ailsserv let BookSto reservle t Cashier Servlet Catalog Servlet Change UserSer vlet CreateU serservl et Logout Servlet Receipt Servlet ShowCa rtservlet RFC πριν 88 25 33 25 38 33 35 15 21 34 RFC μετά 58 16 30 17 28 19 27 12 20 27 WMPC1 πριν 71 5 16 14 23 15 14 4 9 10 WMPC1 μετά 32 5 14 5 10 5 6 4 8 7 WMPC2 πριν 15 10 11 10 10 14 14 10 10 10 WMPC2 μετά 11 10 11 10 10 10 11 10 10 10 RFC πριν RFC μετά WMPC1 πριν WMPC1 μετά WMPC2 πριν WMPC2 μετά
Μεταβολές των μετρικών CM και ChC μετά την εφαρμογή του Model- View-Controller Η μείωση των μετρικών CM και ChC οφείλεται στο ότι λόγω της εφαρμογής του προτύπου το σύστημα επηρεάζεται λιγότερο από αλλαγές που μπορεί να προκύψουν από αλλαγές αυτών των κλάσεων. Μείωση του κώδικα: 45% (από( 4525 γραμμές σε 3121) 16 14 12 10 8 6 4 2 0 Μεταβολή μετρικών μετά την εφαρμογή του Model-View -Controller BookDetails ShoppingCartItem TransactionDetails Currency CM πριν 14 6 2 7 CM μετά 11 5 1 6 ChC πριν 9 4 3 7 ChC μετά 6 3 2 6 CM πριν CM μετά ChC πριν ChC μετά
Μεταβολή μετρικής CM μετά την εφαρμογή του Transfer Object Μ.Ο. μείωσης της CM: 13% % (BooksNotFoundException( : 16%) Μείωση των πιθανών αλλαγών στο σύστημα από αλλαγές των κλάσεων αυτών (CM) 35 30 25 20 15 Μεταβολή της μετρικής CM μετά την εφαρμογή του Transfer Object 10 5 0 TransactSessionRemot ebusiness BookDB BookDetails BooksNotFoundExcepti on CM πριν 30 19 11 6 CM μετά 27 16 10 5 CM πριν CM μετά
Μεταβολή μετρικής RFC μετά την εφαρμογή του Transfer Object Μ.Ο. μείωσης της RFC: 5% (TransactSessionRemoteBusiness( TransactSessionRemoteBusiness: 15%) Μείωση απόκρισης (RFC) 350 300 250 200 150 100 50 Μεταβολή μετρικής RFC μετά την εφαρμογή του Transfer Object 0 AdminCata logservlet BookStore Servlet CatalogSer vlet ReceiptSer vlet ShowCartS ervlet TransactSe ssionbean TransactSe ssionremo tebusiness BookDB RFC πριν 58 30 28 20 27 74 20 306 RFC μετά 56 29 26 21 26 71 17 276 RFC πριν RFC μετά
Μεταβολές των μετρικών WMPC1 και WMPC2 μετά την εφαρμογή του Transfer Object Μ.Ο. μείωσης της WMPC1: : 5% (TransactSessionRemoteBusiness:: 15%) Μ.Ο. μείωσης της WMPC2: : 3% (TransactSessionRemoteBusiness : 4,4%) Μείωση πολυπλοκότητας (WMPC1, WMPC2) Μείωση του κώδικα: 1% (από( 3121 γραμμές σε 3087) Μεταβολή των μετρικών WMPC1 και WMPC2 μετά την εφαρμογή του Transfer Object 100 80 60 40 20 0 BookStoreServlet TransactSessionBean TransactSessionRemo tebusiness BookDB WMPC1 πριν 14 50 20 58 WMPC1 μετά 13 53 17 55 WMPC2 πριν 11 75 69 82 WMPC2 μετά 11 72 66 79 WMPC1 πριν WMPC1 μετά WMPC2 πριν WMPC2 μετά
Μεταβολές των μετρικών CBO, RFC και ChC μετά την εφαρμογή του Service to Worker Μ.Ο. μείωσης της CBO: 28% % (LogoutServlet( LogoutServlet: 70%) Μ.Ο. μείωσης της RFC: 27% % (BookStoreServlet( BookStoreServlet: 67%) Μείωση συζεύξεων (CBO) Μείωση απόκρισης (RFC) Μείωση των πιθανών αλλαγών που μπορούν να προκληθούν από αλλαγές των κλάσεων αυτών (ChC) 60 50 40 30 20 10 0 AdminCa talogserv let Μεταβολές μετρικών μετά την εφαρμογή του Service to Worker FrontCont BookDeta rollerserv ilsservlet let CashierS ervlet CatalogS ervlet ChangeU LogoutSe ReceiptS serservlet rvlet ervlet ShowCart Servlet CBO πριν 26 22 14 16 18 13 10 15 18 CBO μετά 24 26 9 11 13 8 3 10 13 RFC πριν 56 30 16 17 26 18 12 21 26 RFC μετά 36 46 10 11 18 12 4 15 19 ChC πριν 2 2 2 2 2 2 2 2 2 ChC μετά 2 2 1 1 1 1 1 1 1 CBO πριν CBO μετά RFC πριν RFC μετά ChC πριν ChC μετά
Μεταβολές των μετρικών CBO, RFC και ChC μετά την εφαρμογή του Service to Worker Μ.Ο. μείωσης της WMPC1: 38% % (LogoutServlet( LogoutServlet: 75%) Μ.Ο. μείωσης της WMPC2: 61% % (ως( 80%) Μείωση πολυπλοκότητας (WMPC1, WMPC2) Μείωση του κώδικα: 8,4% % (από( 3087 γραμμές σε 2829) 35 30 25 20 15 10 5 Μεταβολές μετρικών μετά την εφαρμογή του Service to Worker 0 AdminCa talogser vlet FrontCon trollerser vlet BookDet ailsservl et CashierS ervlet CatalogS ervlet ChangeU serservle t LogoutS ervlet ReceiptS ervlet ShowCar tservlet WMPC1 πριν 32 9 5 5 10 5 4 8 7 WMPC1 μετά 11 17 2 2 7 2 1 5 4 WMPC2 πριν 11 11 10 10 10 10 10 10 10 WMPC2 μετά 11 12 2 2 2 2 2 2 2 WMPC1 πριν WMPC1 μετά WMPC2 πριν WMPC2 μετά
Συμπεράσματα Παρόλο που η Java EE πλατφόρμα είναι μια πλατφόρμα που δίνει τη δυνατότητα εύκολης συντήρησης και επέκτασης σε εφαρμογές, η υλοποίηση προτύπων σχεδίασης βελτιώνει σημαντικά την ποιότητα του κώδικα. Επίσης, κατά την υλοποίηση διαδοχικών προτύπων σχεδίασης που εφαρμόζονται στο ίδιο τμήμα κώδικα (π.χ. Front Controller, Model-View View-Controller και Service to Worker που επηρεάζουν τα servlets που απευθύνονται στον πελάτη) υπήρξε ολοένα και μεγαλύτερη βελτίωση της ποιότητας του κώδικα και επομένως της συντηρησιμότητάς του.