Bez zbędnego przeciągania i całego bałaganu związanego z założeniem nowego bloga i przywitania z czytelnikami, przechodzę do rzeczy. W obecnie pisanej przeze mnie aplikacji WPFowej zaistniała konieczność dodania testów dla użytkowników (nie mam na myśli unit testów, a testów sprawdzających jednokrotnego wyboru). Rozwiązaniem, jakie pierwsze przyszło mi do głowy, jest przechowywanie d...
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 3801 dni, 8 godzin, 47 minut temu 264 źrodło rozwiń
Zgodnie z powiedzeniem "im mniej wiesz, tym lepiej śpisz", postanowiłem napisać krótką notkę o tym, jak ukryć HelpPage w usłudze WCF. Warto wspomnieć na początku, że sporo się naszukałem w Google, żeby dowiedzieć się, że ta strona nazywa się HelpPage :- D Dla niewiedzących, mam na myśli to: Po wyłączeniu HelpPage'u, pozostaje nam ukryć WSDL. Jeśli tak jak w tym przypadku nasza usługa nie działa jako SOAP, możemy sobie pozwolić na ukrycie WSDL. Programistom piszącym aplikacje klienckie, będzie i tak ci...
Architektura 3803 dni, 16 godzin, 28 minut temu 120 ź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 3808 dni, 5 godzin, 23 minuty temu 212 źrodło rozwiń
Sprawa komunikowania klienta w usłudze WCF pracującej jako RESTful może nie być proste na pierwszy rzut oka, jednak chwila googlingu i sprawa okazała się banalna. Jak skonfigurować usługę WCF żeby działała jak RESTful? Nasz interfejs, oraz usługa wygląda mniej więcej tak: Interfejs: [ServiceContract] public interface Iv1 { [OperationContract] [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "user/{id}")] User g...
Architektura 3810 dni, 10 godzin, 11 minut temu 118 ź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 3822 dni, 14 godzin, 37 minut temu 231 źrodło rozwiń
Od pewnego czasu mam okazję budować system, którego część funkcjonalności dotyczy automatyzacji czynności administracyjnych związanych z zarządzaniem użytkownikami Active Directory. Jedną z takich czynności jest przełączanie skrzynek pocztowych Exchange 2007/2010 pomiędzy dwoma kontami użytkowników. W dzisiejszym wpisie pokażę, w jaki sposób zrealizować to zadanie wykorzystując Exchange Management Shell (EMS).
Dzisiaj całkowicie o podstawach ale jednak warto przypomnieć sobie słownictwo. Każdy kojarzy chyba wzorzec factory. Oficjalnie wyróżnia się jednak kilka typów tego wzorca. Najpopularniejsze z nich to Factory method oraz Abstract Factory. W podręczniku do wzorców projektowych, znajdziemy je jako dwie osobne konstrukcje. Czy to naprawdę tak ważne, aby znać różnice w nazewnictwie? Wzorce projektowe traktuję jako słownictwo. Zamiast wyjaśniać drugiej osobie, dokładnie co chcę napisać, używam wzorców projek...
Sztuka programowania 3864 dni, 6 godzin, 32 minuty temu 245 źrodło rozwiń
W jednym z tworzonych przeze mnie systemów pojawiła się konieczność dodania funkcjonalności pozwalającej na odblokowywanie kont użytkowników w Active Directory (zablokowanych na skutek kilkukrotnego podania błędnego hasła). Standardowa procedura odblokowania konta to wejście do konsoli Active Directory i zaznaczenie odpowiedniej opcji w ustawieniach danego użytkownika...
Jeśli zdarza się nam pracować z plikami .xaml i korzystamy z dobrobytu jakim jest bindowanie kod-widok (niezależnie od tego czy będzie to MVVM czy code behind), po pewnym czasie nadchodzi moment, gdy szlag nas trafia i musimy napisać po raz kolejny zamiast prostego ładnego property...
Kiedyś już o tym pisałem pobieżnie (kilka lat temu), ale dzisiaj chciałbym pokazać inny przykład wraz ze wszystkimi możliwymi parametrami. Stwórzmy najpierw klasyczny formularz i kontroler: @using (Html.BeginForm()) { @Html.DropDownList("selectedGroup",new SelectList(new []{"All","GroupA","GroupB"})) <input type="submit" value="Refresh"> } Prosty formularz z ComboBox i przyciskiem, który powoduje ponowne załadowanie strony oraz wykonanie metody GetData z nowym parametrem:public ActionResul...
In my pervious post I described basic multithreading constructs in C#. Now, I would like to compare them to conforming constructs in Java. It might be useful for those of you, who has already created some multithreaded applications in Java, and would like to learn how to do the same in C#.
Sztuka programowania 3881 dni, 16 godzin, 48 minut temu 207 źrodło rozwiń
W starszych wersjach .NET, do dyspozycji był m.in. strumień GZipStream. Do prostych zastosować wystarczał ale zwykle, trzeba było opakowywać go w swoje klasy, aby np. skompresować cały folder. Od .NET 4.5 mamy klasę ZipFile, która dostarcza kilka przydatnych metod. Najpierw należy dodać referencję do System.IO.Compression.FileSystem, a potem wystarczy skorzystać jednej ze statycznych metod...
Wspomniałem o właściwościach DirectorySearcher.SizeLimit oraz DirectorySearcher.PageSize, których poprawne ustawienie zapewnia, że z bazy danych AD można pobrać więcej obiektów niż ustawiony na serwerze limit. Tym razem chciałbym sprecyzować do czego służą obie właściwości bo moim zdaniem dokumentacja nie jest precyzyjna, co potwierdza zresztą spora liczba pytań w Internecie na ten temat. Otóż SizeLimit określa maksymalną liczbę obiektów jaka może zostać zwrócona w wyniku wy...
Najczęściej programiści korzystają z klasy Dictionary ale warto rozważyć dwie inne kolekcje. ListDictionary przechowuje dane na liście jednokierunkowej. Dla słowników z kilkoma kluczami zwykle jest to szybsze niż standardowy hash table, wykorzystywany w Dictionary. Szybciej jest po prostu przejść przez 10 elementów, niż liczyć skomplikowaną funkcję haszującą.
Dzisiejszy wpis o książkach, z których miałem okazję korzystać w ciągu ostatnich 12 miesięcy. Niektóre pozycje są warte polecenia, inne mniej, a niektóre w ogóle. Z książkami jest jeden podstawowy problem – bardzo szybko się starzeją...
Czytając jeden z ostatnich postów u Maćka zauważyłem, że w komentarzach pojawiła się krótka wymiana opinii na temat wyboru “właściwego” podejścia w kontekście korzystania z Entity Framework. Sam miałem okazję używać każdego z podejść oferowanych przez EF i z biegiem czasu zacząłem dostrzegać plusy i minusy poszczególnych podejść. W tym poście postanowiłem zebrać moje przemyślenia na ten temat.
.NET zawiera klasy przeznaczone do leniwej inicjalizacji i zwykle nie trzeba samemu implementować tego wzorca. Jeśli jakiś obiekt, chcemy inicjalizować dopiero w momencie, gdy jest on potrzebny to można skorzystać ze wspomnianych typów.
Jako, że ostatnimi czasy mam do czynienia ze współpracą pomiędzy aplikacją ASP.NET MVC, a Selenium , chciałbym się podzielić z Wami kilkoma przemyśleniami...