Notki po polsku

68 spotkanie KGD.NET

Już za dwa dni, w środę 26 października odbędzie się 68. spotkanie KGD.NET. Dlaczego o tym tu pisze? Ponieważ spotkanie będzie, dzięki uprzejmości portalu VirtualStudy.pl, strumieniowane na żywo oraz nagrywane. Informację o spotkaniu na witrynie VS można znaleźć tutaj. Mieszkańców Krakowa i okolic oczywiście zachęcam na przyjścia osobiście (godzina 18.30, siedziba ABB przy Starowiślnej 13). Zarejestrować się można na stronie spotkania. Osoby, które się zarejestrują i przyjdą będą uczestniczyć w losowaniu nagród, m.in. voucherów Pluralsight, podręcznika .NET i innych.

Zapraszam serdecznie

PS. Po spotkaniu idziemy na piwo:)

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)

ABB Dev Day

W ubiegły piątek miałem przyjemność wystąpić na konferencji ABB Dev Day 2011 w Krakowie. Muszę przyznać, że była to jedna z najlepszych konferencji, na jakich byłem. Organizatorzy — Michał Śliwoń (@mihcall) i Rafał Legiędź (@rafek) – wykonali kawał świetnej roboty. Duże brawa dla nich.

Na tej konferencji pojawiłem się z prezentacją o (jakże by inaczej) CQRS. Więszość uczestników pewnie pamięta, ale na wszelki wypadek przypominam: rzuciłem wtedy wyzwanie zaimplementowania prostej aplikacji w ramach eksperymentalnej architektury CQREST (połączenie CQRS i REST, jak się łatwo domyśleć):

Nagrodą jest licencja na jeden z produktów JetBrains oraz oczywiście wieczna sława:) Jeśli ktoś się do tej pory wahał, czy warto, niech przestanie się wahać i weźmie się za kodowanie.

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)

Z życia społeczności

Zaczynając od przeszłości, w ostatnią środę, 23 marca, odbyło się 63. spotkanie Krakowskiej Grupy Developerów .NET. Na spotkanie przyszło rekordowo dużo (aż 57!) osób. Pierwszą z sesji prezentowałem ja, natomiast drugą — Tomek Wiśniewski.

W dniach 31 marca-1 kwietnia odbędzie się druga edycja konferencji Agile Central Europe (ACE). Są jeszcze wolne miejsca. Studenci mogą liczyć na spore zniżki. Możecie także zgłosić się do pomocy w organizacji konferencji otrzymując w zamian darmową wejściówkę.

2 kwietnia odbędzie się Krakowski Code Retreat. Niestety miejsc już nie ma, ale możecie się zapisać na listę rezerwową — może szczęście się do Was uśmiechnie.

9 kwietnia o godzinie 19.00 planowane jest specjalne spotkanie KGD.NET na którym prezentację poprowadzić Greg Young. W dniach 11-13 kwietnia Greg organizuje szkolenie w Krakowie. Koszt szkolenia to 2000 zł, co jest ceną dosyć atrakcyjną w porównaniu do 1500 funtów, które trzeba zapłacić za podobne szkolenie organizowane za pośrednictwem SkillsMatter.

Również 9 kwietnia w Katowicach odbywa się drugi śląski Code Camp. Konferencja kończy się na tyle wcześnie, że swobodnie zdążycie wrócić do Krakowa na spotkanie z Gregiem. Rejestracja na SCC jest bezpłatna.

12 kwietnia o godzinie 20.00 zapraszamy do Rogu Brackiej i Reformackiej na kolejne spotkanie OpenBeer.

W dniach 18-20 kwietnia Piotrek Włodek będzie zwiedzał Polskę (Poznań, Wrocław i Katowice) nauczając na temat Managed Extensibility Framework. Naprawdę warto zobaczyć Piotrka w akcji.

Wreszcie pod koniec miesiąca kwietnia (dokładny termin jeszcze nie jest znany) odbędzie się kolejne spotkanie KGD.NET.

VN:F [1.9.22_1171]
Rating: 3.7/5 (3 votes cast)

Architektura trójwarstwowa

