Προγραμματισμός

Κίνδυνοι έργου J2EE!

Στις διάφορες θητείες μου ως προγραμματιστής, ανώτερος προγραμματιστής και αρχιτέκτονας, έχω δει τα καλά, τα κακά και τα άσχημα όταν πρόκειται για εταιρικά έργα Java! Όταν αναρωτιέμαι τι κάνει ένα έργο να πετύχει και ένα άλλο να αποτύχει, είναι δύσκολο να βρω την τέλεια απάντηση, καθώς η επιτυχία αποδεικνύεται δύσκολο να προσδιοριστεί για όλα έργα λογισμικού. Τα έργα J2EE δεν αποτελούν εξαίρεση. Αντ 'αυτού, τα έργα επιτυγχάνουν ή αποτυγχάνουν με διαφορετικούς βαθμούς. Σε αυτό το άρθρο σκοπεύω να αναλάβω τους 10 κορυφαίους κινδύνους που επηρεάζουν την επιτυχία ενός εταιρικού έργου Java και να τους παρουσιάσω για εσάς, τον αναγνώστη.

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

Αυτό το άρθρο έχει απλή δομή. Θα καλύψω κάθε κίνδυνο ως εξής:

  • Όνομα κινδύνου: Μία επένδυση που περιγράφει τον κίνδυνο
  • Φάση έργου: Η φάση του έργου όπου εμφανίζεται ο κίνδυνος
  • Οι φάσεις του έργου επηρεάστηκαν: Σε πολλές περιπτώσεις, οι κίνδυνοι μπορούν να επηρεάσουν τις μεταγενέστερες φάσεις του έργου
  • Συμπτώματα: Συμπτώματα που σχετίζονται με αυτόν τον κίνδυνο
  • Λύση: Τρόποι για να αποφύγετε εντελώς τον κίνδυνο και πώς να ελαχιστοποιήσετε τις επιπτώσεις του στο έργο σας
  • Σημειώσεις: Σημεία που θέλω να αναφέρω ότι σχετίζονται με τον κίνδυνο, αλλά δεν ταιριάζουν στις προηγούμενες κατηγορίες

Όπως σημειώθηκε παραπάνω, θα εξετάσουμε κάθε κίνδυνο στο πλαίσιο ενός εταιρικού έργου Java, μαζί με τις σημαντικές φάσεις του. Οι φάσεις του έργου καλύπτουν:

  • Επιλογή προμηθευτή: Η διαδικασία επιλογής του καλύτερου δυνατού συνδυασμού εργαλείων πριν ξεκινήσετε το έργο J2EE - από το διακομιστή εφαρμογών μέχρι τη μάρκα καφέ σας.
  • Σχέδιο: Μεταξύ μιας αυστηρής μεθοδολογίας καταρράκτη και μιας προσέγγισης «κωδικοποιήστε το και δείτε», βρίσκεται ο σχεδιασμός μου: κάνω αρκετό σχεδιασμό ώστε να μπορώ να μετακινηθώ άνετα στην ανάπτυξη. Θεωρώ ότι η φάση σχεδιασμού μου ολοκληρώθηκε όταν ξέρω ακριβώς τι χτίζω και πώς θα το φτιάξω. Επιπλέον, χρησιμοποιώ πρότυπα σχεδίασης για να βεβαιωθώ ότι έχω κάνει όλες τις σωστές ερωτήσεις του εαυτού μου και της προτεινόμενης λύσης πριν προχωρήσω στην ανάπτυξη. Ωστόσο, δεν φοβάμαι να κωδικοποιήσω σε αυτήν τη φάση. Μερικές φορές είναι ο μόνος τρόπος για να απαντήσετε σε μια ερώτηση σχετικά με το λόγο, την απόδοση ή την αρθρωτότητα.
  • Ανάπτυξη: Η φάση του έργου όπου θα εμφανιστεί ο όγκος της εργασίας που πραγματοποιήθηκε σε προηγούμενες φάσεις. Μια καλή επιλογή εργαλείων σε συνδυασμό με έναν καλό σχεδιασμό δεν σημαίνει πάντα μια εξαιρετικά ομαλή ανάπτυξη, αλλά σίγουρα βοηθά!
  • Δοκιμή σταθεροποίησης / φόρτωσης: Σε αυτήν τη φάση, ο αρχιτέκτονας του συστήματος και ο διαχειριστής έργου θα επιβάλουν ένα πάγωμα χαρακτηριστικών και θα επικεντρωθούν στην ποιότητα κατασκευής, καθώς και να διασφαλίσουν ότι μπορούν να ικανοποιηθούν τα ζωτικά στατιστικά στοιχεία του συστήματος - αριθμός ταυτόχρονων χρηστών, σενάρια ανακατεύθυνσης κ.ο.κ. Ωστόσο, η ποιότητα και η απόδοση δεν πρέπει να αγνοούνται μέχρι αυτή τη φάση. Πράγματι, δεν μπορείτε να γράψετε κακή ποιότητα ή αργό κώδικα και να το αφήσετε μέχρι να σταθεροποιηθεί η σταθεροποίηση.
  • Ζω: Αυτή δεν είναι πραγματικά μια φάση του έργου, είναι μια ημερομηνία που έχει τεθεί σε πέτρα. Αυτή η φάση αφορά την προετοιμασία. Εκεί θα επιστρέψουν τα φαντάσματα των λαθών του παρελθόντος για να στοιχειώσουν το έργο σας, από κακή σχεδίαση και ανάπτυξη έως κακή επιλογή πωλητών.

