Podczas generowania modelu encji na podstawie bazy danych, EF potrafi pobrać maksymalną długość pola. Jeśli kolumna w bazie posiada typ nvarchar(50) to EF zmapuje to na zmienną typ string oraz ustawi pole MaxLength na wartość 50. Informacja o dozwolonej długości (50) jest zapisana w metadanych. Niestety próba przypisania wartości dłuższej niż 50 znaków zakończy się powodzeniem ponieważ nvarchar(50) został zmapowany na string, który nie ma ograniczenia do 50 znaków. Poniższy kod NIESTETY zadziała:Conta...
Strona głównaUżytkownik
pzielinski | użytkownik
Bazy danych i XML 5307 dni, 19 godzin, 12 minut temu 34 źrodło rozwiń
Interfejsy IEnumerable oraz IQueryable mogą wydawać się bardzo podobne. W końcu IQueryable implementuje IEnumerable więc funkcjonalność musi być podobna. W praktyce poniższe dwa zapytania bardzo się różnią:IEnumerable
Bazy danych i XML 5307 dni, 19 godzin, 12 minut temu 101 źrodło rozwiń
W poprzednim poście przedstawiłem w skrócie czym jest WCF Data Service i jak stworzyć prostą usługę sieciową opartą o WCF Data Service. Dzisiaj przyjrzymy się jak stworzyć aplikacje kliencką za pomocą bibliotek dołączonych do .NET. .NET ułatwia znacząco dostęp do usług WCF Data Service. Programista nie musi samemu tworzyć zapytań URL. Korzystanie z WCF Data Service bardzo przypomina pracę z lokalnym EntityFramework. Stwórzmy więc aplikację kliencką:Tworzymy nowy projekt aplikacji klienckiej np. WPF lub...
Programowanie rozproszone 5309 dni, 1 godzinę, 26 minut temu 81 źrodło rozwiń
Entity Framework jest rozbudowanym narzędziem ORM (ang.Object Relational Mapping), dołączonym do Visual Studio. Dzięki zaawansowanemu IDE tworzenie modelu danych jest bardzo łatwe i w pełni zautomatyzowane.
Bazy danych i XML 5308 dni, 6 godzin, 16 minut temu 159 źrodło rozwiń
WCF Data Service to usługa sieciowa umożliwiająca łatwy dostęp do danych. Wyobraźmy sobie następujący przypadek: Mamy pewną bazę danych zawierającą np. informacje o produktach. Można napisać ręcznie usługę WCF, która wyeksponuje wszelkie potrzebne dane za pomocą metod. Usługa w takim przypadku zawierałaby metody typu Create, Update, Delete, GetById, GetByQuery itp. Implementacja usługi dla każdej tabeli w bazie jest dość czasochłonna i niezbyt interesująca. Za pomocą WCF Data Service, usługa zostanie ...
Programowanie rozproszone 5312 dni, 1 godzinę, 58 minut temu 54 źrodło rozwiń
Jednym z wcześniejszych postów przedstawiłem aplikację nDepend obliczającą przeróżne metryki kodu. Większość metryk obliczanych przez program jest oczywista (liczba linii kodu, procent komentarzy, liczba klas itp). Na solidny komentarz zasługuje jednak złożoność cyklomatyczna (w skrócie CC). Aby obliczyć CC, należy najpierw należy narysować graf przepływu informacji dla badanego kodu. Złożoność można obliczać zarówno dla konkretnej metody jak i całego systemu. Rozpatrzmy następujący fragment kodu: priv...
Architektura 5316 dni, 8 godzin, 8 minut temu 78 źrodło rozwiń
Domyślnie dane o użytkownikach przetrzymywane się w osobnej bazie danych aspnetdb (SQL Server Express). Czasami jednak warto aby wpisy o użytkownikach były zapisywane w naszej bazie danych. Wyobraźmy sobie portal społecznościowy, w którym użytkownicy mogą umieszczać zdjęcia. W takim przypadku w bazie danych z pewnością będzie tabela łącząca wysłane fotografie z użytkownikami. Jeśli użytkownicy są w jednej bazie danych mamy łatwą kontrolę nad relacjami – wystarczy użyć klucza obcego wskazującego na klucz ...
Poprawność kodu powinna być sprawdzana na każdym etapie produkcji oprogramowania. Do dyspozycji są wszelkie typy testów (jednostkowe, integracyjne obciążenia itp.). Wszystkie wymienione testy sprawdzają jednak czy kod wykonuje swoje zadanie w oczekiwany sposób. Nie sprawdzają jakości napisanego kodu. Testy nie wykażą, że dany kod jest napisany w sposób mało elegancki. Jednym z najskuteczniejszych rozwiązań jest tzw. code review (recenzjonowanie kodu). Polega to na tym, że dany fragment kodu jest przegląd...
Architektura 5316 dni, 18 godzin, 22 minuty temu 109 źrodło rozwiń
Czasami istnieje potrzeba zapisania stanu aktualnie wykonywanego workflow’a. Domyślnie wszelkie dane zapisywane są w pamięci ulotnej. W przypadku awarii komputera odtworzenie ostatnio wykonywanego stanu jest niemożliwe. Nie jest to problem w przypadku gdy wykonanie workflow’a zajmuje tylko kilka sekund. W sytuacji w której zakończenie workflow’a może potrwać kilka godzin lub tygodni, niezbędne jest zapisywanie informacji w pamięci trwałej np. w bazie danych SQL Server. WWF dostarcza specjalną usługę, Sq...
ASP .NET Membership jest bardzo dobrym rozwiązaniem dla uwierzytelnienia oraz autoryzacji użytkowników w aplikacji webowej. Umożliwia m.in. zarządzanie kontami użytkowników czy tworzenie ról. Często jednak system składa się również z aplikacji typu desktop. W rozbudowanych systemach proponuję zrezygnować z czystego ASP .NET Membership na rzecz Windows Identity Framework. Jeśli jednak tworzymy małą aplikacje z pewnością przyda nam się wsparcie ASP .NET Membership w WinForms. Rozwiązaniem problemu są tzw...
W jednym z ostatnich postów pokazałem jak stworzyć aplikację WWF na przykładzie prostego Sequential Workflow. Dzisiaj zajmiemy się wykorzystaniem stworzonej biblioteki w aplikacji klienckiej. Warto najpierw ściągnąć kompletny kod źródłowy ponieważ nastąpiła jedna drobna zmiana w implementacji workflow. Pierwszym etapem jest oczywiście stworzenie aplikacji np. WPF lub Connsole. Następnie należy dodać referencje do skompilowanej biblioteki zawierającej WWF. Ponadto jest jeszcze potrzebna biblioteka System...
Klasycznym sposobem mapowania DTO na obiekt biznesowy jest użycie wzorca projektowego adapter. Przykładowo aby zmapować Order do OrderDto możemy napisać następującą klasę:class OrderDtoAdapter { private Order mOrder =null; public OrderDtoAdapter(Order order) { mOrder = order; } publicvoid Initialize(Order orderDto) { orderDto.CreationDate = mOrder.CreationDate; orderDto.Client = mOrder.Client; orderDto.Id = m_Order.Id; } } Rozwiązanie całko...
Architektura 5329 dni, 8 godzin, 30 minut temu 82 źrodło rozwiń
Dzisiaj spróbujemy stworzyć pierwszy workflow. Co prawda, nic praktycznego nie będzie wykonywał, ale pokaże kilka mechanizmów, które można wykorzystać w workflow. Zasada działania przykładowego workflow wzorowana jest na przykładzie z MSDN:Jako parametr wejściowy podajemy liczbę całkowitą,Workflow sprawdza wartość liczby. Jeśli jest mniejsza niż 2000, kończy działanie wysyłając e-mail. W przeciwnym razie, wymagana jest akceptacja wprowadzonej wartości. Użytkownik musi po prostu wywołać pewnie zdarzenie –...
W poprzednich postach przedstawiłem wzorce projektowe warstwy biznesowej: skrypt transakcji (transaction script), moduł tabeli (table module), aktywny rekord (active record) oraz model domeny (domain model). Napisałem, że dwa ostatnie wzorce posiadają bardzo rozdrobniony interfejs i nie nadają się bezpośrednio do użycia w rozproszonej aplikacji. Dla przypomnienia, AR oraz DM polegają na stworzeniu klasy dla każdej (lub prawie każdej w przypadku DM) tabeli w bazie danych. Przykładowo system sprzedaży posi...
Architektura 5334 dni, 2 minuty temu 81 źrodło rozwiń
Omawiając warstwę biznesową wydaje mi się, że warto wspomnieć o technologii WWF. Kilka postów wcześniej pisałem o tzw. silniku reguł biznesowych. Chodziło o zdefiniowanie reguł oraz przepływu informacji w systemie. Jako przykład można podać wysyłanie zamówienia. Proces składa na pewno z kilku etapów takich jak aktualizacja bazy danych, wysłanie e-mail’a z potwierdzeniem do klienta oraz np. wywołanie metody usługi sieciowej (może to być WCF magazynu). Po kilku miesiącach może okazać się, że scenariusz ni...
W celu wyjaśnienia zasady działania asynchronicznych stron, najpierw przyjrzyjmy się jak wygląda standardowe zapytanie do serwera. Klient wysyła żądanie HTTP do serwera np. typu GET w celu uzyskania danej strony www. Następnie serwer używa tzw. puli wątków (thread pool). Po prostu przydziela wątek z puli każdemu nadchodzącemu żądaniu. Tworzenie (a raczej odtwarzanie) wątków z puli jest szybkie (o tym już pisałem kiedyś), jednak liczba wątków jest ograniczona. W przypadku gdy serwer będzie musiał obsłużyć...
W poprzednim poście opisałem wzorzec repozytorium. Jak już wspomniałem, repozytorium może różnić się implementacją w zależności od encji. W skrajnych przypadkach może być jedno repozytorium na jedną encję (Order – OrderRepository, Product – ProductRepository itp). Tworzenie każdego repozytorium ręcznie w zależności od przetwarzanej encji jest dość niewygodne. Przydałby się jakiś globalny mechanizm na tworzenie obiektów na podstawie typu encji. Dobrym rozwiązaniem problemu jest implementacja wzorca serv...
Architektura 5341 dni, 23 godziny, 14 minut temu 89 źrodło rozwiń
Implementując warstwę biznesową za pomocą DomainModel lub ActiveRecord uzyskujemy bardzo rozdrobniony interfejs. Ponadto stworzone obiekty biznesowe zawierają logikę odnoszącą się tylko do konkretnej encji. W poprzednich postach pokazałem prostą klasę Client, implementującą wzorzec DomainModel. Przedstawiona klasa mogła wykonywać tylko operacje dla konkretnego, jednego klienta. W systemie jednak często będziemy musieli brać pod uwagę zbiór encji. Przykładowo może być potrzeba zwrócenia zbioru klientów, d...
Architektura 5343 dni, 6 godzin, 54 minuty temu 633 źrodło rozwiń
Silverlight jest technologią odpowiedzialną za tworzenie warstwy prezentacji po stronie klienta. Wszelki kod wykonywany jest w przeglądarce zatem nie ma bezpośredniego dostępu do serwera www. Czasami jednak aplikacja musi wysyłać do serwera jakieś pliki np. graficzne (w przypadku modułu galerii zdjęć). Niestety ze względu na opisaną lokalność działania, Silverlight nie wspiera tego. Jedną z metod obejścia jest implementacja własnego HTTP handlera. Zacznijmy więc od stworzenia aplikacji Silverlight hostow...
Silverlight 5347 dni, 21 godzin, 35 minut temu 93 źrodło rozwiń
Nowoczesne aplikacje web’owe często wymagają obsługi wielu języków. Silverlight podobnie jak ASP .NET wspiera mechanizm globalizacji za pomocą zasobów (resources files). Pliki zasobów są tak naprawdę zwykłymi plikami XML. Stanowi to ogromną zaletę – za pomocą zewnętrznego narzędzia odpowiednie osoby mogą przygotować tłumaczenie interfejsu. Najpierw należy stworzyć główny plik zasobów. Zawiera on tłumaczenia dla domyślnego języka. W przypadku gdy użytkownik pochodzi z kraju, którego język nie jest obsłu...
Silverlight 5348 dni, 22 godziny, 14 minut temu 60 źrodło rozwiń