Architektura trójwarstwowa jest chyba najlepiej znaną implementacją wzorca warstw w architekturze aplikacji. Z mojego doświadczenia wynika jednak, że znajomość ta zwykle jest bardzo powierzchowna i nie sięga wgłąb (warstw;-)). Porzućmy więc na chwilę CQRS, DDD i inne fajne akronimy i wróćmy “do korzeni”. Co to jest architektura trójwarstwowa?

Definicja

Sama jej nazwa w języku polskim jest problematyczna. Angielska terminologia rozróżnia dwa ich rodzaje: tiers to warstwy fizyczne, natomiast layers – logiczne. W czasach kiedy architektura trójwarstwowa stawała się popularna (zastępując dwuwarstwowy model klient-serwer z terminalem i mainframem) nie było niezbędne rozróżnianie warstw fizycznych i logicznych, ponieważ odpowiadały one sobie jeden-do-jeden. Dziś mamy zupełnie inną sytuację, której polska terminologia nie jest w stanie oddać.

Warstwy fizyczne

W ujęciu fizycznym większość aplikacji biznesowych wciąż składa się z trzech warstw: interfejsu użytkownika (przeglądarka internetowa, smart client), logiki biznesowej (serwer WWW) oraz bazy danych (serwer RDBMS). Rzadkim, aczkolwiek spotykanym, rozwiązaniem w przypadku aplikacji z interfejsem HTML jest rozdzielenie fizyczne serwera WWW oraz serwera aplikacyjnego.

Warstwy logiczne

W ujęciu logicznym termin “architektura trójwarstwowa” nieco się zdewaluował. Istnieje obecnie wiele wzorców architektonicznych, które wywodzą się historycznie z architektury trójwarstwowej, ale mają z nią już niewiele wspólnego. Przyjrzyjmy się na początek najczęściej spotykanemu (i opisywanemu przez podręczniki Microsoft).

Przykład książkowy

Pierwszą warstwę stanowi interfejs ASP.NET WebForms. Poniżej niego znajduje się warstwa logiki biznesowej. Tradycyjnie (przed epoką LINQ to SQL) oficjalne diagramy Microsoft umieszczały na dole warstwę dostępu do danych zbudowaną w oparciu o ADO.NET. W ten sposób mieliśmy trzy warstwy logiczne. Warto zauważyć, że wszystkie one umieszczone są w jednej (środkowej) warstwie fizycznej. Tak było jednak do niedawna. Odkąd deweloperzy Microsoft mają do dyspozycji narzędzia ORM, nie ma już potrzeby samodzielnego budowania warstwy dostępu do danych. Cóż więc pozostaje? Warstwa interfejsu WebForms oraz warstwa logiki zawierająca także klasy reprezentujące encje biznesowe. Nie zmienia to jednak faktu, że opisana powyżej koncepcja jest najczęściej nazywana architekturą trójwarstwową. Dziwne, prawda? W których przyszło nam programować architektura trójwarstwowa jest terminem głównie marketingowym.

Przykład mniej książkowy — ActiveRecord

Aby nie opierać wszystkiego na przykładach produkowanych przez Microsoft, przyjrzyjmy się jeszcze dwóm innym wersjom architektury trójwarstwowej. Na początek wariant z wzorcem ActiveRecord. W tym wypadku także mamy do czynienia z dwoma warstwami: interfejsem i logiką biznesową. Specyfika wzorca ActiveRecord sprawia, że kwestie związane z persystencją są umieszczone tuż obok logiki aplikacji. Notka na marginesie: stosując stos technologiczny Microsoft wzorzec ActiveRecord polega na umieszczaniu logiki z klasach partial dla odpowiednich encji LINQ to SQL lub LINQ to Entities.

Przykład zupełnie nie książkowy — NHibernate

Drugi z przykładów spoza kręgu wpływów giganta z Redmond to aplikacja wykorzystująca NHibernate do dostępu do danych. W tym wypadku mamy do czynienia ze szczątkową wersją warstwy dostępu do danych zawierającą jedynie mapowania ORM. Mam pewne opory przed nazywaniem tego pełnoprawną warstwą. Powiedziałbym, że taka aplikacja jest dwuipółwarstwowa.

Architektura trójwarstwowa a MVC

