Wróciłem z dwudniowej konferencji Microsoft Technology Summit 2008. Zgodnie z oczekiwaniami konferencja była inspirująca. Momentami treść prelekcji odbiegała od tematu, albo od poziomu na jakim powinna być (była za prosta), ale ogólne wrażenie bardzo pozytywne i na pewno polecam uczestnictwo w takich eventach. Daje to doskonały pogląd gdzie należy położyć akcenty w rozwoju naszych aplikacji, jakie nowe mechanizmy mogą nam w tym pomóc. Czego i jak używać. Równocześnie nie jest prowadzeniem „za rączkę” jak na szkoleniu, więc zgłębienie tematów, które nas zainteresowały pozostaje w gestii słuchacza.
Teraz po kolei…
Refleksja ogólna
Większość prelekcji nie dotyczyła rzeczy nowych, albo takich, które nadal można nazywać nowymi, szczególnie w kontekście architektury tworzonych aplikacji w technologii .NET. Było natomiast dużo o istniejących mechanizmach, o tym jak ich dobrze używać, jak ich nie używać, jakie są Best Practices.
Z tego wprost płynie wniosek, że należy poważnie zabrać się za używanie technologii M$ (i nie tylko) w sposób częsty i skuteczny. Bo skoro ciągle w kółko mówi się np. o tym, co to jest AOP jakie jest dobre i dlaczego… Ciągle powtarza się jak używać WCFa, do czego to służy, jakie niesie konsekwencje… Nadal pokazuje się jak przyspieszać działanie aplikacji Webowych, jakie najczęściej są popełniane błędy i jakie niesie to za sobą konsekwencje… Stale mówi się o refactoringu, kontenerach DependencyInjection, Separation of Concerns i couplingu w bibliotekach, to znaczy, że ciągle:
- powtarzamy te same mechanizmy/fragmenty kodu… Tworzymy kod, a nie sens (J).
- używamy dostępnych technik nie do końca tak, jak należy.
- nasze aplikacje webowe są ciężkie i wolne
- nasz kod jest nieczytelny, niezgodny z zasadą SoC i mocno zależny od innych fragmentów, szczególnie od implementacji innych fragmentów!!!
Wydajne aplikacje ASP.NET w świecie Web 2.0 – Tymoteusz Chmielewski
- W końcu prosta definicja Web 2.0 – treść od użytkowników, zarządzanie przez społeczności itp.
- REST – wyrażanie treści logicznej przez URLe
- ASP.NET a Web 2.0:
- AJAX
- LINQ
- WCF
- WWF
Ogólnie w rozwiązaniach Web 2.0 – nie odkrywać po raz setny koła – korzystać z gotowych szablonów/rozwiązań do tworzenia for, wiki, cms, blogów – np. Community Server – takich mechanizmów nie należy pisać od zera, bo to zwyczajna strata czasu.
- Wydajność w Web 2.0
- Baza danych zawsze będzie wąskim gardłem – czasem przy dużym obciążeniu warto zastanowić się nad de normalizacją struktury w celu zwiększenia wydajności
- Logiczne partycjonowanie danych – można lokalizować dane/serwery np. zgodnie z regionami (np. zgodnie z województwami)
- Pageowanie - Różnica w wydajności jest ogromna w zależności od zastosowanych mechanizmów:
- Od strony dostępu do danych – LINQ2SQL – działa dokładnie tak jak byśmy to napisali sami na DataReader
- Od strony WWW to zależy:
- AJAX + JSON – opad szczeny jak to może być wydajne, ale na razie po stronie kodu JavaScriptowego – masakra
- AJAX (Ajax Control Toolkit) – dużo lepiej niż było to dawniej, a bardzo wygodnie z kodu
Praktyczne aspekty budowania rozwiazań klasy Enterprise z wykorzystaniem produktów Microsoft Patterns and Practices - Marcin Sieradzki
No tu się Pan niestety nie wykazał. Pogadał trochę o Enterprise Library i o samej idei M$ P&P, ale ogólnie poziom sesji bardzo niski.
.NET bez wizardów – sposoby tworzenia i dynamicznego aktywowania komponentów w aplikacjach - Bartosz Pampuch
Bartek jak zwykle wymiatał…
- Nie wiedziałem, że jest coś takiego jak otwarte typy generyczne (np. ICollection<>)
- Porównanie kontenerów do DependencyInecjtion – pokazanie co jest w którym jak realizowane, ze wskazaniem na kontener Autofac.
- Onion Architecture – o tym już czytałem akurat – polecam http://jeffreypalermo.com/blog/the-onion-architecture-part-1/
- Hawkeye – aplikacja musthave dla developera
- AOP
- Najpierw pokazał jak można różne rzeczy zrobić przy pomocy ContextBoundObject, ale to działa wolno
- Post# - Make Sense Not Code – z tym się powinniśmy jak najszybciej zaznajomić i używać.
- Jak należy korzystać z WCFa – tutaj mamy gotowy mechanizm napisany przez Szymona Pobiegę – z tego co mówił Szymon prawie dokładnie tak, jak sugerował Bartek
- Stock Trader – przykładowa aplikacja/platforma do konfiguracji, skalowania i zarządzania aplikacjami WCFowymi – tę architekturę można wykorzystać – jest udostępniona – ogólnie jest na co popatrzeć
Wybrane koncepcje architektoniczne - jak organizować rozbudowane systemy Informatyczne (oraz jak ich NIE organizować) - Tomasz Kopacz
Dużo o SOA. Ogólnie Tomek miał ostatnią sesję pierwszego dnia, ostro jechał z tematem, trochę było powtórzeń w kontekście Web 2.0 i przyspieszeń.
Nowe typy danych w SQL 2008 - Krzysztof Kozielczyk
- Typy datowe – teraz precyzja i skala tych typów ma znaczenie – uważać przy indeks seekability – przy użyciu w klauzuli np. WHERE daty o precyzji 7 niekoniecznie QO może skorzystać z indeksu zbudowanego dla kolumny datowej o precyzji 3.
- DateTimeOffset – działa na UTC, przechowuje informacje również o strefie czasowej:
- Indeksy, agregacje, sortowanie – na czasie UTC
- Cast/Convert – na wartości lokalnej
- Do nowych typów datowych (np. DATETIME2) nie można już dodawać wartości integer
- Uwaga: Proces .NET Framework, który będzie działał w trakcie zmiany czasu z letniego na zimowy nie dokonuje automatycznej zmiany czasu lokalnego
- (SQL) TIME mapuje się na Timespan (.NET), ale jeszcze nie ma pełnego wsparcia - .NETowcy nad tym pracują
- Typ tablicowy
- doskonale może się nadawać przy operacjach „batchowych",
- jest wspierany przez .NET Framework (SqlDbType.Structured)
- HierarchyId - Typ hierarchiczny - drzewko
- Indeks wgłąb
- Indeks wszerz
- Zdecydowanie szybsze do operacji CTE i rekursywnych w relacji parent/children
- Filestream
- Atrybut na varbinary(max)
- Przechowywanie w systemie plików
- Dostęp transakcyjny
Organizacja dostępu do danych w aplikacjach WWW - Tomasz Kopacz
- HyperV – doskonałe do testowania zachowania aplikacji w różnych konfiguracjach środowiskowych – łatwe modyfikacje ilości pamięci, liczby rdzeni, procesorów itp.
- Asynchroniczne ASP.NET i ADO.NET oraz jak tego używać.
- Visual Studio Web Test – naprawdę nieźle działa
- Strumieniowanie RSS po WCF jako dostęp do danych – ciekawe zastosowanie
- Konflikt zapisu do bazy przez różnych użytkowników – możliwe rozwiązania
- Np. Encja EntityDataModel do ViewState’a – mamy to wtedy zapewnione od razu (łącząc z Windingiem)
- Kolejka – zapis à ServiceBroker à można uniknąć „Peeków” zapisowych
- Długie transakcje – możliwe rozwiązania
- ViewState między stronami
- Cookie + GUID
- WWF + WebClientSoftwareFactory
- MARS
- Enterprise Library
- Konfiguracja – zapisywanie zmian między środowiskami TEST/PRODUKCJA itp. w kontekście danej maszyny – łatwe do użycia i zastosowania
- CachingApplicationBlock
- Do tego dodajemy mechanizm SqlDependency i mamy dobry mechanizm do cacheowania z uwzględnianiem przedawniania
- Problem – działa lokalnie – kłopot gdy farma serwerów – rozwiązaniem będzie rozwijany teraz projekt Velocity – na razie nie jest jeszcze w fazie CTP. Planowy RTM na połowę 2009 chyba
- Stoswanie var przy korzystaniu z EDM – przy przekazywaniu danych dostajemy dzięki temu „automatyczną” konwersję pomiędzy ciężkimi i lekkimi obiektami w zależności od potrzeb.
- DataServices (aka Astoria) – .NET 3.5 sp1 – wsparcie RESTowe - kolejny sposób dostępu do danych warty rozważenia
Programowanie .NET na platformie SQL Server - Krzysztof Kozielczyk
Szkoda, że nie nazywało się SQL CLR, bo o tym właściwie było.
Z ciekawszych rzeczy o których mówił
- UserDefinedAggregate – można definiować własne agregaty – co ciekawe zawsze trzeba zaimplementować możliwość łączenia wyników pośrednich, aby SQL serwer mógł wykorzystać zrównoleglenie i chyba nie da się tego wyłączyć :/
- TableValuedFunction – można teraz takie tworzyć, obsługa IEnumerable wiersz po wierszu, ale:
- Jeżeli funkcja czyta dane, to nie można wejść w tryb „przeplatanej” egzekucji „field return” – BUG – może kiedyś zostanie poprawiony, komunikat z SQLa jest bardzo nieadekwatny
- HierarchyId, SpatialData, PolicyBasedManagement – to są rzeczy nowe w SQL2008 w całości zrealizowane w SQLCLR więc na pewno M$ będzie dbał o rozwijanie i optymalizowanie tej technologii.
- W trybie External Access można wołać usługi WCFowe
SQL Server 2008 dla developerów - Cezary Nolewajka
Tu dużo się powtórzyło, było dużo uwag jak należy zamykać, zwalniać połączenia, readery itp., oraz trochę drobnych uwag.
- DataReader
- CommandBehavior.CloseConnection – powoduje, że przy zamykaniu Readera, zostanie również zamknięte/zwolnione połączenie – przydatne przy przekazywaniu Readera w parametrach
- Odwołania do readera – lepiej sobie zapisać gdzieś ordinal danej kolumny i odwoływać się przez indeks, a nie przez nazwę – podobno szybsze.
- Można wyłączyć w SO operację zmiany daty modyfikacji plików bazodanowych – może trochę przyspieszyć – baza danych i tak ciągle pisze po tych plikach.
- ServiceBroker jako
- Mechanizm kolejkowy
- Mechanizm wymiany komunikatów