Dzisiejszy post jest sponsorowany przez hipotetyczną hurtownię, której właściciele chcą zbudować system zarządzania towarami w oparciu o metodykę DDD. Skrócony opis domeny biznesowej przedstawia się następująco. Hurtownia ma na stanie wiele produktów. Każdy produkt ma określoną ilość, która znajduje się w magazynie. Ilość ta jest określona w jednostce miary danego produktu. Produkty mogą być zamawiane (pewna ilość produktu jest tymczasowo przypisywana d...
Architektura 5574 dni, 21 godzin, 54 minuty temu 87 źrodło rozwiń
[PL] Having The Infrastructure vs having an infrastructure IIPoprzedni post dotyczący Infrastruktury wywołał całkiem sporą dyskusję w komentarzach. Właściwie to nie była dyskusja, bo wszyscy zgodzili się z moją tezą, że budowanie Infrastruktury przez duże "I" nie jest dobrą praktyką. Co jednak w sytuacji, kiedy mamy dostępną gotową bibliotekę, która spełnia wszystkie nasze aktualne i przyszłe (aż do przewidywanego kolapsu wszechświata) potrzeby? Z początku wydawało mi się, że odpowiedź jest prosta: bi...
Architektura 5584 dni, 2 godziny, 53 minuty temu 19 źrodło rozwiń
Pod tym angielsko brzmiącym tytułem kryje się jak najbardziej polska notka. Po prostu nie udało mi się znaleźć dobrego polskiego tłumaczenia (pewnie z powodu braku article-i). Do napisania zainspirował mnie tym razem Ayende, a szczególnie jeden z diagramów zamieszczony w tym poście. Bardzo częstym błędem większości początkujących architektów (a do takich chciałbym się zaliczać) jest kładzenie nacisku na Infrastrukturę. Wciąż pokutuje myślenie iż technologia jest lekarstwem na wszelkie problemy związan...
Architektura 5591 dni, 22 godziny, 16 minut temu 27 źrodło rozwiń
Pierwszy post z cyklu przygotowania systemu do wykorzystania mocków przy testach jednostkowych.
Architektura 5599 dni, 19 godzin, 14 minut temu 88 źrodło rozwiń
Czytając Agile: Principles, Patterns and Practices natknąłem się (dla posiadaczy książki - na stronie 252) na ciekawą tezę dotyczącą UML-owej relacji agregacji. Uncle Bob twierdzi, że relacja ta nie wnosi niczego do diagramu i odradza jej użycie. Co więcej, w sekcji dotyczącej kompozycji (następna strona) pada stwierdzenie, że definicja tej relacji (czas życia części jest ograniczony do czasu życia całości) jest bez znaczenia dla programisty C#, ponieważ istnieje garbage collector. Przyznam się szczerze...
Architektura 5605 dni, 23 godziny, 13 minut temu 73 źrodło rozwiń
Daniel o tym jak sprawnie możemy mock'ować nasz kod opatrzony widocznością internal bez zbędnego jego upubliczniania.
Architektura 5614 dni, 11 godzin, 30 minut temu 61 źrodło rozwiń
Jak w większości systemów budowanych w oparciu o DDD, tak i w naszym natrafiliśmy w końcu na problem poprawności obiektów modelu domeny. Na samym początku ograniczyłem się do przekazania programistom informacji, że dobry obiekt modelu powinien być zawsze poprawny. Pomyślałem, że jest to dobre pierwsze przybliżenie. Szczegółami zajmiemy się później. Szczegóły te miały, według moich przewidywań, dotyczyć walidacji zależnej od kontekstu, która sprawia, że Jeffrey Palermo nie wierzy w zasadę "always valid"....
Architektura 5619 dni, 17 godzin, 31 minut temu 63 źrodło rozwiń
Na wstępie chciałbym zaznaczyć, że w żadnym razie nie jestem ekspertem od DDD. Ja się wciąż i dopiero uczę i moje posty z serii "Mentoring DDD" są wyrazami tegoż procesu (samo)kształcenia. Dlaczego więc "mentoring"? Ano dlatego, że wspieram Domain Driven Design w mojej firmie poprzez konsultacje, pomoc duchową i cielesną. Staram się przewidywać problemyi zdobywać wiedzę na temat sposobów ich rozwiązania zanim się pojawią. Nie posiadam jednak (jeszcze) tej wiedzy w postaci przetworzonej w trwałe połączeni...
Architektura 5622 dni, 4 godziny, 1 minutę temu 80 źrodło rozwiń
Wzorzec memento pozwala na przechwycenie stanu obiektu i zachowanie go gdzieś na zewnątrz tego obiektu, dzięki czemu może być on później odtworzony....
Architektura 5623 dni, 3 godziny, 14 minut temu 220 źrodło rozwiń
Strongly-typed DisplayValue i DisplayMember / DataValueField i DataTextField Ileż to razy zmuszeni jesteśmy pisać kod temu podobny: list.ValueMember = "Id"; list.DisplayMember = "Name"; Na CodeGuru niejednokrotnie pytano o jakiś sposób na rozwiązanie tego problemu. Podawanie stringów jest ZŁE, niewygodne i bardzo podatne na błędy wszelakie. Zmiana nazwy właściwości rozwala UI, refactoring bez dodatkowych narzędzi jak Resharper potrafi napsuć sporo krwi (a i z pomocą R# wcale przyjemny nie jest...
Architektura 5626 dni, 14 godzin, 36 minut temu 45 źrodło rozwiń
Dziś pragnę się z Wami podzielić moim odkryciem. Być może dla niektórych z Was nie będzie to nowość, a jeśli nawet to nic specjalnego. U mnie jednak spowodowało sporo radości (profesjonalnej) i uczucie podziwu dla autorów NHibernate.
Architektura 5626 dni, 14 godzin, 36 minut temu 62 źrodło rozwiń
Druga notka na temat pojedynczej sesji TechEd i znów dotyczy prezentacji Juval-a Lowy. Tym razem na warsztat postanowiłem wziąć prezentację o nieco intrygującym tytule "The Zen of Architecture". W moim przekonaniu Lowy był gwiazdą tegorocznej edycji TechEd, przynajmniej jeśli chodzi o tematy mnie interesujące, czyli architektura, SOA i okolice.
Architektura 5629 dni, 22 godziny, 16 minut temu 20 źrodło rozwiń
Wydaje mi się, że była to najlepsza sesja na TechEd 2009, w jakiej miałem przyjemność brać udział, dlatego postanowiłem poświęcić jej osobną notkę. Wcześniej coś tam słyszałem o MEFie, ale na tyle mało, że chciałem dowiedzieć się więcej, szczególnie, że ta technologia znajduje się na liście moich “TODO” [ostatnio mam wrażenie, że ta lista raczej będzie się wydłużać niż skracać – przyp. autora]. O samej technologii dowiedziałem się, że jest to framework, który największy nacisk kładzie na rozszerzalność i...
Architektura 5629 dni, 22 godziny, 16 minut temu 81 źrodło rozwiń
Postanowiłem rozpocząć serię krótkich notek dotyczących Domain Drvien Design. Prosto z "pola bitwy", ponieważ mam to szczęście być architektem w projekcie, w którym wykorzystujemy DDD jako sposób projektowania poszczególnych modułów. Uparłem się na to DDD, to teraz mam.
Architektura 5632 dni, 12 godzin, 44 minuty temu 59 źrodło rozwiń
Moje pierwsze zetkniecie z Sandcastle nie było najszczęśliwsze – help file – potrzebny był ‘na wczoraj’ a tu, dostępną miałem linie poleceń i masę parametrów, których ilość nie nastrajała optymistycznie. Mówiąc krótko byłem zawiedzony. Minęło trochę czasu i znów zmuszony byłem stworzyć plik pomocy – postanowiłem ponownie spróbować Sandcastl’a. Cóż, jeśli chodzi o sam pakiet to niewiele sie w nim zmieniło – inny numerek, ale cały czas mało przyjazny dla użytkownika. To że ktoś zajmuje sie programowaniem n...
Architektura 5639 dni, 10 godzin, 37 minut temu 85 źrodło rozwiń
DO or not DO? DO jak Data Object, zwane także DTO – Data Transfer Object, VO – Value Object czy nawet Presentation Entity. Używać czy nie używać? Oczywiście nie spodziewajcie się jednoznacznej odpowiedzi, a jeśli już taka padnie to pewnie będzie dość subiektywna. Problem ten przewija się na wielu forach i stosowanie obiektów DTO ma ty...
Architektura 5652 dni, 32 minuty temu 45 źrodło rozwiń
Kompozyt (Composite) pozwala na takie zgrupowanie różnych obiektów, że mogą być one traktowane przez klienta w jednakowy sposób. Przykładem może być wyliczanie zawartości katalogu na dysku. Katalog może zawierać różne elementy: pliki, inne katalogi, drukarki...
Architektura 5652 dni, 15 godzin, 47 minut temu 123 źrodło rozwiń
Aplikacje typu REPL (Read, Execute, Print, Loop) są wykorzystywane w celu udostępnienia szybkiego środowiska uruchomieniowego dla kodu pisanego w języku X. Przykładami takich „konsol” jest chociażby konsola F# interactive, czy także konsole IPY i RP udostępnione przez IronPython i IronRuby. W aplikacjach typu REPL chodzi o to, że input wprowadzony przez użytkownika (READ) jest od razu przetwarzany i wykonywany (EXECUTE) zwracając wynik użytkownikowi (PRINT) dając mu możliwość wprowadzenia następnego ...
Architektura 5653 dni, 16 godzin, 9 minut temu 29 źrodło rozwiń
Czas zająć się wreszcie kwestią istotną, ale często traktowanąprzez wielu z nas po macoszemu, mianowicie transakcjami, a w zasadzie to zarządzaniem transakcjami. Każdy zdaję sobie sprawę z tego, że jest to bardzo ważny temat, ale nie do końca poświęcamy mu odpowiednią ilość czasu. W tym artykule chciałbym przybliżyć cały mechanizm zarządzania transakcjami jaki daje nam Spring....
Architektura 5654 dni, 17 godzin, 45 minut temu 63 źrodło rozwiń
Krótki opis wzorca Łańcuch odpowiedzialności (Chain of responsibility). Wzorzec Chain of Responsibility pracuje z listą obiektów (Handlerów), które implementują interfes IHandler. Handlery te uporządkowane są w łańcuch. Każdy Handler przyjmuje komendę (może to być implementacja wzorca projektowego Command) i jeśli potrafi to zrobić - obsługuje ją. Jeśli dany Handler nie może obsłużyć komendy, przekazuje ją następnemu elementowi w łańcuchu.
Architektura 5667 dni, 3 godziny, 29 minut temu 210 źrodło rozwiń