Refaktoryzacja – ot kolejne popularne słowo…. nie zupełnie. Pisząc software nie zawsze dokładnie wiemy jak on będzie wyglądał i co finalnie będzie robił – tzn. w danej chwili (zdefiniowanym kwancie czasu, żeby brzmieć mądrzej) zawsze wiemy co będzie robił, tylko z dalszej perspektywy mentalnej – tj. po dłuższym okresie może się okazać, że robi coś zupełnie innego niż początkowo zakładaliśmy. Oczywiście nie ma w tym nic złego, przecież wszyscy jesteśmy teraz agile jednak nie wiedząc co fina...
Jedną z ogromnych zalet programowania obiektowego jest to, że raz napisany kod możemy łatwo rozszerzyć o dowolne konstrukcje, lub stworzyć zupełnie coś nowego na jego podstawie. W tym przypadku chodzi mi głównie o kwestię dziedziczenia, która ma swoje wady i zalety. W tym przypadku bardziej chciałbym skupić się na tych pierwszych. Dziedziczenie nie zawsze jest do końca dobrym rozwiązaniem, ponieważ w C# możemy rozszerzać tylko jedną klasę (ale za to na szczęście możemy implementować dowolną ilość interf...
Architektura 4247 dni, 3 godziny, 1 minutę temu 165 źrodło rozwiń
O destruktorach pisałem już kilka razy na blogu. W wielkim skrócie – zawsze należy przemyśleć decyzje o implementacji Finalize ponieważ wiąże to się z spadkiem wydajności (obiekt może być nawet “wypromowany” do drugiej generacji GC). Czasami jednak zachodzi taka potrzeba – głównie w przypadku użycia niezarządzanych zasobów. CriticalFinalizerObject daje nam jeszcze kilka dodatkowych gwarancji. Przed przeczytaniem tego wpisu, polecam zapoznanie się z poprzednim postem o CER. Co zatem da nam dziedziczenie ...
Sztuka programowania 4247 dni, 9 godzin, 9 minut temu 82 źrodło rozwiń
Do tej pory udało nam się zrefaktoryzować dwie metody sprowadzając je do jednej i koniec końców uczynić składową dedykowanej klasy. Pozostały jeszcze dwie: odczytująca pliki tekstowe, w których wartości mają ściśle określone położenie w linii oraz odczytująca pliki binarne o dedykowanym formacie. Przyjrzyjmy się jeszcze raz metodzie unifikującej odczyt z plików rozdzielanych dowolnym separatorem ...
Sztuka programowania 4247 dni, 21 godzin, 12 minut temu 54 źrodło rozwiń
W zeszłym tygodniu internety obiegła wiadomość, jakich mało: Microsoft oficjalnie uznał przewspaniałość Gita! Może jednak przyjdzie kiedyś czas, gdy nie będę musiał się wykłócać ze zwolennikami TfuFSa i tłumaczyć po milion razy jak to narzędzie, a szczególnie jego utrata kontroli nad wersją, jest bardzo, bardzo złe, słabe i szkodliwe?
Kolejna cześć artykułu o wydajności w C#. Zapraszam do lektury!
Sztuka programowania 4248 dni, 7 godzin, 18 minut temu 202 źrodło rozwiń
Tak jak obiecałem, dziś kolejna część "kursu" przygotowującego do egzaminu MCSD: 70-480. W niniejszym poście, zajmiemy się wprowadzoną w CSS3, możliwością dokonywania transformacji elementów HTML. Dziś skupimy się tylko podstawowych możliwościach tego "ficzera" CSS3 (konkretnie na transformacjach 2D), ponieważ temat ten, będzie dużo dokładniej omówiony później, w części poświęconej animacjom. Większość swojego wpisu oparłem na tym co można znaleźć na stronach w3schools.com. A więc zaczynamy!Transformacj...
tl;tr; How to reset migrations in Entity Framework
Bazy danych i XML 4250 dni, 4 godziny, 41 minut temu 112 źrodło rozwiń
Nie, nie nawiązuje tutaj to wspaniałego meczu Polska – Irlandia gdzie Polacy pokazali po raz kolejny, że są piłkarzami… wannabe. Modern.ie to projekt ms, a, że tyczy on IE to stwierdzili, że wykupią domenę irlandzką. I tyle zależności. Kropka :)
W ostatnim poście marudziłem na management. Zwalanie na management ma tą zaletę, że zwalnia nas programistów z odpowiedzialności. To jest ICH wina, to ONI doprowadzili do takiego a nie innego stanu i tak dalej i tak dalej. Pułapką takiego zachowania jest “wymówka”. Wymówka przenosi naszą odpowiedzialność na kogoś lub coś innego. Wymówka jest świetna bo wybiela nas. Na konferencji 33 degree trafiłem ciasteczko z wróżbą o takiej treści: W życiu ma się albo wymówki albo wyniki Dlatego pora ...
Zadanie jest następujące: Na podstawie poniższego schematu (baza AdventureWorksLT) wyznaczyć wartość zamówienia. Dodać kolumny z id klienta i zamówienia (bez uwzględnienia podatku, obniżek itp). W zapytaniu wykorzystamy GroupJoin. Zapytanie to zapiszemy w dwóch postaciach LINQ2SQ: metodowej oraz SQLo podobnej...
Na początek kod: [TestClass] public class CPU_Pipelining_tests { const int DATALENGTH = 1024 * 1024 * 50; const int REPEATS = 3; ...
Kolega przeprowadzał kiedyś zdalne interview z programistą. W teorii wszystko było jak należy – ziomek interesował się zagadnieniami spoza pracy czysto zawodowej, prowadził bloga, używał Resharpera… No i właśnie przy Resharperze pojawiło się pierwsze zaskoczenie: używał go za pomocą MYSZKI! WTF? Normalnie Mouse Driven Development I...
Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 9.
Tak jak obiecałem zajmiemy się teraz przetestowaniem powstałej klasy. Również tym razem wykorzystamy mechanizm automatycznych testów Visual Studio 2010. Czy możemy skorzystać z poprzedniego zestawu testów? Niespecjalnie, nie testujemy już metod, ale konkretną klasę. Poza tym – proszę zauważyć, że nie tworzymy już XML-a, zatem porównanie z plikiem zawierającym XML nie ma szans na pozytywny wynik...
Sztuka programowania 4252 dni, 22 godziny, 58 minut temu 56 źrodło rozwiń
Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 8.
Oto nadszedł moment, aby zająć się refaktoryzacją samego importu danych. Sprawa się jednak komplikuje, albowiem fragmenty kodu odpowiedzialnego za odczyt i interpretację zawartości nie są we wszystkich metodach takie same. Ale dwie z metod są praktycznie identyczne – co stwierdziliśmy przygotowując listę funkcjonalności realizowanych przez metody. Zaczniemy więc od tych metod, być może po ich zunifikowaniu do jednej i w konsekwencji zredukowaniu liczby wszystkich metod do trzech, uda się ...
Sztuka programowania 4253 dni, 4 godziny, 28 minut temu 64 źrodło rozwiń
Z pewnością każdy z Was odpowiedziałby, że pisze solidny kod. Oczywiście zależy to od przyjętych metryk i definicji “solidny kod”. Nie zawsze warto skupiać uwagę na drobiazgach i pułapach, których jest na prawdę wiele. Czasami jednak jest to konieczność, głównie w aplikacjach serwerowych, które muszą działać, nawet, gdy dostarczone dane są np. nieprawidłowe. W przypadku awarii, niedopuszczalne jest wtedy zepsucie stanu aplikacji. Rozważmy, taką sytuację:try { // jakaś logika} catch(IOException e) { ...
Sztuka programowania 4253 dni, 4 godziny, 28 minut temu 185 źrodło rozwiń
W kolejnym odcinku mojego "kursu" przygotowującego do egzaminu MCSD 70-480, zajmiemy się możliwościa tworzenia w locie, za pomocą języka JavaScript, grafiki osadzonej na stronie www - to wszystko dzięki nowemu w HTML5 znacznikowi
Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 6.
Do tej pory udało nam się wyodrębnić kod do refaktororyzacji do oddzielnego pliku i przygotować automatyczne testy, które będą zabezpieczeniem przed naruszeniem funkcjonalności kodu. W toku tych działań umknęła jednak jedna kwestia...
Sztuka programowania 4253 dni, 15 godzin, 9 minut temu 57 źrodło rozwiń
Zadanie jest następujące. Mamy w pliku tekstowym dane zawierające m.in datę z góry w zdefiniowanym formacie a mianowicie 2012/10/05 (piąty październik 2012). Dla uproszczenia, ograniczymy się tylko do dnia, miesiąca i roku, bez czasu. Pierwsze podejście, najgorsze mogłoby wyglądać następująco:string timestamp =""; DateTime dateTime = DateTime.Parse(timestamp); Console.WriteLine(dateTime); Dlaczego jest to niepoprawne? W niektórych ustawieniach regionalnych (np. USA) format jest następujący “yyyy/dd/M...
Sztuka programowania 4254 dni, 3 godziny, 58 minut temu 196 źrodło rozwiń