Recently I’ve had this idea that came into my mind while working on the Sentry – let the users of my library (if there will be any) to configure not only the set of rules, connection strings, urls etc. but also the underlying providers that do all of the heavy lifting (e.g. the HttpClient responsible for communicating with the API). It means that as long as you’re not satisfied with the default solution, please feel free to provide your own engine that will for example talk to the database and perform a ...
Sztuka programowania 3189 dni, 9 godzin, 45 minut temu 84 źrodło rozwiń
CQS stands for the command query separation. There’s a chance that you may have not heard about it, but on the other hand the CQRS might ring a bell. Even though these 2 patterns have very much in common, there is a significant difference (definitely a bigger one than the additional “R” character within the CQRS acronym) in how do they apply to the architecture of our system. In this post I’ll focus on the CQS – the older brother of the CQRS – that will help you understand how to design the software that...
Sztuka programowania 3200 dni, 5 godzin, 40 minut temu 178 źrodło rozwiń
In one of my previous posts I’ve told about my feelings for the repository pattern. Complaining about something is one thing (please, don’t even try to tell me, that you have never seen some piece of code, that made you cry like a baby), however, if we want to (pretend to) be professionalists, it is very important to come up with some ideas in order to solve the given problem (at least partially). In this post, I’ll present to you one of my solutions to the commonly misused repository pattern.
Architektura 3207 dni, 20 godzin, 14 minut temu 133 źrodło rozwiń
Many of the programmers falls into the trap of creating too many unnecessary abstractions in code, that may introduce even more chaos and maintenance issues, instead of simplifying overall project structure and providing some real benefit. One of such abstractions, that have been discussed countless number of times, is the (one and only) repository pattern.
Architektura 3209 dni, 19 godzin temu 238 źrodło rozwiń
Today I want to introduce a Circuit Breaker – one of the reactive design patterns, especially useful in areas such as web services interop. They main role is to act as a decorator around your code to ensure, that you can quickly respond on any reliability problems.
Sztuka programowania 3566 dni, 4 godziny, 19 minut temu 143 źrodło rozwiń
Today I want to present a different point of view on C# applications design. If you are programming in that language most of the time, it’s probably not what you’re used to see. However I found it interesting, because it allows to achieve a few important goals...
Sztuka programowania 3579 dni, 8 godzin, 50 minut temu 297 źrodło rozwiń
Agile Principles, Patterns, and Practices in C# by Uncle Bob is the best book about modern Software Development I have ever read. First section (chapters 1-6) is an Overview of Agile, Extreme Programming (XP), and TDD. Very good introduction to modern software development. Chapter 6. shows all these techniques by example, by creating “The Bowling Game” application...
Sztuka programowania 3608 dni, 4 godziny, 6 minut temu 247 źrodło rozwiń
Nieraz zdarza się, że musimy samodzielnie napisać jakąś klasę implementującą interfejs IDisposable. Wszyscy na pewno znają wzorzec implementowania Dispose. Osobiście proponuję inną implementację.
Jednym z częściej opisywanych zagadnień na blogach programistycznych są wzorce projektowe. Często jednak ich opisy są bardzo krótkie, bez przykładów konkretnego zastosowania w prawdziwym kodzie, a czasem nawet niepoprawne. Dzisiaj przedstawię jak wykorzystanie wzorców projektowych może przyczynić się do ograniczenia powtórzeń w kodzie testów. Nie będzie to wprowadzenie do tych wzorców (opisanych setki razy w innych miejscach), ale opis moim zdaniem nietypowego ich zastosowania.
Sztuka programowania 3860 dni, 19 godzin, 54 minuty temu 241 źrodło rozwiń
Kiedyś przeczytałem o antypaternie jakim jest tworzenie nowego typu wyjątku, który jest per aktualny projekt, czyli np. GitHubException, ktory dziedziczy z System.Exception i nie dodaje własnych pól ani zachowania. Tworzymy go ponieważ wszystko co już jest nie pasuje nam, a wiadomo, że rzucanie Exception też jest złem. Taki wyjątek nic nie wnosi. Łatwo powiedzi...
Sztuka programowania 4036 dni, 23 godziny, 35 minut temu 266 źrodło rozwiń
Chciałem przypomnieć prezentację Pawła Łukasika zatytułowaną Kurs programowania w C# – 24. Wzorce projektowe, która została nagrana 1,5 roku temu na VirtualStudy. Dużo się z niej nauczyłem zwłaszcza o antyzworcach. Ostatecznie pytanie o wzorce na pewno pojawi się na rozmowie o pracę, jeśli ktoś ma wątpliwości czy warto. Chociaż fakt lepszego zrozumienia jednego z najważniejszych pojęć powinien wystarczyć. Poniższy ry...
Sztuka programowania 4039 dni, 8 godzin, 16 minut temu 658 źrodło rozwiń
by MJ Decorator is a design pattern used to dynamically ”decorate” (e.g. add new actions) another classes. Let’s say that you have class which describes Window. It can be opened or closed. Then, you decide to decorate it with curtains or to clean it – you will do it yourself or hire somebody, who will be a decorator. Let’s create a simple project: 1) First of all, you need to add “Decorator” folder. Inside of this folder please create Window.cs class which will describe our window in the real world...
Architektura 4082 dni, 3 godziny, 53 minuty temu 168 ź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 4082 dni, 10 godzin, 42 minuty temu 122 źrodło rozwiń
by MJ Facade is one of design patterns which are used most frequently. To explain what it is and how to use it, we can compare it to a black box. In black box test, tester is only allowed to create the input and get the output. He doesn’t know anything about processing inside of the system. You will meet similar situation in Facade – you don’t want to show out the whole functionality, you need to create some kind of interface which enables user to use the functonality, but he cannot look into the syste...
Architektura 4086 dni, 23 godziny, 25 minut temu 179 źrodło rozwiń
Posted by slanto on Zastosowanie wzorca Decorator na przykładzie produktu i ofert specjalnych. Wzorzec ten pozwala nam na dynamiczną zmianę/rozszerzanie zachowania istniejących klas.
Architektura 4597 dni, 11 godzin, 29 minut temu 290 źrodło rozwiń
O to jest pytanie. Używać czy nie używać Repository Pattern? Ostatnio troszkę się nad tym zastanawiałem i doszedłem do solidnego wniosku: tak i nie. :) Wiadomo, że ktoś zawsze powie: "to zależy". A ja mu przytaknę. W malutkim projekcie nie ma sensu. W większym? Chcąc być purystą powinienem zrealizować cały dostęp do danych poprzez wartwę realizowaną na bazie Repository Pattern. Czy to ma sens? Co jeśli chcę tylko wyciągnąć imię i nazwisko ostatnio dodanego użytkownika? Czy na prawdę muszę pisać te wszys...
Architektura 4689 dni, 16 godzin, 52 minuty temu 267 źrodło rozwiń
NULL Object Pattern (Special Case)
Architektura 4760 dni, 9 godzin, 30 minut temu 186 źrodło rozwiń
Tak mnie wzięło na wzorce projektowe ostatnimi czasy, dzisiaj coś o o odwiedzającym (wizytatorze). Polska Wikipedia mówi o nim tak odwiedzający.
Architektura 4944 dni, 4 godziny, 24 minuty temu 275 źrodło rozwiń
Przeglądając wpisy na rożnych blogach oraz biorąc udział w dyskusjach na portalach, częstokroć napotykałem na dyskusje jak prawidłowo zaimplementować wzorzec singletona. Jeden z częstszych podawanych przykładów prezentuje poniżej.public sealed class Singleton { static Singleton instance=null; static readonly object padlock = new object(); Singleton() { } public static Singleton Instance { get { if (instance==null) { lock ...
Programowanie rozproszone środa, 28 października 2009 21:41:45 GMT 81 spam? źrodło rozwiń
Autor: Przypadkiem trafiłem na fajny cheetsheet zawierający zestawienie podstawowych wzorców projektowych, może się komuś przyda :)
Architektura 5545 dni, 2 godziny, 2 minuty temu 366 źrodło rozwiń