Po moim ostatnim poście dostałem maila z dość ciekawym pytaniem dotyczącym zapisywania klasy Money w bazie danych. Pytanie brzmi następująco: […]mam pytanie, którego nie było w temacie, co prawda nie tego dotyczyło, ale może mogę uzyskać wskazówkę, pomoc co w przypadku zapisania takiej struktury do bazy, np wykorzystując EF ? EF domyślnie nie wspiera struct, dlatego mam pytanie, jak to dobrze i prawidłowo zapisywać do bazy ? Jakas podpowiedz ?
Daj się poznać 2016 3198 dni, 3 godziny, 12 minut temu 265 źrodło rozwiń
Problem chyba tak stary jak stare są aplikacje liczące pieniądze – jak reprezentować kasę w kodzie aplikacji? W świecie .NET jedną z częściej pojawiających się odpowiedzi jest po prostu decimal jednak tak naprawdę jest to tylko połowa odpowiedzi. W każdym razie jeśli chcielibyśmy to zrobić w duchu OOP i OOD.
Daj się poznać 2016 3198 dni, 3 godziny, 12 minut temu 269 źrodło rozwiń
Dzisiaj zacząłem pisać post o hierarchii aktorów. Jest to bardzo ważny element w celu osiągnięcia skalowalności i dobrej obsługi błędów (np. poprzez izolacje wadliwych aktorów). W połowie jednak stwierdziłem, że najpierw wypada napisać krótki wpis o zdarzeniach (hooks), jakie możemy zdefiniować w AKKA. Pozwoli nam to potem lepiej zrozumieć przepływ informacji w hierarchiach aktorów. Każdy aktor, może znajdować się w następujących etapach...
Programowanie rozproszone 3297 dni, 7 godzin, 24 minuty temu 78 źrodło rozwiń
Tym razem zaczyna się od kodu i od razu dowiemy się dlaczego jest on niebezpieczny...
Programowanie rozproszone 3300 dni, 8 godzin, 18 minut temu 243 źrodło rozwiń
Zanim będę kontynuował serię o AKKA.NET, warto zapoznać się z podstawami programowania reaktywnego. Pozwoli to później zrozumieć, w jaki sposób AKKA.NET implementuje założenia programowania reaktywnego. Dzisiaj zatem przedstawię tzw. “The Reactive Manifesto”, którego pełną treść można znaleźć tutaj. Moim zdaniem jednak, manifest może wydawać się trochę skomplikowany i dlatego zdecydowałem się wyjaśnić to po swojemu.
Programowanie rozproszone 3304 dni, 8 godzin, 15 minut temu 309 źrodło rozwiń
W ostatnim wpisie przedstawiłem zasadę działania modelu aktor. Zachęcam do przeczytania poprzedniego wpisu ponieważ dzisiaj skupię się na przykładzie, a nie podstawach teoretycznych. Jeśli poprzedni wpis nie był do końca zrozumiały, zachęcam do przeanalizowania przykładu z tego wpisu i potem powrócenia do poprzedniego postu – wtedy myślę, że wiele zagadnień będzie prostsze w zrozumieniu.
Programowanie rozproszone 3317 dni, 6 godzin, 41 minut temu 189 źrodło rozwiń
Aktor jest modelem budowania aplikacji wielowątkowych. Powstał w celu ułatwienia synchronizacji między różnymi wątkami. Programiści piszący aplikacje wielowątkowe zwykle korzystają z klasycznych blokad (lock) w celu opisania sekcji krytycznej. W wielu sytuacjach jest to najlepszy i najprostszy sposób. Niestety dla dużych i skomplikowanych systemów, utrzymywanie takiego kodu jest bardzo trudne, mozolne i niezwykłe podatne na powstanie deadlock lub livelock.
Programowanie rozproszone 3321 dni, 7 godzin, 31 minut temu 302 źrodło rozwiń
Coraz więcej API dostarcza asynchroniczne wersje metod. Niektóre z nich, idą o krok dalej i w ogóle nie posiadają synchronicznej wersji. Załóżmy, że zewnętrzna biblioteka ma następującą metodę: async Task
Programowanie rozproszone 3324 dni, 4 godziny, 33 minuty temu 316 źrodło rozwiń
BlockingCollection jest specjalną kolekcją danych, przygotowaną do implementacji wzorca producent-konsument. Nakład pracy do implementacji tego wzorca jest minimalny z BlockingCollection. Nie musimy martwić się o synchronizację, sekcję krytyczną czy deadlock. Zacznijmy od razu od przykładu. Producent będzie wyglądać następująco...
Programowanie rozproszone 3346 dni, 8 godzin, 2 minuty temu 342 źrodło rozwiń
Resharper daję naprawdę cenne wskazówki. Nie wszystkie są oczywiste i czasami należy zagłębić się w temat. Jedną z takich wskazówek jest używanie IndexOf wraz z StringComparison.Ordinal. Załóżmy, że mamy następujący kod: string text = "test"; Console.WriteLine(text.IndexOf("est")); Resharper zasugeruje konwersję do: string text = "test"; Console.WriteLine(text.IndexOf("est", StringComparison.Ordinal)); Dlaczego? Jeśli nie przekażemy ustawień regionalnych jawnie, wtedy domyślnie aktualna zost...
Sztuka programowania 3352 dni, 8 godzin, 17 minut temu 163 źrodło rozwiń
Nie jest to pierwszy wpis o SpecFlow i podstawy framework’a znajdziecie oczywiście w archiwum. W SpecFlow można definiować tzw. “Scenario outline”, które służą jako szablony dla testów. Oczywiście data-driven testing nie powinno być nadużywane i w szczególności dla acceptance tests nie ma to wielkiego sensu. SpecFlow jest często używany dla testów systemowych i UI, gdzie nie testujemy wszystkich możliwych kombinacji danych wejściowych. Czasami jednak chcemy mieć bardziej sparametryzowany zestaw testów...
Sztuka programowania 3483 dni, 8 godzin, 33 minuty temu 126 źrodło rozwiń
Kompatybilność usług jest problemem w każdej architekturze SOA, ale w przypadku mikro-usług staje się jeszcze bardziej widoczna. W przyszłości chce napisać post o tzw. consumer-driven contracts, które znacząco mogą zminimalizować potrzebę wersjonowania usług. W każdym razie, bardzo prawdopodobne, że w pewnym momencie zajdzie potrzeba wprowadzenia zmiany, która nie jest kompatybilna wstecz. Jeśli nasz system składa się np. z 20 usług to musimy mieć mechanizm, który zagwarantuje nam, że nie wprowadzimy zm...
Programowanie rozproszone 3512 dni, 18 godzin, 26 minut temu 211 źrodło rozwiń
Dzisiaj ostatnia warstwa modelu, która zdecydowanie często jest pomijana w implementacjach REST. Moim zdaniem, w przypadku publicznych API jest bardzo ważna, szczególnie w środowisku mikro-serwisów, gdzie nawigacja jest utrudniona ze względu na liczbę usług. HATEOAS to skrót od Hypertext As The Engine Of Application State. Mechanizm dostarcza możliwość nawigacji przez zasoby bez wiedzy o konkretnych adresach URL. Załóżmy, że mamy bazę klientów w systemie i możemy w niej:Wylistować listę klientów.Zwróci...
W dwóch postach poruszałem już temat dokumentacji usług REST. Ręczne tworzenie plików JSON dla swagger jest dosyć czasochłonne i łatwo potem zapomnieć przy jakiś modyfikacjach o aktualizacji dokumentacji. Dla ASP.NET MVC WebAPI na szczęście jest Swashbuckle.
Martin Fowler, kilka lat temu pisał o tzw. Richardson maturity model, którego autorem jest tak naprawdę Leonard Richardson. Groźnie brzmiąca nazwa, jak zwykle nie opisuje nic bardzo skomplikowanego. Nie mniej jednak, model ten doskonale opisuje założenia usług RESTful. W zasadzie nie ma framework’ów, które wymuszałyby poprawną implementację REST, stąd niezbędne jest zrozumienie jakie są założenia tych usług. Programiści zbyt często luźno interpretują pojęcie REST. Moim zdaniem, w momencie, gdy REST wchod...
Programowanie rozproszone 3526 dni, 20 godzin, 27 minut temu 530 źrodło rozwiń
W dzisiejszym poście pokażę bibliotekę Noda Time. Generalnie jest ona stworzona, aby zastąpić DateTime, który często powoduje problemy. Dzisiaj jednak, chciałbym pokazać Noda Time na przykładzie testów jednostkowym, bo to jest miejsce, gdzie DateTime po prostu nie nadaje się do użycia (przynajmniej bezpośrednio).
Sztuka programowania 3535 dni, 8 godzin, 52 minuty temu 148 źrodło rozwiń
Największa zaleta mikro-serwisów, a mianowicie pojedyncza odpowiedzialność, często bywa również problemem, a raczej wyzwaniem. Załóżmy, że nasz system ma następujący mikro-usługi:CustomerService – podstawowe informacje o klientach AddressService – wyszukiwarka adresów CreditCardDetails – dane o kartach Nie chce wymieniać tutaj długiej listy, ale wyobraźmy sobie...
Sztuka programowania 3539 dni, 18 godzin, 39 minut temu 412 źrodło rozwiń
Od jakiegoś czasu wzorzec “microservices” jest popularny w wielu firmach. Szczegółowe informacje znajdują się na blogu Martin’a Fowler’a, aczkolwiek na blogu chciałbym naszkicować koncepcję. Pomysł nie jest nowy, jednak pewne usystematyzowanie moim zdaniem ma sens. Dla mnie osobiście, to nic innego jak przestrzeganie zasady “Single rensponsibility” na poziomie usług. Wzorzec ma zastosowanie w systemach złożonych, SOA, a nie w prostych aplikacjach klient-serwer. Skrajnie zła sytuacja, to taka, w które...
Architektura 3552 dni, 6 godzin, 13 minut temu 672 źrodło rozwiń
by MJ Prototype design pattern. You should use it whenever you need to clone model classes. A simple example is when you have 1000 clients and you need to provide them invoices. Then, you only need to change e,g, names, surnames and total amount – you don’t need to create another invoice from the beginning. Again, the same situation is when your class is a parent for other classes – in this situation, it is not easy to create new – you should clone existing instance and then try to modify it. Here is a...
Architektura 4084 dni, 8 godzin, 54 minuty temu 122 źrodło rozwiń
Na Codeplex w dziale Patterns & Practices pojawił się poradnik dla osób, które chciałyby przenieść swoje aplikacje na platformę Windows Azure.
Architektura 5201 dni, 21 godzin, 18 minut temu 31 źrodło rozwiń