Το Σχήμα 1 απεικονίζει τις φάσεις του έργου που επηρεάζονται περισσότερο από τις διαφορετικές αιτίες (και συγκεκριμένα τις επιδράσεις).

Λοιπόν, χωρίς άλλη παραλλαγή, ας βουτήξουμε κατευθείαν στα κορυφαία 10!

Κίνδυνος 1: Μη κατανόηση της Java, δεν καταλαβαίνω το EJB, δεν κατανοούμε το J2EE

Σωστά, θα το χωρίσω σε τρία υποστοιχεία για ευκολότερη ανάλυση.

Περιγραφή: Δεν καταλαβαίνω την Java

Φάση έργου:

Ανάπτυξη

Οι φάσεις του έργου επηρεάστηκαν:

Σχεδιασμός, Σταθεροποίηση, Ζωντανός

Τα χαρακτηριστικά του συστήματος επηρεάζονται:

Συντηρησιμότητα, επεκτασιμότητα, απόδοση

Συμπτώματα:

  • Επανεκκίνηση της λειτουργικότητας και των τάξεων που ήδη περιλαμβάνονται στα βασικά API JDK
  • Χωρίς να γνωρίζουμε τι είναι ή όλα τα παρακάτω και τι κάνουν (αυτή η λίστα αντιπροσωπεύει μόνο ένα δείγμα θεμάτων):
    • Συλλέκτης απορριμμάτων (τρένο, γενιά, σταδιακή, σύγχρονη, ασύγχρονη)
    • Όταν τα αντικείμενα μπορούν να συλλεχθούν σκουπίδια - κρέμονται αναφορές
    • Μηχανισμοί κληρονομικότητας που χρησιμοποιούνται (και οι αντισταθμίσεις τους) στην Java
    • Μέθοδος υπερφόρτωσης και υπερφόρτωσης
    • Γιατί java.lang.String (αντικαταστήστε την αγαπημένη σας τάξη εδώ!) αποδεικνύεται άσχημη για την απόδοση
    • Σημασιολογία αναφοράς Pass-by Java (έναντι σημασιολογίας pass-by value στο EJB)
    • Χρησιμοποιώντας == έναντι της εφαρμογής του ισούται με () μέθοδος για μη προνομιακά
    • Πώς η Java προγραμματίζει τα νήματα σε διαφορετικές πλατφόρμες (για παράδειγμα, προληπτικά ή όχι)
    • Πράσινα νήματα έναντι εγγενών νημάτων
    • Hotspot (και γιατί οι παλιές τεχνικές συντονισμού απόδοσης αναιρούν τις βελτιστοποιήσεις Hotspot)
    • Το JIT και όταν τα καλά JIT πηγαίνουν άσχημα (unset JAVA_COMPILER και ο κώδικάς σας λειτουργεί καλά, κ.λπ.)
    • Το API Συλλογών
    • RMI

