ASP.NET Dynamic Data
description
Transcript of ASP.NET Dynamic Data
ASP.NET Dynamic DataJakub Binkowski
Jakub BinkowskiVisual C# MVPWebstruments.pl / webEFS
Cel prezentacji
Pokazać: co to jest Dynamic Data, jak zacząć pracę z DD, jak dostosować DD do własnych
potrzeb, jak rozszerzać DD, architekturę DD, miejsce DD w poważnej inżynierii
oprogramowania.
Podstawowe zastosowaniaCzym jest ASP.NET Dynamic Data? Pierwsza dynamiczna aplikacja.
Scaffolding
ASP.NET Dynamic Data tworzy rusztowanie (ang.
scaffolding) dla aplikacji.
DEMOPierwsza aplikacja
ASP.NET Dynamic Data
Generuje UI w ASP.NET na podstawie źródła danych
Wsparcie dla operacji CRUD Pełne wsparcie dla technologii:
LINQ to SQL Entity Framework
Interfejs generowany jest dynamicznie
Automatyczna walidacja na podstawie danych o polach
Możliwości dostosowywania
Zmiana zachowania: Ograniczanie widoczności do tabel i
kolumn Rozszerzanie metadanych kolumn
Zmiana UI (strony i kontrolki): Modyfikacja szablonów Specyficzne szablony dla różnych tabel Specyficzne szablony w zależności od
konfiguracji Własne strony
Dostosowywanie DD:Zmiana zachowaniaRozszerzanie metadanych
Jak dodawać metadane do modelu?
[Atrybuty] dopisywane do klas i pól encji
Ale encje L2S i EF są generowane…
Encje L2S i EF są partial - rozszerzalność
Atrybut [MetadataType] – podpięcie zewnętrznej klasy z metadanymi
Ograniczanie dostępności [ScaffoldTable]
Generowanie UI dla tabel: widoczne wszystkie, oprócz wybranych widoczne tylko wybrane
[ScaffoldColumn]Można wskazać, dla których pól będzie generowany UI
[Editable]Ograniczenie edytowalności niektórych pól
ang. scaffolding - rusztowanie
DEMOOgraniczenie widoczności
[Display]
[Display(ShortName="Nazwa", Order=1, Name="Nazwa produktu", Description="Jak się produkt nazywa?", GroupName="Opis produktu", Prompt="Podaj nazwę...", AutoGenerateField=true, AutoGenerateFilter=false)]public string Name;
DisplayFormat
[DisplayFormat( DataFormatString="{0:C}", ApplyFormatInEditMode=false, ConvertEmptyStringToNull=true, HtmlEncode=true, NullDisplayText="wycofano ze sprzedaży")]public decimal StandardCost;
[DisplayColumn]
[DisplayColumn("Name", "ProductNumber")]partial class Product{}
Wyświetlana kolumna
Kolumna, po której następuje sortowanie
[DataType]
[DataType(DataType.MultilineText)]public string Comments;
Custom DateTime Date Time Duration PhoneNumber Currency Text Html MultilineText EmailAddress Password Url ImageUrl
[EnumDataType]
public class Review{ [EnumDataType(typeof(Rating))] public int Rating;} public enum Rating{ Good = 5, Fine = 4, Average = 3, Bad = 2, Terrible = 1}
DEMOWizualizacja danych
Walidacja
Atrybuty walidacyjne: [CustomValidation] [Range] [RegularExpression] [Required] [StringLength] [EnumDataType] własny atrybut
DEMOWalidacja
Dostosowywanie DD:Zmiana wyglądu
Struktura aplikacji
FieldTemplatesszablony prezentacji i edycji właściwości
EntityTemplatesszablony Show/Edit/Insert dla encji
PageTemplatesszablony stron
Filtersfiltry do przeszukiwania
FieldTemplatesKontrolki prezentacji/edycji pola
UI dla poszczególnych kolumn
W folderze FieldTemplates: Nazwa.ascx - prezenter Nazwa_Edit.ascx - edytor
Użycie szablonu:[UIHint("Rating")]
public int Rating;
DEMOFieldTemplates
EntityTemplatesKontrolki dla encji
UI dla poszczególnych tabel
W folderze EntityTemplates: Tabela.ascx - prezentacja Tabela_Edit.ascx - edycja Tabela_Insert.ascx - dodawanie
Tabela – nazwa EntitySet’u a nie klasy (!) np. „ProductReviews”
PageTemplates i CustomPagesSzablony widoków
UI dla poszczególnych widoków
Domyślne szablony w PageTemplates: Widok.aspx
(List, Details, Insert, Edit, …)
Szczegółowe szablony dla tabel w:CustomPages/Tabela/*.aspxgdzie Tabela – nazwa EntitySet’u
DEMOEntityTemplates i CustomPages
FiltersWłasne filtry
UI dla przeszukiwania listy – filtrów
Folder Filters: Nazwa.ascx
Użycie filtru:[Display(AutoGenerateFilter=true)]
[FilterUIHint("Text")]
public string Name;
DEMOFilters
Architektura Dynamic DataCzyli jak to działa?
Jak to możliwe?
http://server/Products/List.aspx
1) Baza, model, metamodel
Baza danych
Metamodel
Product (Production)ProductID
Name
ProductNumber
MakeFlag
FinishedGoodsFlag
Color
SafetyStockLevel
ReorderPoint
StandardCost
ListPrice
Size
ProductCategory (Production)ProductCategoryID
Name
rowguid
ModifiedDate
ProductSubcategory (Production)ProductSubcategoryID
ProductCategoryID
Name
rowguid
ModifiedDate
Model danych
DataModelProvider
2) Routing
routes.Add(new DynamicDataRoute("{table}/{action}.aspx")
{ Constraints = new RouteValueDictionary( new { action = "List|Details|Edit|
Insert" }), Model = DefaultModel});
Zadania Dynamic Data
Przechowywanie metadanych Określenie tabeli i akcji
(parametry z routingu)Załadowanie odpowiedniej strony
Dynamic Data nie odpowiada za operacje na danych (pobieranie, modyfikacje, itp.)...A jeśli nie DD, to kto?
DEMODziałanie Dynamic Data
Podsumowanie
Zalety
Gotowa aplikacja w mniej niż minutę Automatyczna aktualizacji UI po
zmianach Szerokie możliwości dostosowywania Ciekawa architektura
Wady
Testowalność Spłaszczenie architektury aplikacji Pełne wsparcie tylko dla:
LINQ to SQL Entity Framework
Czy w idealnej architekturze jest miejsce na Dynamic Data?
Nie.
Ale czy ktoś widział kiedyś idealną architekturę?
Zastosowania
Prototypowanie
Szybkie udostępnienie wersji 0.1
Panel administracyjny
Cel prezentacji
Czy udało mi się pokazać: co to jest Dynamic Data, jak zacząć pracę z DD, jak dostosować DD do własnych
potrzeb, jak rozszerzać DD, architekturę DD, miejsce DD w poważnej inżynierii
oprogramowania?
Czy mamy jeszcze czas?
Dziękuję za uwagę