MVC to jeden z najlepiej (obok Singletonu) znanych wzorców. Często natrafiam na pytania związane z relacją między MVC, a architekturą trójwarstwową. Jakiś czas temu zwykłem odpisywać, że koncepcje te nie mają ze sobą nic wspólnego, ponieważ MVC to wzorzec projektowy, a AT — architektoniczny. Czy jednak na pewno?

W dużych systemach z logiką biznesową zorganizowaną w formie modelu domeny rozróżnienie to ma sens. Stosuję wtedy MVC w logicznej warstwie interfejsu użytkownika. Warstwa logiki biznesowej to mój model domeny. W tym wypadku bardzo ważne jest zdanie sobie sprawy, że model z MVC to nie model domeny. Model z MVC to obiekty DTO przekazywane między warstwami GUI i logiki biznesowej.

Większość systemów nie jest jednak tak skomplikowana. Prosta aplikacja webowa zbudowana w oparciu o jakiś framework MVC (np. ASP.NET MVC) jest świetnym przykładem implementacji architektury trójwarstwowej (czyli tak naprawdę 2 lub 2,5 warstwowej). Widoki są częścią warstwy prezentacji, kontrolery i model — logiki biznesowej. Dostępu do danych istnieje zwykle jako peseudowarstwa na bazie mapera obiektowo-r. Tak więc MVC, będąc przede wszystkim użytecznym wzorcem budowy interfejsu użytkownika, może w niektórych wypadkach być także implementacją wzorca architektonicznego aplikacji trójwarstwowej

Podsumowanie

Architektura trójwarstwowa jest prawdopodobnie najlepiej znanym wzorcem architektonicznym. Jest ona całkiem niezłą abstrakcją większości systemów. W końcu prawie każda aplikacja ma interfejs użytkownika, logikę biznesową i jakiś dostęp do danych. Niestety w dzisiejszych czasach termin ten przestał być użyteczny w komunikacji: jest on zbyt obszerny i rozmyty.

VN:F [1.9.22_1171]
Rating: 4.8/5 (5 votes cast)

NoSQL Summer

Niedawno miałem przyjemność uczestniczyć w pierwszym spotkaniu Krakowskim spotkaniu inicjatywy NoSQL Summer. Zainteresowała mnie, przede wszystkim, forma spotkań — dyskusje dotyczące przeczytanych “lektur obowiązkowych”. Skojarzyło mi się bardziej z dyskusyjnym klubem filmowym, niż typową technologiczną juzergrupą. Postanowiłem się więc wybrać. Nie żałowałem.

Organizacji krakowskich spotkań podjął się Adam Pohorecki. Dzięki temu organizacyjnie wszystko było zapięte na ostatni guzik. Miłym dodatkiem było piwo sponsorowane przez Lunar Logic.

Spotkanie przybrało ostatecznie formę wymiany doświadczeń dotyczących różnych baz nierelacyjnych. Oto garść zebranych przeze mnie naprędce wniosków:

Mamy do czynienia z prawdziwym wysypem baz nierelacyjnych. Chyba każdy szanujący się programista za punkt honoru ma napisanie swojej (zupełnie jak niegdyś z kontenerami Dependency Injection).

  • Poszczególne bazy nierelacyjne różnią się podejściem do replikacji/klastrowania.
  • Najbardziej znany w Krakowie jest CouchDB.
  • Temat NoSQL jest raczej obcy środowsiku .NET. Smutne.
  • Częstym problemem z bazami nierelacyjnymi jest duży apetyt na przestrzeń dyskową.
  • Bazy nierelacyjne są już od dawna wykorzystywane produkcyjnie, nawet w Krakowie.
  • Transakcje obejmujące modyfikacje kilku dokumentów to ZŁO.
  • API baz nierelacyjnych jest bardziej zbliżone do sposobu działania ich mechanizmów składowania danych
  • Bazy nierelacyjne wymagają większej świadomości i wiedzy od dewelopera, ale w zamian oferują większe możliwości wpływania na zachowanie mechanizmu składowania danych (np. rozwiązywanie konfliktów.

Kolejne spotkanie z cyklu NoSQL Summer już w najbliższą środę w siedzibie Lunar Logic (Krasińskiego 17/5). Temat: map/reduce. Więcej informacji można uzyskać za pośrednictwem grupy google Kraków NoSQL Summer. W imieniu organizatorów, zapraszam.

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)