Wiele razy pisałem już o słowach async\await i z pewnością ułatwiają one życie. Dla przypomnienia rozważmy kod:private async void DownloadAndSortAsync() { int[] allNumbers = await DownloadNumbersAsync(); int[] sortedNumbers = await SortNumbersAsync(allNumbers); MessageBox.Show(string.Join(“,”,sortedNumbers)); } private Task
Sztuka programowania 2892 dni, 17 godzin, 9 minut temu 194 źrodło rozwiń
W ostatnim poście było o SpecsFor, jako alternatywy dla SpecsFlow. Pokazane przykłady były ogólne i nie dotyczyły konkretnej technologii. Z BDD bardzo często korzysta się w celu przetestowania UI. W końcu wpisywane scenariusze, odzwierciedlają typową interakcję użytkownika z aplikacją. Osoby nietechniczne zwykle definiują wymagania z punktu widzenia użytkownika a nie wewnętrznej infrastruktury, która oczywiście nie jest im znana w szczegółach. Dla aplikacji ASP.NET MVC powstał SpecsFor MVC. Dobra wiadom...
Sztuka programowania 2896 dni, 11 godzin, 30 minut temu 120 źrodło rozwiń
Przez kilka ostatnich wpisów poruszałem temat BDD, a konkretniej jednego z framework’ow – SpecFlow. Dzisiaj o kolejnym rozwiązaniu, które jest przydatne, gdy programiści definiują specyfikacje. SpecsFor można zainstalować standardowo z NuGet: Załóżmy, że będziemy rozpatrywać następujący kod...
Sztuka programowania 2900 dni, 7 godzin, 6 minut temu 161 źrodło rozwiń
Scenka1 Facet idzie sobie przez las i napotyka gościa wycinającego siekierą choinki - Panie co pan robisz! Dlaczego dewastujesz las? Nie dewastuję lasu tylko zaciągam dług leśny. Będą święta, na choince powieszę bombki to rodzina będzie zadowolona. No a później posadzę nowe choinki w to miejsce. A kiedy to zrobisz? no za trzy sprinty... Scenka2 Facet idzie sobie przez osiedle i spotyka gościa, który wywala gruz do piaskownicy - Dlaczego dewastujesz plac zabaw? Nie dewastuję placu zab...
Sztuka programowania 2903 dni, 7 godzin, 51 minut temu 422 źrodło rozwiń
Let me = “introduce F#” If you wonder which programming language is the best I unfortunately have to disappoint you. There is no such thing as “the best programming language” or “the most powerful one”. Additionally, there is also no universal language which could satisfy all needs and be efficient in literally every field. Universal languages, such as very popular C#/Java, could address most, if not all, common programming tasks. However, those languages could be easily outdone by other dedicat...
Sztuka programowania 2911 dni, 21 godzin, 5 minut temu 115 źrodło rozwiń
Zastanawiacie się co to takiego ten tunel kodu? Otóż chodzi tutaj o specyficzny stan świadomości, z dużym skupieniem i widzeniem tunelowym, w który mogą wejść programiści tworzący kod. Można o nim przeczytać np. w książce autorstwa Roberta C. Martina "Mistrz czystego kodu. Kodeks postępowania profesjonalnych programistów", choć tam nosi on nazwę strefy lub przepływu (flow). Zgodnie z opisem we wspomnianej książce, stan ów charakteryzuje się tym, że znajdujący się w nim programiści czują się ...
Sztuka programowania 2919 dni, 12 godzin, 6 minut temu 307 źrodło rozwiń
Metody rozszerzające i ich ciekawa właściwość...
Sztuka programowania 2920 dni, 9 godzin, 55 minut temu 415 źrodło rozwiń
Ten post jest częścią cyklu o Dependency Injection. Ostatnim razem rozstaliśmy się w takim napięciu, że aż jeden z Czytelników nazwał to cliffhangerem (nauczyłem się nowego słowa!). Zanim jednak zaczniemy przyglądać się rozwiązaniu naszej niewesołej sytuacji (nie kompiluje się, buuu): chwila refleksji i nader trafnego (a jak!) porównania. Znacie te potworki przedstawione na obrazku? Matrioszka. Ruska drewniana baba...
Sztuka programowania 2925 dni, 9 godzin, 15 minut temu 280 źrodło rozwiń
Game programming with F#, C# and SFML – GameLoop Posted on by Michal Franc I am a F# apprentice. The best way to learn new language is to do some project. That’s why I have started to code one game idea that was following me for some time. Core concept: sci-fi settingroguelikeinspired by: dwarf fortressprison architectcataclysm dda Because I don’t care about the graphics but the game-play, the graphic I am going to use will be an ASCII styles tile set. You know symbols, characters, letters and some...
Sztuka programowania 2925 dni, 9 godzin, 15 minut temu 180 źrodło rozwiń
Rozważmy przez chwilę scenariusz wysyłania wiadomości e-mail. A raczej tą część procesu, w której generowana jest treść. W tagu demo3-finish mamy taki interfejs: public interface IEmailService { void RegistrationEmail(string email, string link); } (https://github.com/maniserowicz/di-talk/blob/demo3-finish/src/app/EmailService.cs) Jego implementacja powinna zająć...
Sztuka programowania 2931 dni, 14 godzin, 28 minut temu 262 źrodło rozwiń
OK – mamy niektóre “odpowiedzialności” wyjęte do osobnych klas. Ale co dalej? Czy UsersController powinien sam, ot, tak sobie, tworzyć nowe instancje których aktualnie potrzebuje? Nie! Pójdę o krok dalej i powiem więcej: użycie słowa kluczowego “new” w kodzie aplikacji uznaję za anti-pattern. Howgh, rzekłem. Jeżeli klasa potrzebuje innej klasy do działania, to ta zależność powinna być jawnie wyeksponowana w kodzie. Najlepiej przez param...
Sztuka programowania 2938 dni, 11 godzin, 5 minut temu 210 źrodło rozwiń
O finalizers czy też destruktorach pisałem już wielokrotnie. Wspomniałem również, że lepiej ich unikać, jeśli oczywiście to możliwe. Głównym problem jest możliwość wypromowania obiektu do kolejnych generacji, ponieważ obiekty z destruktorami są umieszczane w kolejce freachable, gdzie na nową stają się osiągalne. Jeśli ktoś nie pamięta, to polecam najpierw poczytanie o tym (w dziale articles są linki do moich tekstów o GC). Dzisiaj jednak chciałbym wspomnieć o czymś innym. Wiemy, że jeden wątek zwykle m...
Sztuka programowania 2938 dni, 11 godzin, 5 minut temu 156 źrodło rozwiń
Kiedyś na stronach MS widziałem rekomendację mówiącą “używaj typów wyjątków dostarczanych przez framework”. Jakiś czas temu, na jakimś polskim chyba blogu, przeczytałem tego powtórkę. Wiecie co? U mnie się doskonale sprawdza kompletne przeciwieństwo tej praktyki. Zawsze w swoich aplikacjach staram się mieć jeden bazowy typ wyjątku, abstrakcyjna klasa MyAppException: Exception. Dzięki temu jestem w stanie wyłapać wszystko co rzuca mój...
Sztuka programowania 2940 dni, 15 godzin, 52 minuty temu 253 źrodło rozwiń
The topic of custom exceptions is surprisingly controversial. Some argue that exceptions shouldn't be used for anything related to "business", while others (me included) say that exceptions like InsufficientFunds are fine - I even wrote a whole chapter about using custom exceptions to simplify controllers in my Rails Refactoring book. I've read an interesting blog post today about custom exceptions (here - unfortunately it's in Polish), where the author advocates for using "business exceptions". ...
Sztuka programowania 2940 dni, 15 godzin, 52 minuty temu 147 źrodło rozwiń
Zanim zajmiemy się faktycznym wstrzykiwaniem zależności, to najpierw musimy mieć co wstrzykiwać! Statycznej klasy nie wstrzykniemy przecież, jakkolwiek byśmy wstrzykiwać nie chcieli. Na początek zatem: zidentyfikujmy składowe procesu rejestracji użytkownika, które w ogólnie nie powinny znajdować się w kontrolerze. Pewniakiem jest tutaj walidacja poprawności adresu e-mail. Nie dość, że bardzo ładnie da się to...
Sztuka programowania 2946 dni, 16 godzin, 33 minuty temu 191 źrodło rozwiń
W poprzedniej części dokonałem kolejnego odwrócenia – tym razem zależności. W tej – choć będzie o wstrzykiwaniu – odwracać się do tego zabiegu nie będzie trzeba ;). Wręcz przeciwnie (by nie rzec odwrotnie) to wstrzykiwanie pomoże w odwracaniu i to zarówno zależności jak i sterowania (kontroli). Jeśli więc chcecie dowiedzieć się jak to możliwe – nie ma odwrotu, należy przeczytać niniejszy wpis :D ...
Sztuka programowania 2946 dni, 16 godzin, 33 minuty temu 179 źrodło rozwiń
Dzisiaj dosyć ważne zagadnienie, a mianowicie filtry autoryzacji. Stosuje się je po to, aby wymusić autoryzację danej akcji i w razie braku autoryzacji po prostu ją zablokować.
Sztuka programowania 2952 dni, 20 godzin, 18 minut temu 198 źrodło rozwiń
Last time I finished on negative values requirement. This will be the “almost” last part of the series about String Calculator Kata. There was some interest in more practical TDD examples in business context with services, layers, mocks and external dependencies like database. I will start next series to cover scenarios like that. Current kata is...
Sztuka programowania 2952 dni, 20 godzin, 18 minut temu 59 źrodło rozwiń
W tym odcinku skupiam się na stanie aplikacji przed jakimikolwiek procesami “upiększającymi”. Aplikacja, którą mamy upiększyć, została do celów demonstracyjnych zbudowana dość nietypowo. Nie jest to web app, nie jest to nawet console app. Jest to jedna z...
Sztuka programowania 2952 dni, 20 godzin, 18 minut temu 228 źrodło rozwiń
Poprzednio odwracałem sterowanie (lub kontrolę, jak kto woli). Dzisiaj pora odwrócić zależność. Zasada odwracania zależności (Dependency Inversion Principle) to ostatnia (licząc wg porządku liter w nazwie) z zestawu zasad SOLID. O co więc chodzi z tą zależnością i na czym tak naprawdę polega jej odwracanie? Najlepiej będzie zademonstrować to na przykładzie. Oglądaliście "Seksmisję" (to już 30 lat od jej premiery)? Był w niej...
Sztuka programowania 2952 dni, 20 godzin, 18 minut temu 207 źrodło rozwiń