Domain Driven Design
Οπως είπε παραπάνω ο φίλος μας Underwater
Separation Of Concern και άρα
Persistence Ignorance (decoupled from any specific persistence technology)
POCO Plain Old CLR OBjects (Δεν κάνει κανένα Reference σε συγκεκριμένο assembly πχ. System.Data , System.Data.Entity)
Active Record
To active record δεν είναι Persistence Ignorant ακριβώς το αντίθετο, περιέχει το DataAccess
εσωτερικα ως μέρος της λειτουργίας του aggregate root.
Πχ. var order= order.Load(123);
Το μόνο κοινό που έχει το active Record με το Self-Tracking Entities
είναι ότι και τα δύο έχουν κάποιο μηχανισμό για να κρατάνε το State
για κάθε Child object και του aggregate root.
Σύγκριση
Active Record | Self Tracking Entities
-----------------------------------------------------------------------------------
Persistence Ignorance ΟΧΙ ΝΑΙ
specific persistence technology ΝΑΙ ΟΧΙ
Testable OXI ΝΑΙ
Partially Loaded OXI NAI
H τεχνολογία Self Tracking Entities φτιάχτηκε μετά από αιτήματα προγραμματιστών για υποστήριξη σε
distributed objects.
Ένα παράδειγμα είναι η μεταφορά μέσω WCF Service στον client.
DataBindings
Τα Self Tracking Entities κάνουν implement to INotifyPropertyChanging και το INotifyPropertyChanged.
Τα collections κληρονομούν από το TrackableCollection που κάνει derive από το ObservableCollection.
Αυτά είναι αρκετά για να λειτουργήσουν τα DataBindings se WPF, Silverlight, ASP .NET WebForms, ASP .NET MVC.
To μόνο πρόβλημα που προκείπτει είναι με τα Winforms που για τα Databindings σε Collection κάνουν χρήση του
event ListChangedEventHandler ListChanged;
H microsoft αποφάσισε να αλλάξει τον τρόπο που κάνει notifications σε αλλαγές στα Collections και έτσι υπάρχει πρόβλημα
με τα databindings σε WinForms.
Κάνοντας όμως χρήση του BindingSource μπορούμε με κάποια WorkAround να λειτουργήσουμε κανονικά πχ. μετά από διαγραφή στο collection
τρέχουμε το BindingSource.ResetBindings();
Θα μπορούσαμε να κάνουμε και implement to IBindingList στα TrackableCollection και να επιστρέφουμε ένα BindingList αντί για ObservableCollection.
Αν κάποιος περιμένει λίγο καιρό θα είναι διαθέσιμο στην επόμενη έκδοση. Η λειτουργία είναι ήδη διαθέσιμη στο Entity Framework CTP5.
Extensibility
Όπως γνωρίζουμε τα Self Tracking Entities γίνονται generated από ένα T4 template που μας δίνει την δυνατότητα να αλλάξουμε αρκετά την δομή
των οντωτήτων που παράγονται.
Μπορούμε να φτιάξουμε Partial Class και να προσθέσουμε κώδικα που δεν μπορεί να γίνει generated από το template.
Μπορούμε να κάνουμε implement to IDataErrorInfo και να παρέχουμε Validation Rules.
Μπορούμε να κάνουμε implement to ΙEditableObject για να κάνουμε Rollback Changes (Λίγο προσοχή στο changeTracking)
Αρχές του 2010 πήρα τον ρίσκο να αναπτύξω μια εφαρμογή ασύρματης παραγγελιοληψίας (Εστίαση)
Η εφαρμογή περιέχει πλήρη εμπορική διαχ. έχει δυναμική παραγωγή για τις αναλώσεις των ειδών.
Συγχρονίζει τα δεδομένα μεταξύ Υποκαταστημάτων και κεντρικού και με άλλα ERP της αγοράς.
Τα προβλήματα που αντιμετώπισα ήταν ελάχιστα.
Συστήνω τα Self Tracking Entities ανεπιφύλακτα, το μόνο πρόβλημα δεν υπάρχει αρκετό Documentation.
Μπλουγουράς Γιάννης
Wizcom O.E.