ASP.NET Dynamic Data

Post on 06-Feb-2016

82 views 0 download

description

Jakub Binkowski. ASP.NET Dynamic Data. Jakub Binkowski Visual C# MVP Webstruments.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, - PowerPoint PPT Presentation

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ę