ASP.NET Dynamic Data
description
Transcript of ASP.NET Dynamic Data
![Page 1: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/1.jpg)
ASP.NET Dynamic DataJakub Binkowski
Jakub BinkowskiVisual C# MVPWebstruments.pl / webEFS
![Page 2: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/2.jpg)
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.
![Page 3: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/3.jpg)
Podstawowe zastosowaniaCzym jest ASP.NET Dynamic Data? Pierwsza dynamiczna aplikacja.
![Page 4: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/4.jpg)
Scaffolding
ASP.NET Dynamic Data tworzy rusztowanie (ang.
scaffolding) dla aplikacji.
![Page 5: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/5.jpg)
DEMOPierwsza aplikacja
![Page 6: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/6.jpg)
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
![Page 7: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/7.jpg)
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
![Page 8: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/8.jpg)
Dostosowywanie DD:Zmiana zachowaniaRozszerzanie metadanych
![Page 9: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/9.jpg)
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
![Page 10: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/10.jpg)
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
![Page 11: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/11.jpg)
DEMOOgraniczenie widoczności
![Page 12: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/12.jpg)
[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;
![Page 13: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/13.jpg)
DisplayFormat
[DisplayFormat( DataFormatString="{0:C}", ApplyFormatInEditMode=false, ConvertEmptyStringToNull=true, HtmlEncode=true, NullDisplayText="wycofano ze sprzedaży")]public decimal StandardCost;
![Page 14: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/14.jpg)
[DisplayColumn]
[DisplayColumn("Name", "ProductNumber")]partial class Product{}
Wyświetlana kolumna
Kolumna, po której następuje sortowanie
![Page 15: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/15.jpg)
[DataType]
[DataType(DataType.MultilineText)]public string Comments;
Custom DateTime Date Time Duration PhoneNumber Currency Text Html MultilineText EmailAddress Password Url ImageUrl
![Page 16: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/16.jpg)
[EnumDataType]
public class Review{ [EnumDataType(typeof(Rating))] public int Rating;} public enum Rating{ Good = 5, Fine = 4, Average = 3, Bad = 2, Terrible = 1}
![Page 17: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/17.jpg)
DEMOWizualizacja danych
![Page 18: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/18.jpg)
Walidacja
Atrybuty walidacyjne: [CustomValidation] [Range] [RegularExpression] [Required] [StringLength] [EnumDataType] własny atrybut
![Page 19: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/19.jpg)
DEMOWalidacja
![Page 20: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/20.jpg)
Dostosowywanie DD:Zmiana wyglądu
![Page 21: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/21.jpg)
Struktura aplikacji
FieldTemplatesszablony prezentacji i edycji właściwości
EntityTemplatesszablony Show/Edit/Insert dla encji
PageTemplatesszablony stron
Filtersfiltry do przeszukiwania
![Page 22: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/22.jpg)
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;
![Page 23: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/23.jpg)
DEMOFieldTemplates
![Page 24: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/24.jpg)
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”
![Page 25: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/25.jpg)
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
![Page 26: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/26.jpg)
DEMOEntityTemplates i CustomPages
![Page 27: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/27.jpg)
FiltersWłasne filtry
UI dla przeszukiwania listy – filtrów
Folder Filters: Nazwa.ascx
Użycie filtru:[Display(AutoGenerateFilter=true)]
[FilterUIHint("Text")]
public string Name;
![Page 28: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/28.jpg)
DEMOFilters
![Page 29: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/29.jpg)
Architektura Dynamic DataCzyli jak to działa?
![Page 30: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/30.jpg)
Jak to możliwe?
http://server/Products/List.aspx
![Page 31: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/31.jpg)
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
![Page 32: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/32.jpg)
2) Routing
routes.Add(new DynamicDataRoute("{table}/{action}.aspx")
{ Constraints = new RouteValueDictionary( new { action = "List|Details|Edit|
Insert" }), Model = DefaultModel});
![Page 33: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/33.jpg)
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?
![Page 34: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/34.jpg)
DEMODziałanie Dynamic Data
![Page 35: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/35.jpg)
Podsumowanie
![Page 36: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/36.jpg)
Zalety
Gotowa aplikacja w mniej niż minutę Automatyczna aktualizacji UI po
zmianach Szerokie możliwości dostosowywania Ciekawa architektura
![Page 37: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/37.jpg)
Wady
Testowalność Spłaszczenie architektury aplikacji Pełne wsparcie tylko dla:
LINQ to SQL Entity Framework
![Page 38: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/38.jpg)
Czy w idealnej architekturze jest miejsce na Dynamic Data?
Nie.
Ale czy ktoś widział kiedyś idealną architekturę?
![Page 39: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/39.jpg)
Zastosowania
Prototypowanie
Szybkie udostępnienie wersji 0.1
Panel administracyjny
![Page 40: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/40.jpg)
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?
![Page 41: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/41.jpg)
Czy mamy jeszcze czas?
![Page 42: ASP.NET Dynamic Data](https://reader033.fdocuments.net/reader033/viewer/2022050722/56815aa5550346895dc83889/html5/thumbnails/42.jpg)
Dziękuję za uwagę