Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Μπορει καποιος με απλα Ελληνικα να μου εξηγησει τι σημαινουν  οι εννοιες Business logic, domain model, Data Mappers,  Services.

Ρωταω διοτι προσπαθω να μαθω mvc (με PHP), και πεφτω συχνα στις παραπανω εννοεις. Googlara και μου λυθηκαν καποιες βασικες αποριες, απλα ρωταω εδω για να εχω μια καλυτερη εικονα. 

Επεξ/σία από dios231
Δημοσ.

Business Logic

 

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

Π.χ. ένας φοιτητής για να γραφτεί στο Χ μάθημα πρέπει να είναι εγγεγραμένος στη Ψ σχολή/πτυχίο, να έχει πάρει τα Ζ προαπαιτούμενα και να μην έχει πάνω απο 4 φοιτητές.

 

Domain Model

Είναι οι λογικές οντότητες που αναφέραμε παραπάνω οι οποίες περιγράφουν τα δεδομένα που υπάρχουν στο σύστημά σου και τους συσχετισμούς μεταξύ τους, π.χ Many Students have Many Courses, Many Courses have Many Students. Πάμε φοιτητές και μαθήματα πάλι όπου περιγράφουμε τα πεδία τους, ότι έχουν μια Many-to-Many σχέση μεταξύ τους και μια Many-To-One με το πρόγραμμα στο οποίο ανήκουν:

public class Student {
    long id;
    String name;
    Program program;
    List<Course> courses;
}

public class Course {
    long id;
    String code;
    String description;
    Program program;
    List<Student> students;
}

Έτσι λοιπόν δίνουμε στην εφαρμογή μας την περιγραφή των δεδομένων που θα χρησιμοποίησουμε.

 

Data Mappers

Στην εφαρμογή σου πιθανότατα θα χρειαστεί να κάνεις μεταφορά δεδομένων. Π.χ. να τα μετατρέψεις σε HMTL, JSON, XML για να τα μεταφέρεις σε κάποιον client όπως να τα παρουσιάσεις σε μια ιστοσελίδα, ένα mobile phone client etc. Αντίστοιχα μπορεί να λάβεις δεδομένα απο αυτούς τους Client, π.χ την υποβολή μιας φόρμας. Ο Data Mapper αναλαμβάνει να μετατρέψει (Serialize) τα Domain Model σου σε μια μορφή η οποία μπορεί να χρησιμοποιηθεί απο τους clients, η αντίστοιχα να μετατρέψει τα δεδομένα που σου στέλνει ο client (De-Serialize) απο JSON, HTML, XML, etc σε Domain Model.

Αντίστοιχα δε υπάρχουν Data Mappers που μετατρέπουν δεδομένα που ζητάς απο μια Βάση Δεδομένων, τα οποία έρχονται σε μορφή πινάκων, σε Domain Model και φυσικά το αντίστροφο, όταν θέλεις να σώσεις ένα Domain Model στη βάση.

 

Services

Τα Services είναι η υλοποίηση του Business Logic στην εφαρμογή σου. Έχω π.χ. ένα Service το οποίο διαχειρίζεται την δημιουργία φοιτητών στο σύστημα. Δημιουργεί μια καταχώρηση, την επεξεργάζεται ή την σβήνει. Άλλο Service είναι η δημιουργία μαθημάτων. Άλλο Service είναι η εγγραφή φοιτητών σε μαθήματα  etc.

 

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

  • Like 1
Δημοσ.

Ως data mapper θα μπορουσαμε να θεωρησουμε μια class η οποια αλληλεπιδρα με μια βαση και εξαξει/εισαγει data?
Και ως service τις μεθοδους ενος domain model?

Δημοσ.

Ως data mapper θα μπορουσαμε να θεωρησουμε μια class η οποια αλληλεπιδρα με μια βαση και εξαξει/εισαγει data?

 

 

Όχι αυτό θα ήταν ένα Service. Το Service ζητάει πράγματα απο τη βάση, η εισάγει data. Το Service μπορεί να χρησιμοποιήσει ένα Data Mapper να μετατρέψει αυτά που έρχονται απο την βάση σε Domain Model για να τα διαχειριστεί καλύτερα. Το Data Mapper το μόνο που κάνει είναι να μετατρέπει μια μορφή δεδομένων σε μια άλλη.

 

Να υπογραμμίσω ότι  σε αυτά τα services αναφερόμαστε συνήθως ώς DAO = Data Access Objects, ενώ όταν λέμε Services συνήθως εννούμε ένα Layer πιό πάνω, αφού έχουμε κάνει το Data Mapping και πλέον διαχειριζόμαστε το Business Logic.

 