Λύση:

Πρέπει να βελτιώσετε τις γνώσεις σας για την Java, ειδικά τα πλεονεκτήματα και τις αδυναμίες της. Η Java υπάρχει πολύ πέρα ​​από τη γλώσσα. Είναι εξίσου σημαντικό να κατανοήσετε την πλατφόρμα (JDK και εργαλεία). Συγκεκριμένα, θα πρέπει να πιστοποιηθείτε ως προγραμματιστής Java εάν δεν είστε ήδη - θα εκπλαγείτε πόσο δεν ξέρατε. Ακόμα καλύτερα, κάντε το ως μέρος μιας ομάδας και ωθήστε το ένα το άλλο. Είναι επίσης πιο διασκεδαστικό με αυτόν τον τρόπο. Επιπλέον, δημιουργήστε μια λίστα αλληλογραφίας αφιερωμένη στην τεχνολογία Java και συνεχίστε! (Κάθε εταιρεία με την οποία έχω συνεργαστεί έχει αυτές τις λίστες, οι περισσότερες από τις οποίες υποστηρίζουν τη ζωή λόγω αδράνειας.) Μάθετε από τους ομότιμους προγραμματιστές σας - είναι ο καλύτερος πόρος σας.

Σημειώσεις:

Εάν εσείς ή άλλα μέλη της ομάδας σας δεν καταλαβαίνετε τη γλώσσα προγραμματισμού και την πλατφόρμα, πώς μπορείτε να ελπίζετε να δημιουργήσετε μια επιτυχημένη εταιρική εφαρμογή Java; Ισχυροί προγραμματιστές Java οδηγούν στο EJB και το J2EE σαν πάπιες στο νερό. Αντιθέτως, φτωχοί ή άπειροι προγραμματιστές θα κατασκευάσουν εφαρμογές J2EE κακής ποιότητας.

Περιγραφή: Δεν καταλαβαίνω το EJB

Φάση έργου:

Σχέδιο

Οι φάσεις του έργου επηρεάστηκαν:

Ανάπτυξη, Σταθεροποίηση

Τα χαρακτηριστικά του συστήματος επηρεάζονται:

Συντήρηση

Συμπτώματα:

  • EJB που λειτουργούν όταν κληθούν για πρώτη φορά, αλλά ποτέ μετά (ειδικά ανιθαγενείς κόκκοι συνεδρίας που επιστρέφονται στην έτοιμη δεξαμενή)
  • Μη επαναχρησιμοποιήσιμα EJB
  • Δεν γνωρίζω τι είναι υπεύθυνος ο προγραμματιστής, σε σύγκριση με αυτό που παρέχει το κοντέινερ
  • EJB που δεν αντιστοιχούν στις προδιαγραφές (νήματα πυρκαγιάς, φόρτωση εγγενών βιβλιοθηκών, απόπειρα εκτέλεσης I / O κ.ο.κ.)

Λύση:

Για να βελτιώσετε τις γνώσεις σας στο EJB, πάρτε ένα σαββατοκύριακο και διαβάστε τις προδιαγραφές EJB (η έκδοση 1.1 έχει μήκος 314 σελίδες). Στη συνέχεια, διαβάστε την προδιαγραφή 2.0 (524 σελίδες!) Για να πάρετε μια αίσθηση για αυτό που η προδιαγραφή 1.1 δεν αντιμετώπισε και πού θα σας οδηγήσει η προδιαγραφή 2.0. Επικεντρωθείτε στα μέρη της προδιαγραφής που σας λένε, τον προγραμματιστή της εφαρμογής, ποιες είναι οι νομικές ενέργειες σε ένα EJB. Οι ενότητες 18.1 και 18.2 είναι καλά μέρη για να ξεκινήσετε.

