dotnetomaniak.pl - Artykuły z tagiem Patterns-Practicesdotnetomaniak.pl - Artykuły z tagiem Patterns-Practices2024-03-29T13:50:19Zhttps://dotnetomaniak.pl/Tags/Patterns-PracticesCopyright (c) dotnetomaniak.pldotnetomaniak.pl Atom Generatordotnetomaniak.pl webmasteradmin@dotnetomaniak.plhttps://dotnetomaniak.pl/Assets/Images/fav.icohttps://dotnetomaniak.pl/Assets/Images/dotnetomaniak_logo-negatyw_small.png20025https://dotnetomaniak.pl/Przechowywanie-zlozonego-typu-danych-w-bazie-na-przykladzie-Entity-Framework-CodestormPrzechowywanie złożonego typu danych w bazie na przykładzie Entity Framework - Codestorm2016-03-19T18:42:03Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_hGVcHyT1xEexwSStMjxIVg.png"/></div><div>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 ?</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Przechowywanie-zlozonego-typu-danych-w-bazie-na-przykladzie-Entity-Framework-Codestorm"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fcodestorm.pl%2f2016%2f03%2f19%2fprzechowywanie-zlozonego-typu-danych-bazie-przykladzie-entity-framework%2f" style="border:0px"/></a></div></div>Gveirhttps://dotnetomaniak.pl/Users/Xg3TCLFvZES0N43lyEBG3w2016-03-22T12:17:23Zhttps://dotnetomaniak.pl/Przechowywanie-zlozonego-typu-danych-w-bazie-na-przykladzie-Entity-Framework-Codestorm12630Po 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 ?http://codestorm.pl/2016/03/19/przechowywanie-zlozonego-typu-danych-bazie-przykladzie-entity-framework/http://dotnetomaniak.pl/Data/Thumbnails/small_hGVcHyT1xEexwSStMjxIVg.pnghttps://dotnetomaniak.pl/Jak-reprezentowac-kwoty-pieniedzy-w-kodzie-aplikacji-CodestormJak reprezentować kwoty pieniędzy w kodzie aplikacji? - Codestorm2016-03-17T19:46:27Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_OWUVKjVDaEKX3sLhZI3W-g.png"/></div><div>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.</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Jak-reprezentowac-kwoty-pieniedzy-w-kodzie-aplikacji-Codestorm"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fcodestorm.pl%2f2016%2f03%2f17%2freprezentowac-kwoty-pieniedzy-kodzie-aplikacji%2f" style="border:0px"/></a></div></div>Gveirhttps://dotnetomaniak.pl/Users/Xg3TCLFvZES0N43lyEBG3w2016-03-22T12:17:23Zhttps://dotnetomaniak.pl/Jak-reprezentowac-kwoty-pieniedzy-w-kodzie-aplikacji-Codestorm32680Problem 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.http://codestorm.pl/2016/03/17/reprezentowac-kwoty-pieniedzy-kodzie-aplikacji/http://dotnetomaniak.pl/Data/Thumbnails/small_OWUVKjVDaEKX3sLhZI3W-g.pnghttps://dotnetomaniak.pl/AKKANET-czas-zycia-aktorow-zdarzenia-hooksAKKA.NET – czas życia aktorów, zdarzenia (hooks)2015-12-04T20:47:50Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_wikFZXDb2ECRAAU2TZ9Mvw.png"/></div><div>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...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/AKKANET-czas-zycia-aktorow-zdarzenia-hooks"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2939" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-12-14T08:05:46Zhttps://dotnetomaniak.pl/AKKANET-czas-zycia-aktorow-zdarzenia-hooks2760Dzisiaj 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...http://www.pzielinski.com/?p=2939http://dotnetomaniak.pl/Data/Thumbnails/small_wikFZXDb2ECRAAU2TZ9Mvw.pnghttps://dotnetomaniak.pl/Code-review-Async-voidCode review: Async void2015-12-02T19:04:34Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_mfF8E7beB0SV16vDdN_Hkw.png"/></div><div>Tym razem zaczyna się od kodu i od razu dowiemy się dlaczego jest on niebezpieczny...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Code-review-Async-void"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2928" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-12-11T07:11:28Zhttps://dotnetomaniak.pl/Code-review-Async-void12420Tym razem zaczyna się od kodu i od razu dowiemy się dlaczego jest on niebezpieczny...http://www.pzielinski.com/?p=2928http://dotnetomaniak.pl/Data/Thumbnails/small_mfF8E7beB0SV16vDdN_Hkw.pnghttps://dotnetomaniak.pl/Programowanie-reaktywneProgramowanie reaktywne2015-11-27T22:09:16Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_u7XJ-WvaLkmPAIA7hDB4kQ.png"/></div><div>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.</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Programowanie-reaktywne"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2922" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-12-07T07:14:23Zhttps://dotnetomaniak.pl/Programowanie-reaktywne23090Zanim 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.http://www.pzielinski.com/?p=2922http://dotnetomaniak.pl/Data/Thumbnails/small_u7XJ-WvaLkmPAIA7hDB4kQ.pnghttps://dotnetomaniak.pl/Wielowatkowosc-przyklad-modelu-aktorWielowątkowość: przykład modelu aktor2015-11-14T12:12:04Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_aunsr8AfoU60w0ybmQIrLA.png"/></div><div>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.</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Wielowatkowosc-przyklad-modelu-aktor"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2898" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-11-24T08:48:30Zhttps://dotnetomaniak.pl/Wielowatkowosc-przyklad-modelu-aktor11890W 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.http://www.pzielinski.com/?p=2898http://dotnetomaniak.pl/Data/Thumbnails/small_aunsr8AfoU60w0ybmQIrLA.pnghttps://dotnetomaniak.pl/Wielowatkowosc-Wzorzec-aktor-actor-based-programmingWielowątkowość: Wzorzec aktor (actor based programming)2015-11-11T15:45:45Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_EEaDIakyp0OIJRtdrSkjSg.png"/></div><div>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.</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Wielowatkowosc-Wzorzec-aktor-actor-based-programming"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2893" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-11-20T07:59:12Zhttps://dotnetomaniak.pl/Wielowatkowosc-Wzorzec-aktor-actor-based-programming12970Aktor 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.http://www.pzielinski.com/?p=2893http://dotnetomaniak.pl/Data/Thumbnails/small_EEaDIakyp0OIJRtdrSkjSg.pnghttps://dotnetomaniak.pl/Metody-asynchroniczne-z-async-oraz-oczekiwanie-na-rezultatMetody asynchroniczne z async oraz oczekiwanie na rezultat2015-11-08T21:53:37Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_b-K10yk7MkyXYYA6DdbJuQ.png"/></div><div>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</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Metody-asynchroniczne-z-async-oraz-oczekiwanie-na-rezultat"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2890" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-11-17T10:57:16Zhttps://dotnetomaniak.pl/Metody-asynchroniczne-z-async-oraz-oczekiwanie-na-rezultat13160Coraz 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 Taskhttp://www.pzielinski.com/?p=2890http://dotnetomaniak.pl/Data/Thumbnails/small_b-K10yk7MkyXYYA6DdbJuQ.pnghttps://dotnetomaniak.pl/Producent-konsument-w-C-BlockingCollectionProducent-konsument w C# – BlockingCollection2015-10-17T07:26:35Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_oRPjicm2WE-OQhK29eaJoA.png"/></div><div>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...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Producent-konsument-w-C-BlockingCollection"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2831" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-10-26T07:27:39Zhttps://dotnetomaniak.pl/Producent-konsument-w-C-BlockingCollection23400BlockingCollection 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...http://www.pzielinski.com/?p=2831http://dotnetomaniak.pl/Data/Thumbnails/small_oRPjicm2WE-OQhK29eaJoA.pnghttps://dotnetomaniak.pl/Porownywanie-znakow-ToUpper-stringIndexOf-oraz-StringComparisonOrdinalPorównywanie znaków, ToUpper, string.IndexOf oraz StringComparison.Ordinal2015-10-11T09:14:26Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_H5NH0lthwUClETLwJchL7g.png"/></div><div>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...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Porownywanie-znakow-ToUpper-stringIndexOf-oraz-StringComparisonOrdinal"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2818" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-10-20T07:12:48Zhttps://dotnetomaniak.pl/Porownywanie-znakow-ToUpper-stringIndexOf-oraz-StringComparisonOrdinal11630Resharper 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...http://www.pzielinski.com/?p=2818http://dotnetomaniak.pl/Data/Thumbnails/small_H5NH0lthwUClETLwJchL7g.pnghttps://dotnetomaniak.pl/SpecFlow-data-driven-testingSpecFlow – data driven testing2015-06-03T18:48:26Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_w1Qy2_-n00uWYNOyics9lA.png"/></div><div>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...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/SpecFlow-data-driven-testing"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2564" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-06-11T06:56:43Zhttps://dotnetomaniak.pl/SpecFlow-data-driven-testing11240Nie 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...http://www.pzielinski.com/?p=2564http://dotnetomaniak.pl/Data/Thumbnails/small_w1Qy2_-n00uWYNOyics9lA.pnghttps://dotnetomaniak.pl/Kompatybilnosc-uslugKompatybilność usług2015-05-03T08:23:48Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_5rZYWtgE3k6YdnO3F4aKeQ.png"/></div><div>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...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Kompatybilnosc-uslug"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2524" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-05-12T21:03:37Zhttps://dotnetomaniak.pl/Kompatybilnosc-uslug12080Kompatybilność 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...http://www.pzielinski.com/?p=2524http://dotnetomaniak.pl/Data/Thumbnails/small_5rZYWtgE3k6YdnO3F4aKeQ.pnghttps://dotnetomaniak.pl/Richardson-Maturity-Model-warstwa-3-HATEOASRichardson Maturity Model, warstwa 3 – HATEOAS2015-04-25T10:42:00Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_nx5i-lbdIk27p-jaC5y6rQ.png"/></div><div>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...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Richardson-Maturity-Model-warstwa-3-HATEOAS"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2522" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-05-03T16:33:44Zhttps://dotnetomaniak.pl/Richardson-Maturity-Model-warstwa-3-HATEOAS22590Dzisiaj 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...http://www.pzielinski.com/?p=2522http://dotnetomaniak.pl/Data/Thumbnails/small_nx5i-lbdIk27p-jaC5y6rQ.pnghttps://dotnetomaniak.pl/ASPNET-Swashbuckle-SwaggerASP.NET Swashbuckle – Swagger2015-04-22T05:57:24Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_-0wAAXh2y0GLNBnJiBurVA.png"/></div><div>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.</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/ASPNET-Swashbuckle-Swagger"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2520" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-05-01T17:12:15Zhttps://dotnetomaniak.pl/ASPNET-Swashbuckle-Swagger11590W 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.http://www.pzielinski.com/?p=2520http://dotnetomaniak.pl/Data/Thumbnails/small_-0wAAXh2y0GLNBnJiBurVA.pnghttps://dotnetomaniak.pl/Co-to-jest-usluga-REST-Richardson-maturity-model-oraz-poziomy-012Co to jest usługa REST? Richardson maturity model oraz poziomy 0,1,2.2015-04-19T07:28:12Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_jZaiEAFWCkm440hVOBrO-A.png"/></div><div>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...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Co-to-jest-usluga-REST-Richardson-maturity-model-oraz-poziomy-012"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2514" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-04-28T19:02:43Zhttps://dotnetomaniak.pl/Co-to-jest-usluga-REST-Richardson-maturity-model-oraz-poziomy-01235290Martin 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...http://www.pzielinski.com/?p=2514http://dotnetomaniak.pl/Data/Thumbnails/small_jZaiEAFWCkm440hVOBrO-A.pnghttps://dotnetomaniak.pl/Noda-Time-testy-jednostkowe-oraz-obsluga-czasuNoda Time: testy jednostkowe oraz obsługa czasu2015-04-10T19:11:18Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_jkpccbZc5ka1SAhmV7QG-A.png"/></div><div>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).</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Noda-Time-testy-jednostkowe-oraz-obsluga-czasu"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2495" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-04-20T06:38:11Zhttps://dotnetomaniak.pl/Noda-Time-testy-jednostkowe-oraz-obsluga-czasu11470W 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).http://www.pzielinski.com/?p=2495http://dotnetomaniak.pl/Data/Thumbnails/small_jkpccbZc5ka1SAhmV7QG-A.pnghttps://dotnetomaniak.pl/Mikro-serwisy-wzorzec-gatewayMikro-serwisy: wzorzec gateway2015-04-07T07:14:59Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_-EOHCS8bbU6720hETbK_sA.png"/></div><div>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...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Mikro-serwisy-wzorzec-gateway"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2493" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-04-15T20:50:33Zhttps://dotnetomaniak.pl/Mikro-serwisy-wzorzec-gateway14110Najwię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...http://www.pzielinski.com/?p=2493http://dotnetomaniak.pl/Data/Thumbnails/small_-EOHCS8bbU6720hETbK_sA.pnghttps://dotnetomaniak.pl/Architektura-enterprise-Mikro-serwisyArchitektura enterprise: Mikro-serwisy2015-03-24T19:22:30Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_51YLsIXdgk2H3HSfpEDkGA.png"/></div><div>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...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Architektura-enterprise-Mikro-serwisy"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fwww.pzielinski.com%2f%3fp%3d2485" style="border:0px"/></a></div></div>rroszczykhttps://dotnetomaniak.pl/Users/2o4PgKTTaUiL_ds1o3Nhxg2015-04-03T09:16:30Zhttps://dotnetomaniak.pl/Architektura-enterprise-Mikro-serwisy26700Od 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...http://www.pzielinski.com/?p=2485http://dotnetomaniak.pl/Data/Thumbnails/small_51YLsIXdgk2H3HSfpEDkGA.pnghttps://dotnetomaniak.pl/World-of-IT-DESIGN-PATTERNS-PROTOTYPE[EN] World of IT | DESIGN PATTERNS – PROTOTYPE2013-10-08T07:01:51Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_BpWxHo0AGkqUc7uT3qlN2w.png"/></div><div>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...</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/World-of-IT-DESIGN-PATTERNS-PROTOTYPE"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fmjedrzejewski.wordpress.com%2f2013%2f10%2f08%2fdesign-patterns-prototype%2f" style="border:0px"/></a></div></div>jedmachttps://dotnetomaniak.pl/Users/7KyvFXm6jEKfK_iMgGl9vg2013-10-18T06:36:02Zhttps://dotnetomaniak.pl/World-of-IT-DESIGN-PATTERNS-PROTOTYPE11170by 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...http://mjedrzejewski.wordpress.com/2013/10/08/design-patterns-prototype/http://dotnetomaniak.pl/Data/Thumbnails/small_BpWxHo0AGkqUc7uT3qlN2w.pnghttps://dotnetomaniak.pl/Patterns-Practices-Windows-Azure-GuidancePatterns & Practices: Windows Azure Guidance2010-09-22T07:03:14Z<div><div><div style="float:right"><img alt ="" src="http://dotnetomaniak.pl/Data/Thumbnails/small_eUF5vWa5BUG-zNwAn4HJoA.png"/></div><div>Na Codeplex w dziale Patterns & Practices pojawił się poradnik dla osób, które chciałyby przenieść swoje aplikacje na platformę Windows Azure.</div></div><div style="padding-top:4px"><a rev="vote-for" href="https://dotnetomaniak.pl/Patterns-Practices-Windows-Azure-Guidance"><img alt="Podbij ↑" src="https://dotnetomaniak.pl/image.axd?url=http%3a%2f%2fcodeguru.pl%2fNewsList%2f1%2c18935%2fby_PublishDate%2fasc.aspx" style="border:0px"/></a></div></div>padudahttps://dotnetomaniak.pl/Users/lTTRaS97HESSQ6Bhm-gUxg2010-09-26T18:11:27Zhttps://dotnetomaniak.pl/Patterns-Practices-Windows-Azure-Guidance2310Na Codeplex w dziale Patterns & Practices pojawił się poradnik dla osób, które chciałyby przenieść swoje aplikacje na platformę Windows Azure.http://codeguru.pl/NewsList/1,18935/by_PublishDate/asc.aspxhttp://dotnetomaniak.pl/Data/Thumbnails/small_eUF5vWa5BUG-zNwAn4HJoA.png