Ένας Data Mapper μπορεί να βρίσκεται και  στο Layer του Controller του οποίου δουλειά θα ήταν να μετατρέχει ένα JSON που λαμβάνει απο ένα HTTP Request σε Domain Model έτσι ώστε μετά το Service να κάνει το Business Logic και μετά να χρησιμοποιήσει άλλον Mapper ο οποίος π.χ. θα δημιουργήσει ένα SQL Insert statement απο το Domain Model για να κάνει τις αλλαγές στη βάση.

 

Π.χ. To DAO κάτω απλά φέρνει Students απο τη Βάση. To DAO θα χρησιμοποιήσει έναν Data Mapper αφού εκτελέση την εντολή "select * from Students" για να μετατρέψει αυτό που βρήκε σε List<Student>.

 

Βλέπεις ότι το Service μας αφού πεί στο DAO "φερε μου ότι έφερες απο τη βάση", του κάνει και μια μικρή επεξεργασία (π.χ. το φιλτράρει.)

public class StudentService {

     StudentDao studentDao;

     public List<Student> findAllStudents(List<String> queryParamters) {
         //do some business logic
         List<Student> students = studendDao.findAllStudents();
         //now filter the retrieved students
         List<Student> filteredStudents = filterStudents(students, queryParameters);
         return filteredStudents;
     }

}
Δημοσ.

Η τελευταια σου απαντηση μου ξεκαθαρισε πολλα πραματα. Και κατι τελευταιο και θα προσπαθησω να γινω οσο πιο κατανοητος μπορω, στην MVC το model με το view εχουν απευθειaς αλληλεπιδραση ή τα παντα γινοντε μεσω του controller? Για παραδειγμα αν εχουμε μια νεα εισαγωγη στην βαση, αυτο σημαινει πως το model ειδοποιει κατευθειαν το view η πρωτα  στελνει τα δεδομενα στον controller και αυτος με την σειρα του τα στελνει στο view? 

Δημοσ.

Επειδή εγώ είμαι λίγο απο Javaworld μια επισήμανση. Στη PHP το Data Mapper έχει και την έννοια του Active Domain Model που λέμε εμείς (το οποίο δεν χρησιμοποιούμε συχνά). Δηλαδή κάνει και την δουλειά του DAO. Οπότε είναι DAO + Domain model 2 σε 1 και σε αυτή τη περίπτωση το Data Mapper θα έχει και αλληλεπίδραση με την βάση. Οπότε σε αυτό που ρώτησες παραπάνω η απάντηση είναι και ναι.

 

Τώρα στο MVC το View έχει πάντα αλλελεπίδραση με οτιδήποτε άλλο μέσω του Controller. Δουλειά του Controller είναι να "ακούει" για requests, να χρησιμοποιεί Data Mappers για να μετατρέπει τα requests που πήρε σε Domain Model να χρησιμοποιεί ενδεχομένως ένα Service, ή απευθείας τον Data Mapper/DAO, να παίρνει πίσω τα Data που θέλει, να τα μετατρέπει πάλι με Data Mapper στην μορφή που ο client του ζήτησε (αν μπορεί) και να στέλνει πίσω την απάντηση στο View, είτε αυτό είναι ένα HTML Page, είτε είναι JSON, είτε να τον πάει σε ένα Error Page etc.

Δημοσ.

Δυστυχώς δέν ξέρω κάποιο να σου προτείνω για PHP, και πιστεύω ότι δεν έχει ιδιαίτερο νόημα να διαβάσεις κάποιο για abstract MVC architecture. Αφού έχεις επιλέξει αυτή τη τεχνολογία θα έλεγα, βρες κάποιο PHP MVC book γιατί θα σου δώσει να καταλάβει πως γίνεται η συγκεκριμένη υλοποίηση του MVC σε αυτό το Framework

Δημοσ.

Ο συγκεκριμενος στο βιντεο υλοποιει το Model σαν μια κλαση, το οποιο με βαση αυτα που εχω διαβασει ειναι λαθος. Συγκεκρημενα το Model αποτελειται απο 3 δομες το domain object, το Map Mapper και το Service εξου και οι αρχικες μου ερωτησεις.  

Δημοσ.

Παιδιά σωστά πράγματα λέγονται στο thread, αλλά υπόψη ότι αυτές οι έννοιες δεν έχουν ένα μόνο ορισμό. Οπότε TS όπου βλέπεις "το Α είναι Β" βάζεις με το μυαλό σου "το Α για παράδειγμα μπορεί να είναι Β". The devil is in the details.

Δημοσ.

Η αληθεια ειναι πως στο MVC δεν υπαρχουν ακριβως στεγανα στον τροπο που θα το υλοποιησεις. Ειναι μια γενικη ιδεα στο πως θα ξεχωρισεις το presentation layer απο το logic layer και γενικα ο πυρηνας της σκεψης του MVC ειναι το SoC. 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...