Πώς φτάνω στα data; – Πώς κάνω debugging; – Πώς χειρίζομαι το security; – Πώς χειρίζομαι το validation; – Πώς θα υποστηρίζει πολλαπλές γλώσσες; – Πώς θα συνεργαστώ με τον designer;
για DAL – Απλοποιημένη update λογική με STEs – Τα βλέπω και στον client • Data access μέσω hand-made WCF service – Πρέπει να γράψω όλες τις μεθόδους – Στην πορεία, γίνεται περίπλοκος ο χειρισμός του γράφου – Δυσκολία στην υλοποίηση transactions
να γράψω αρκετό κώδικα. Γίνεται αλλά: – Θα πρέπει να είναι καλογραμμένος κώδικας – Πιθανώς θα υπάρχει και στον client και στον server – Be trendy – Υποστήριξε την τελευταία μόδα του INotifyDataErrorInfo
νέο interface INotifyDataErrorInfo • To IDataErrorInfo έχει προβλήματα – Επιστρέφει μόνο ένα error ανά object τύπου string – Επιστρέφει μόνο ένα error ανά property – Είναι μόνο reactive – Δεν είναι ασύγχρονο Databinding usage ValidatesOnExceptions Setters με exceptions ValidatesOnDataErrors IDataErrorInfo ValidatesOnNotifyDataError s (default true) INotifyDataErrorInfo NotifyOnValidationError INotifyDataErrorInfo async BindingValidationError event
δεν υποστηρίζει WS-HTTP binding – Είναι δική μας ευθύνη να: – Χρησιμοποιήσουμε SSL για να προστατέψουμε τα data – Να υλοποιήσουμε μηχανισμό authorization & authentication – Ευτυχώς που μπορώ να χρησιμοποιήσω το ASP.NET Membership εύκολα!
– Πολλές φορές δεν είναι περιγραφικά – “Element is already a child of another element” – “The remote server returned an error: NotFound ” – Debugging στο Expression Blend – Μάθε το Fiddler!
H ευκολία/δυσκολία εξαρτάται από τις απαιτήσεις – Πχ δυνατότητα εναλλαγής γλωσσών – Η χρήση RESX είναι μια καλή επιλογή, αλλά: – Ο κώδικας που παράγει το custom tool έχει πρόβλημα – Η όλα-στο-ίδιο-τσουβάλι λογική δεν είναι κατάλληλη για το Silverlight – Και να ήταν μόνο αυτά…
– Χρειάζομαι designer; – Ναι, υπάρχει κακός XAML κώδικας! – Το code-behind μοντέλο δεν είναι ευέλικτο – Άλλο το theme και άλλο το skin – Μειώνεται το “Blendability” της εφαρμογής
IQueryable<Album> SearchAlbums (string) void AddAlbum(Album) Validation and authorization rules, Application workflows, … Data Model class Album DomainContext Stateful view + Bindable Data class AlbumDomainService EntityList<Albumt> Albumss { get } EntityQuery<Restaurant> GetAlbumstQuery() EntityQuery<Restaurant> SearcAlbumsQuery(string) class Album Data members + Validation Data Model + Metadata + Shared Code Rich Internet Application DB Service s Data Access Layer App Logic Presentati on Logic Networ k Domain Contex t Data Servic e Under the covers infrastructure Σημείωση: Το slide εκλάπη από τον Mike Taulty που το έκλεψε από τον Brad Τα WCF RIA Services σε 10’
Visual Studio 2010 • RIA Services Toolkit – Endpoints – ASP.NET Support – Client tools for proxies • Domain Services – DAL agnostic • For free: – Domain context – Change tracking, paging, sorting, filtering of entities – Service & Entity level validation – Shared code – Membership & Authentication support Που είναι ο λάκκος; • magic code generation • Αόρατα services • Κάντο όπως το θέλουν
Οθόνες Model (πχ MusicStoreModel/Album) Τα data μου ViewModel (properties: data & commands) Ενώνει το Model με το View To ViewModel είναι το DataContext του View To View κάνει bind στα properties XAML που αρέσει στους designers, οπότε σχεδιάζουν εύκολα τα views Είναι testable γιατί μπορεί να γίνει mocked Κώδικας που δεν τεστάρεται εύκολα γι αυτό τον ελαχιστοποιούμε
workflow Designer - Developer • Unit Testing • Ευκολότερη συντήρηση του κώδικα • Blendable εφαρμογές Που είναι ο λάκκος; • Μεγαλύτερο overhead στην ανάπτυξη του κώδικα • Απαιτεί coding skills • Δεν είναι πανάκεια • Το φτιάχνεις μόνος σου • Χρησιμοποιείς έτοιμες βιβλιοθήκες – MVVM Light – Ocean – Cinch
εφαρμογών από πολλαπλά components χωρίς να γνωρίζει το ένα το άλλο • PRISM – Βασίζεται στο MEF και προορίζεται για composite εφαρμογές με έμφαση στα loose coupled views • Rx / CLR Async features – Βιβλιοθήκες που βοηθούν τον ασύγχρονο προγραμματισμό
εφαρμογή μου) import (e.g DebuggerVisualizer) Part (πχ Plugin) export (e.g DebuggerVisualizer) Δηλώνει ότι χρειάζεται ένα component Δηλώνει ότι παρέχει ένα component “Dating” engine: Ψάχνει τους καταλόγους και ενώνει τους ενδιαφερόμενο Οι κατάλογοι περιέχουν ους ενδιαφερόμενους
Decoupling • Δουλεύει και στο runtime ! • Υποστηρίζει metadata για τα parts • Εύκολο lifetime management • Lazy! Που είναι ο λάκκος; • Έχει learning curve • Απαιτείται καλός σχεδιασμός • Δυσκολία στο debugging • Είναι Framework libraries – Silverlight 4 – .NET 4.0 γενικά – Για παλαιότερες εκδόσεις από codeplex • Διάφορα σενάρια – Plugins – Application partitioning – Dynamic XAP loading – Dynamic resource loading