Σημειώσεις:

Μην κοιτάτε τον κόσμο του EJB από τα μάτια του προμηθευτή σας. Βεβαιωθείτε ότι γνωρίζετε τη διαφορά μεταξύ των προδιαγραφών που υποστηρίζουν το μοντέλο EJB και μιας συγκεκριμένης εφαρμογής. Αυτό θα διασφαλίσει επίσης ότι μπορείτε να μεταφέρετε τις δεξιότητές σας σε άλλους προμηθευτές (ή εκδόσεις) όπως απαιτείται.

Περιγραφή: Δεν καταλαβαίνω το J2EE

Φάση έργου:

Σχέδιο

Οι φάσεις του έργου επηρεάστηκαν:

Ανάπτυξη

Τα χαρακτηριστικά του συστήματος επηρεάζονται:

Συντήρηση, επεκτασιμότητα, απόδοση

Συμπτώματα:

  • Ο σχεδιασμός "Όλα είναι ένα EJB"
  • Μη αυτόματη διαχείριση συναλλαγών αντί να χρησιμοποιήσετε τους μηχανισμούς που παρέχονται από το κοντέινερ
  • Προσαρμοσμένες εφαρμογές ασφαλείας - η πλατφόρμα J2EE έχει πιθανώς την πιο ολοκληρωμένη και ολοκληρωμένη αρχιτεκτονική ασφάλειας στον υπολογιστικό υπολογιστή, από την παρουσίαση έως το πίσω μέρος. σπάνια χρησιμοποιείται στις πλήρεις δυνατότητές του

Λύση:

Μάθετε τα βασικά στοιχεία του J2EE και ποια πλεονεκτήματα και μειονεκτήματα φέρνει στο τραπέζι κάθε στοιχείο. Καλύψτε κάθε υπηρεσία με τη σειρά. η γνώση ισούται με τη δύναμη εδώ.

Σημειώσεις:

Μόνο η γνώση μπορεί να διορθώσει αυτά τα προβλήματα. Οι καλοί προγραμματιστές Java κάνουν καλούς προγραμματιστές EJB, οι οποίοι με τη σειρά τους είναι ιδανικά τοποθετημένοι για να γίνουν γκουρού J2EE. Όσο περισσότερες γνώσεις Java και J2EE έχετε, τόσο καλύτερα θα είστε στο σχεδιασμό και την υλοποίηση. Τα πράγματα θα αρχίσουν να ισχύουν για εσάς κατά το σχεδιασμό.

Κίνδυνος 2: Υπερβολική μηχανική (σε EJB ή όχι σε EJB)

Φάση έργου:

Σχέδιο

Οι φάσεις του έργου επηρεάστηκαν:

Ανάπτυξη

Τα χαρακτηριστικά του συστήματος επηρεάζονται:

Συντήρηση, επεκτασιμότητα, απόδοση

Συμπτώματα:

  • Υπερμεγέθη EJB
  • Προγραμματιστές που δεν μπορούν να εξηγήσουν τι κάνουν τα EJB τους και τις σχέσεις μεταξύ τους
  • Μη επαναχρησιμοποιήσιμα EJB, στοιχεία ή υπηρεσίες, όταν πρέπει να είναι
  • Τα EJB ξεκινούν νέες συναλλαγές όταν πραγματοποιείται μια υπάρχουσα συναλλαγή
  • Τα επίπεδα απομόνωσης δεδομένων έχουν οριστεί πολύ υψηλά (σε μια προσπάθεια να είναι ασφαλή)

Λύση:

