Można powiedzieć, że temat tego wpisu powstał na poczekaniu, ponieważ na początku miałem zamiar pisać o czym innym. Dzisiejszy tekst miał dotyczyć tworzenia silnych nazw, ale po małym stwierdziłem, że chyba nie jestem ekspertem od tematów powiązanych z szyfrowaniem, dlatego odpuściłem sobie ten wątek (osoby zainteresowane tematem odsyłam do ciekawego posta, którego znalazłem podczas własnego zgłębiania tematu). Ponieważ miałem nieodpartą ochotę napisać jednak dziś coś o programowaniu, naprędce wymyśliłe...
Architektura 2937 dni, 2 godziny, 40 minut temu 568 źrodło rozwiń
Jeżeli korzystasz z NHibernate i Json.NET i chcesz bezpośrednio serializować obiekty biznesowe pobrane z bazy danych przy użyciu NHibernate do formatu JSON to bardzo szybko napotkasz na problem w postaci wyjątku: Error getting value from 'ReadOnly' on 'NHibernate.Proxy.DefaultLazyInitializer'. Problem ten powstaje w momencie gdy próbujesz serializować encję pobraną przez NHibernate, która posiada niezainicjowane wiązania z innymi encjami (obiekty proxy do obsługi lazy loading). Klasa serializująca prze...
Architektura 2949 dni, 11 godzin, 28 minut temu 114 źrodło rozwiń
Jedną z ogromnych zalet programowania obiektowego jest to, że raz napisany kod możemy łatwo rozszerzyć o dowolne konstrukcje, lub stworzyć zupełnie coś nowego na jego podstawie. W tym przypadku chodzi mi głównie o kwestię dziedziczenia, która ma swoje wady i zalety. W tym przypadku bardziej chciałbym skupić się na tych pierwszych. Dziedziczenie nie zawsze jest do końca dobrym rozwiązaniem, ponieważ w C# możemy rozszerzać tylko jedną klasę (ale za to na szczęście możemy implementować dowolną ilość interf...
Architektura 2977 dni, 13 godzin, 54 minuty temu 165 źrodło rozwiń
Tworząc duże projekty niejednokrotnie musiałem stworzyć szereg małych klas, których głównym zadaniem było chwilowe przechowywanie określonych danych i przekazywanie ich pomiędzy obiektami. Nie niosły one więc ze sobą żadnej wartości dodanej, a sam ich żywot był raczej krótki. Kilka, kilkanaście klas tego typu, potrafi dość w skuteczny sposób zabałaganić nawet najlepiej zorganizowany projekt. Jeśli wrócimy do niego za jakiś czas, zaczniemy sobie z pewnością zadawać pytanie - po co ta, czy tamta klasa? ...
Architektura 2995 dni, 13 godzin, 2 minuty temu 149 źrodło rozwiń
As .NET developer I’m about to face the problem of using it in a quite complex system. I took some up front effort to prepare some concept of handling nested DB operations and transactions management. I’m not an Entity Framework specialist (nor enthusiast) but the potential of this technology (the result of factors like MS marketing or community activity) shouldn’t be overlooked. Though I have faced a problem of EF which won’t appear in HelloWorld scenarios but will get very hard to ove...
Architektura 3005 dni, 7 godzin, 26 minut temu 79 źrodło rozwiń
Implementing RAII (Resource Acquisition Is Initialization) in C# using Castle.DynamicProxy and how to proxy iterator (IEnumerable).
Architektura 3055 dni, 17 godzin, 48 minut temu 71 źrodło rozwiń
Odwołam się do wpisu Tworzenie własnej ConfigurationSection. W tamtym podejściu tylko czytałem z configuracji. Teraz chcę pokazać że do konfiguracji można też zapisywać z poziomu kodu.
Architektura 3072 dni, 8 godzin temu 59 źrodło rozwiń
Jednym z bardziej charakterystycznych zadań, którego implementację można wykazać w szeregu różnych aplikacji dostępnych na rynku, jest praca wykonywana w stałych określonych interwałach czasu. Przykładów nie trzeba daleko szukać, ponieważ wystarczy spojrzeć choćby na aplikacje mobilne, o których trochę na tym blogu się pisze. W przypadku smartfonów, zjawisko to widoczne jest w aspekcie synchronizacji. Sprawdź statusy na Facebooku co 3 godziny, ściągnij wiadomości RSS co 6 godzin, aktualizuj kalendarz co ...
Architektura 3129 dni, 8 godzin, 25 minut temu 170 źrodło rozwiń
Tydzień temu w pierwszym poście poświęconym synchronizacji, przedstawiłem Wam trzy kluczowe zagadnienia związane z tym tematem. I choć lock, Monitor oraz Mutex pozwalają nam rozwiązać naprawdę dużą liczbą problemów dotyczących wielowątkowości, to warto wiedzieć, że jest to tylko część programistycznego orężu w jaki wyposażył nas Microsoft. Dziś chciałbym Wam przedstawić cztery kolejne klasy, które powinny uzupełnić temat rozpoczęty tydzień temu i zasadniczo wyczerpać kwestię synchronizacji. Bez zbędnego ...
Architektura 3135 dni, 19 godzin, 55 minut temu 302 źrodło rozwiń
Kilka dni temu zainicjowałem cykl postów związanych z wielowątkowością. Rozpocząłem dość standardowo, bo od wyjaśnienia istoty tego zagadnienia i przedstawienia prostych wątków. Wiedza zawarta w tamtym wpisie, powinna w wielu przypadkach okazać się wystarczająca - szczególnie jeśli w naszej aplikacji mamy tylko jeden wątek dodatkowy, który stworzony jest tylko po to by odciążyć wątek główny. Takie proste rozwiązanie nie będzie jednak zawsze do końca wystarczające. Problemy pojawią się w sytuacji gdy wąt...
Architektura 3142 dni, 17 godzin, 12 minut temu 284 źrodło rozwiń
Od jakiegoś czasu dostępny jest dokument opublikowany przez Microsoft Patterns & Practices nad którym pracowała cała rzesza community w tym i nasz Szymon Pobiega – wielkie więc gratulacje! :) może ja ślepy albo głuchy ale dowiedziałem się o tym dopiero teraz :) Tak czy siak, cały dokument jest dostępny niestety jedynie w formacie stron HTML na stronach MSDN – nie ma żadnego docx, pdf czy innego formatu o ile mi wiadomo.
Architektura 3146 dni, 8 godzin, 47 minut temu 105 źrodło rozwiń
Nie wiem jak Was, ale mnie osobiście irytuje zdarzenie w którym na górnej belce aplikacji pojawia się napis , a sam program wygląda jakby się gdzieś po drodze pogubił... Generalnie taki stan rzeczy może być spowodowany wieloma różnymi aspektami, choć zasadniczo w tym przypadku najczęściej można wskazać dwie przyczyny. Trzeba niestety tu otwarcie przyznać, że w głównej mierze są one spowodowane źle napisanym kodem przez programistów tychże aplikacji. Po pierwsze, w każdym programie może po prostu pójść c...
Architektura 3146 dni, 18 godzin, 9 minut temu 117 źrodło rozwiń
W poprzednim poście podałem prostą implementację zdarzeń opartych na słabych referencjach. Zachęcam najpierw do przeczytania poprzedniego wpisu bo bez niego będzie ciężko zrozumieć dzisiejszy post. Dziś implementacja zaproponowana na blogu Paul Stovell’a:publicsealedclass WeakEventHandler
Architektura 3200 dni, 17 godzin, 16 minut temu 131 źrodło rozwiń
Jestem zafascynowany framworkiem PRISM, czytam, oglądam i piszę jakieś przykładowe aplikacje z wykorzystaniem tej biblioteki. Prism ułatwia tworzenia modularnych i dynamicznych systemów, dostarcza mechanizm do rozwiązywania zależności (Unity Container), umożliwia dynamiczną zmianę zachowania aplikacji poprzez wczytywanie dodatkowych modułów z katalogu lub aktualizację pliku konfiguracyjnego aplikacji - to tylko część z błyszczących bajerów. Prism wspiera Silverlight, WPF czy Windows Phone 7 oraz mocno ...
Architektura 3212 dni, 10 godzin, 4 minuty temu 396 źrodło rozwiń
Ponad dwa lata temu, popełniłem wpis na temat operacji na kolekcjach w C#. Post ten ku mej uciesze, wciąż cieszy się sporą popularnością, dlatego też postanowiłem napisać niejako jego kontynuację. Gdy dwa lata temu pisałem tamten wpis, wciąż dominującą wersją frameworka .Net, była ta oznaczona wersją 2.0. Dziś sytuacja się trochę zmieniła i przynajmniej w moim odczuciu, coraz więcej osób korzysta z wersji 3.5 i 4.0, a na horyzoncie jest już .Net 4.5, który pojawi się w pełni wraz z Windowsem 8 i Visual ...
Architektura 3233 dni, 22 godziny, 9 minut temu 295 źrodło rozwiń
Zasada Common Reuse Principle mówi, że klasy w pakiecie/assembly są ponownie używane wspólnie. Jest to konsekwencja Reuse Release Equivalence Principle z której wynika, że klient posiada referencje do całej biblioteki a nie pojedynczej klasy. Z tego zaś wynika, że jeżeli polega na jednej klasie (wykorzystuje jedną klasę) to może wykorzystywać wszystkie. W końcu publikując bibliotekę nie jesteśmy wstanie określić z których klas będzie ktoś używał (chyba że umieścimy tam jedną publiczną klasę ). To wsz...
Architektura 3238 dni, 20 godzin, 54 minuty temu 139 źrodło rozwiń
Sporo czasu poświęciłem na elektronikę i mimo tego, że nie byłem i nie jestem przesadnie pedantyczny to tranzystory i rezystory zawsze miałem uporządkowane w klasterach z posklejanych pudełek po zapałkach lub woreczkach strunowych. Takie postępowanie powodowało, że zawsze wiedziałem gdzie szukać tego jednego rezystora, który właśnie potrzebowałem. Takie segregowanie nie ma znaczenia przy 10-20-50 elementach, można to jeszcze ogarnąć jednak przy 100 i więcej zaczyna być problemem. Dokładnie to samo dzieje...
Architektura 3244 dni, 3 godziny, 46 minut temu 84 źrodło rozwiń
W poprzednich częściach przeszliśmy przez zasady SOLID. S – Single Responsibility Principle (oraz cz. 2) O – Open Close Principle (oraz cz. 2) L – Liskov Substitution Principle I – Inversion Segregation Principle D – Dependency Inversion Principle Słowo SOLID bardzo dobrze odzwierciedla to, do czego te zasady prowadzą czyli do budowania solidnego kodu. Przez solidny kod rozumiem taki, który jest łatwy w modyfikacji i który szybko można dostosować do zmieniających się wymagań. Nie są to jednak wszy...
Architektura 3246 dni, 19 godzin, 38 minut temu 112 źrodło rozwiń
Wyobraźmy sobie taką sytuację: jest sklep internetowy, podczas składania zamówienia system wylicza rabat – przy zamówieniach 500-1000 zł 5%, powyżej 1000 zł 10%, powyżej 5000 dodatkowo darmowa przesyłka. Brzmi znajomo?
Architektura 3246 dni, 19 godzin, 38 minut temu 254 źrodło rozwiń
Postanowiłem poruszyć kwestię zasady oddzielania poleceń od zapytań. Pisał o niej ostatnio Piotr Zieliński. Cóż to takiego te „polecenia” i „zapytania”? Ujmując to zagadnienie bardzo ogólnie można powiedzieć, że cechy charakteryzujące klasę dzielą się na polecenia i zapytania. Pierwsze z nich służą do modyfikowania obiektu, drugie do uzyskiwania o nim informacji...
Architektura 3246 dni, 19 godzin, 38 minut temu 123 źrodło rozwiń