Wszyscy dążymy do oprogramowania, które zawsze działa ale oczywiście musimy przygotować się na przypadki w których wystąpił wyjątek i nie wiadomo jak go obsłużyć. Najgorszą reakcją jest oczywiście pozwolenie aplikacji dalej działać co może spowodować nieoczekiwane efekty oraz popsuć po prostu dane. Musimy wszystko zrobić aby nie dopuścić do niespójności danych. W przypadku gdy wiemy, że aplikacja nie może kontynuować swojego działania musimy bezwzględnie zakończyć cały proces albo AppDomain. Należy po pr...
Sztuka programowania 4376 dni, 21 godzin, 39 minut temu 128 źrodło rozwiń
Dziś będzie opowieść… Co sądzą ludzie, którzy nie testują? Ja, dla przykładu, wierzę w Unit Testy. Kontrastowałem (podpytywałem) to ze stanowiskiem wielu osób. Niektóre osoby odpowiadały, że to nie działa. Następnie podały powody dlaczego tak uważają i od tych powodów chciałbym zacząć...
Sztuka programowania 4376 dni, 21 godzin, 39 minut temu 167 źrodło rozwiń
Struktura Nullable jest już dobrze znana w świecie .NET. Pozwala na zasymulowanie wartości NULL dla typów prostych (value types). C# posiada jednak wiele ułatwień, które chciałbym opisać w dzisiejszym poście. Prawdopodobnie wiele czytelników korzystało z nich ale nie wiedziała, że to ułatwienie ze strony kompilatora a nie samej struktury Nullable. Zacznijmy od kodu źródłowego Nullable:[Serializable, StructLayout(LayoutKind.Sequential)] publicstruct Nullable
Bindowanie to mechanizm wiążący dane z interfejsem je wyświetlającym. Mechanizm ten w WPF jest bardzo rozbudowany i oferuje możliwości nieosiągalne w prosty sposób dla Windows Forms.
Netmajor's Tech BlogHOMEO mnieKontaktWalidacja zdalna w ASP.NET MVC za pomocą atrybutu Remote W asp.net mvc pojawił się atrybut Remote, który nakładamy na pole z modelu zbindowanego do widoku.
Kontrolki WPF zostały przygotowane w ten sposób, aby łatwo można modyfikować ich wygląd. Definicję wyglądu oddzielono całkowicie od kodu definiującego funkcjonalność. Szablony kontrolek tworzone są w XAML-u. Szablon zawiera kompletny opis wyglądu danej kontrolki.
WPF umożliwia tworzenie dwóch typów kontrolek: User controls - kontrolki zbudowane przez użytkownika, dziedziczą po klasie UserControl. Jest to kontrolka stworzona z kilku innych kontrolek; Custom controls - kontrolki stworzone od zera. Dziedziczą po klasie Control lub ContentControl.
Każdy dobry (ten zły także) warsztat nie obędzie się bez odpowiednich narzędzi. Oto zestaw narzędzi, których ja używam.
Mobile development 4383 dni, 11 godzin, 40 minut temu 98 źrodło rozwiń
Dziś kolejny post z cyklu zastosowanie słowa kluczowego dynamic. Ostatnio pisałem o ExpandoObjet, który jest dynamicznym kontenerem na metody i dane. DynamicObject pozwala z kolei tworzyć wrappery na różne klasy. Zacznijmy od przykładu:internalclass Program { publicclass CustomWrapper : DynamicObject { publicoverridebool TryGetMember(GetMemberBinder binder, outobject result) { result ="Hello World"; returntrue; } publicoverridebool TrySetMem...
Sztuka programowania 4383 dni, 11 godzin, 40 minut temu 94 źrodło rozwiń
Rzezanie w czystym xml’u nie jest raczej przyjemne. Używnia XmlNode zamiast stringów nie jest wielkim pocieszem. Nie tędy droga. Dużo prościej stworzyć sobie obiekty które następnie będziemy serializować (deserializować) do XMLa.
Sztuka programowania 4383 dni, 11 godzin, 40 minut temu 106 źrodło rozwiń
Po ostatniej prezentacji dotyczącej Behaviour-Driven Development (BDD) postanowiliśmy przedstawić tą tematykę w bardziej przystępnej dla internautów formie. Stąd też poniższy wpis, gdzie zostaną przedstawione podstawowe założenia BDD, a już wkrótce pojawi się kolejny – opisujący zastosowanie tej metodyki w aplikacji ASP.NET MVC.
Sztuka tworzenia oprogramowania otoczona jest baaardzo wieloma "złotymi zasadami". Ich przestrzeganie nie gwarantuje co prawda sukcesu, lecz może znacznie poprawić jakość efektów naszej pracy. Chociażby SOLID... Dobrze jest zdawać sobie sprawę z tego, że nie tylko na poziomie kodu możemy pozytywnie wpłynąć na kształt projektu. Tak banalna pozornie sprawa jak sposób tworzenia commitów do systemu kontroli wersji może drastycznie zwiększyć komfort pracy nad systemem oraz ułatwić jego rozwijanie. Niestety sc...
W poprzednim wpisie omówiłem kilka mechanizmów walidacji wprowadzanych danych jakie oferuje technologia WPF. Dzisiaj rozszerzę ten temat o kwestie związane z formatowaniem danych oraz konwersją typów. Często zdarza się sytuacja, w której prezentując użytkownikowi pewne dane chcemy określić dla nich własny format. Równie często konieczne jest skonwertowanie wartości wprowadzonej przez użytkownika na docelowy typ danych.
Kiedyś już wspomniałem o słowie kluczowych dynamic. W tym i następnych wpisach chciałbym przedstawić praktyczne zastosowanie tego mechanizmu. Na koniec wyjaśnię, jak dynamic jest zaimplementowany przez CLR i jak bardzo spowalnia aplikację… Programiści używający ASP.NET MVC z pewnością rozpoznają zasadę działania ExpandoObject. Klasa umożliwia tworzenie dynamicznych kontenerów. Na przykład:privatestaticvoid Main(string[] args) { dynamic bag =new ExpandoObject(); bag.FirstName ="Piotr"; bag.LastN...
Sztuka programowania 4385 dni, 15 godzin, 14 minut temu 109 źrodło rozwiń
Kilka postów wcześniej pisałem o różnicach między const a read-only. Dzisiaj chciałbym pokazać scenariusz, który pokazuje kiedy NIE używać słowa const. Const jest doskonałym rozwiązaniem dla liczb, które są po prostu ZAWSZE stałe. Przykład? Liczba PI ma jedną wartość i oczywiście nigdy się nie zmieni. Istnieją jednak przypadki gdzie liczby w kodzie są zastępowane stałymi co nie zawsze jest dobrym wzorcem. Rozważmy, że mamy klasę przechowującą pewne parametry algorytmu:namespace ClassLibrary1 { publ...
Sztuka programowania 4389 dni, 7 godzin, 22 minuty temu 153 źrodło rozwiń
W teorii są 3 rodzaje kontraktów. Podejdę wg mnie praktycznie i opowiem głównie o pierwszym (Requires), z pozostałych dwóch rzadko kto korzysta. Requires używa się do sprawdzania argumentów przekazanych do metody.
Sztuka programowania 4389 dni, 7 godzin, 22 minuty temu 118 źrodło rozwiń
Z Gitem pracuję na co dzień już dobre trzy lata, czy nawet więcej. I kocham ten soft. Uważam go za najlepsze narzędzie z jakim kiedykolwiek spotkałem się w swojej programistycznej karierze - we wszystkich kategoriach. Nic nigdy aż tak bardzo mi nie zaimponowało. Zresztą rozwodzić się nie będę - o tym można poczytać we wszystkich moich postach dotyczących Gita. Nie mam jednak w zwyczaju wpadać w jedno narzędzie i od razu zakładać, że jest ono "the only one". Z tego też powodu do projektów pobocznych przez...
Binduj ValueMember i DisplayMember dla ComboBoxa (DropDownList) używając refleksji zamiast błędogennych stringów.
Sztuka programowania 4389 dni, 10 godzin, 28 minut temu 97 źrodło rozwiń
Od dłuższego czasu pracuję nad czytnikiem książek w formacie EPub dla Windows Phone. Niestety .NET to nie Java i ilość dostępnych komponentów nie jest taka duża jak u starszego brata. Ponieważ nie znalazłem żadnego projektu open source czytnika postanowiłem sam go napisać co wynikało z zamówienia klienta. A sam open source ma pomóc w testowaniu komponentu i developerce.
Mobile development 4390 dni, 22 godziny, 13 minut temu 50 źrodło rozwiń
Dziś trochę o formatowaniu tekstu. Można je wykonać na wiele sposób. Osoby nie znające powyższych interfejsów zwykle tworzą własne metody zwracające wynik w odpowiednim formacie. Załóżmy, że mamy następującą klasę:class PhoneNumber { privatereadonlystring _extension; privatereadonlystring _phoneNumber; public PhoneNumber(string extension,string phoneNumber) { _extension = extension; _phoneNumber = phoneNumber; } } Na przykładzie powyższej klasy będę starał się po kolei pr...
Sztuka programowania 4390 dni, 22 godziny, 13 minut temu 104 źrodło rozwiń