Η λύση για υπερ-μηχανική προέρχεται απευθείας από τη μεθοδολογία ακραίου προγραμματισμού (XP): σχεδιάστε και κωδικοποιήστε το ελάχιστο για να ικανοποιήσετε τις απαιτήσεις από το scoping, τίποτα περισσότερο. Ενώ πρέπει να γνωρίζετε τις μελλοντικές απαιτήσεις, για παράδειγμα μελλοντικές απαιτήσεις μέσου φορτίου ή συμπεριφορά του συστήματος σε ώρες αιχμής φόρτωσης, μην προσπαθήσετε να μαντέψετε δεύτερα πώς θα πρέπει να μοιάζει το σύστημα στο μέλλον. Επιπλέον, η πλατφόρμα J2EE ορίζει χαρακτηριστικά όπως η επεκτασιμότητα και το failover ως εργασίες που πρέπει να χειριστεί η υποδομή του διακομιστή για εσάς.

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

Σημειώσεις:

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

Σπίτι

διεπαφή κάθε EJB είναι ένα παράδειγμα ενός μοτίβου Finder and Factory. Η απομακρυσμένη διεπαφή ενός EJB ενεργεί ως διακομιστής μεσολάβησης για την πραγματική εφαρμογή των φασολιών και είναι κεντρικής σημασίας για τη δυνατότητα του κοντέινερ να παρακολουθεί κλήσεις και να παρέχει υπηρεσίες όπως διαφανή εξισορρόπηση φορτίου. Αγνοήστε την αξία των σχεδίων σχεδίασης σε κίνδυνο.

Ένας άλλος κίνδυνος που προειδοποιώ συνεχώς: χρήση του EJB για χάρη του. Όχι μόνο ορισμένα μέρη της εφαρμογής σας μπορούν να μοντελοποιηθούν ως EJB όταν δεν θα έπρεπε να είναι, δικά σας ολόκληρος Η εφαρμογή ενδέχεται να χρησιμοποιεί EJBs χωρίς μετρήσιμο κέρδος. Αυτή η υπερ-μηχανική έχει φτάσει στα άκρα, αλλά έχω δει απόλυτα καλή servlet και οι εφαρμογές JavaBean διαχωρίζονται, επανασχεδιάζονται και υλοποιούνται χρησιμοποιώντας EJBs χωρίς καλούς τεχνικούς λόγους.

Κίνδυνος 3: Χωρίς διαχωρισμό λογικής παρουσίασης από επιχειρηματική λογική

Φάση έργου:

Σχέδιο

Οι φάσεις του έργου επηρεάστηκαν:

Ανάπτυξη

Τα χαρακτηριστικά του συστήματος επηρεάζονται:

Συντηρησιμότητα, επεκτασιμότητα, απόδοση

Συμπτώματα:

  • Μεγάλα και δυσκίνητα JSP
  • Μπορείτε να επεξεργάζεστε JSP όταν αλλάζει η λογική της επιχείρησης
  • Μια αλλαγή στις απαιτήσεις εμφάνισης σάς αναγκάζει να επεξεργαστείτε και να αναδιατάξετε τα EJB και άλλα στοιχεία backend

Λύση:

Η πλατφόρμα J2EE σάς δίνει την ευκαιρία να διαχωρίσετε τη λογική παρουσίασης από την πλοήγηση και τον έλεγχο, και τέλος από την επιχειρηματική λογική. Ονομάζεται αρχιτεκτονική Μοντέλο 2 (βλ. Πόροι για ένα καλό άρθρο). Εάν έχετε ήδη πέσει σε αυτήν την παγίδα, απαιτείται μια αυστηρή δόση αναπαράστασης. Πρέπει τουλάχιστον να έχετε λεπτές κάθετες φέτες που είναι ως επί το πλείστον αυτοτελείς (δηλαδή, πώς παραγγέλνω ένα widget είναι ένα ξεχωριστό κομμάτι από τον τρόπο αλλαγής του ονόματος χρήστη ή του κωδικού πρόσβασης). Χρησιμοποιήστε αυτήν την σιωπηρή οργάνωση του συστήματός σας για να αναπαράγετε σταδιακά.

Σημειώσεις:

Η χρήση ενός σταθερού σχεδιασμού σε συνδυασμό με ένα πλαίσιο διεπαφής χρήστη (για παράδειγμα taglibs) θα σας βοηθήσει να διασφαλίσετε ότι αποφεύγετε προβλήματα λογικού διαχωρισμού στο έργο σας. Μην ενοχλείτε να δημιουργήσετε ένα άλλο πλαίσιο GUI για τις δικές σας ανάγκες, υπάρχουν πάρα πολλές καλές εφαρμογές εύκολα διαθέσιμες. Αξιολογήστε με τη σειρά σας και υιοθετήστε το πλαίσιο που ταιριάζει καλύτερα στις ανάγκες σας.

Κίνδυνος 4: Δεν αναπτύσσεται όπου αναπτύσσεται

Φάση έργου:

Ανάπτυξη

Οι φάσεις του έργου επηρεάστηκαν:

Σταθεροποίηση, παράλληλη, ζωντανή

Τα χαρακτηριστικά του συστήματος επηρεάζονται:

Η λογική σου

Συμπτώματα:

  • Πολλαπλές ή εβδομαδιαίες μεταβάσεις σε ζωντανά συστήματα
  • Ο κίνδυνος που ενέχει η ζωντανή μετάδοση είναι σημαντικός, με πολλά άγνωστα και μεγάλα σενάρια χρήσης να μην έχουν δοκιμαστεί
  • Τα δεδομένα σε ζωντανά συστήματα δεν είναι τα ίδια με τα δεδομένα σε ρυθμίσεις ανάπτυξης ή σταθεροποίησης
  • Αδυναμία εκτέλεσης βασίζεται σε μηχανήματα προγραμματιστή
  • Η συμπεριφορά εφαρμογής δεν είναι η ίδια στα περιβάλλοντα ανάπτυξης, σταθεροποίησης και παραγωγής

Λύση:

Η λύση στο Danger 4 ξεκινά με την αντιγραφή του περιβάλλοντος παραγωγής πιστά στο αναπτυξιακό σας περιβάλλον. Αναπτύξτε με την ίδια ακριβώς ρύθμιση με αυτήν στην οποία σκοπεύετε να μεταβείτε ζωντανά - μην αναπτύξετε το JDK 1.3 και το Red Hat Linux όταν σκοπεύετε να μεταβείτε ζωντανά στα JDK 1.2.2 και Solaris 7. Επιπλέον, μην αναπτύξετε σε έναν διακομιστή εφαρμογών και μεταδοθείτε ζωντανά σε έναν άλλο. Επίσης, λάβετε ένα στιγμιότυπο δεδομένων από τη βάση δεδομένων παραγωγής και χρησιμοποιήστε το για δοκιμές, μην βασίζεστε σε τεχνητά δημιουργημένα δεδομένα. Εάν τα δεδομένα παραγωγής είναι ευαίσθητα, απευαισθητοποιήστε τα και φορτώστε τα. Τα μη αναμενόμενα δεδομένα παραγωγής θα σπάσουν:

  • Κανόνες επικύρωσης δεδομένων
  • Δοκιμασμένη συμπεριφορά συστήματος
  • Συμβάσεις μεταξύ στοιχείων του συστήματος (ειδικότερα βάση δεδομένων EJB-EJB και EJB)

Το χειρότερο από όλα, καθένα από αυτά θα έχει ως αποτέλεσμα εξαιρέσεις, μηδενικούς δείκτες και συμπεριφορά που δεν έχετε ξαναδεί.

Σημειώσεις:

Οι προγραμματιστές αφήνουν συχνά την ασφάλεια μέχρι τη σταθεροποίηση ("Ναι, οι οθόνες λειτουργούν, τώρα ας προσθέσουμε τα στοιχεία επικύρωσης χρήστη."). Αποφύγετε αυτήν την παγίδα αφιερώνοντας το ίδιο χρονικό διάστημα στην εφαρμογή της ασφάλειας που κάνετε στην επιχειρηματική λογική.

$config[zx-auto] not found$config[zx-overlay] not found