W poprzedniej części cyklu utworzyliśmy klasę realizującą wzorzec metody szablonowej. Obecnie będziemy tworzyć klasy potomne, implementujące konkretne typy importu. Warto zauważyć, że w toku dotychczasowych rozważań – czego właściwie nie podkreśliłem – zarysował się ciekawy schemat. Wszystkie pliki tekstowe (o wartościach rozdzielonych separatorem czy o ustalonej długości) są obsługiwane tak samo – inaczej są jedynie interpretowane ich zawartości. Można skorzystać z tej obserwacji i wykorzystać ją ...
Sztuka programowania 4322 dni, 23 godziny, 22 minuty temu 51 ź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 4324 dni, 21 godzin, 25 minut temu 54 źrodło rozwiń
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 4329 dni, 23 godziny, 11 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 4330 dni, 4 godziny, 41 minut temu 64 źrodło rozwiń
Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 7.
Zgodnie z zapowiedzią z poprzedniej części, pora przystąpić do definiowania stosownych interfejsów. Zaczniemy od interfejsu wyboru pliku – zgodnie z planem, który ukształtował się w trakcie dotychczasowych rozważań. Jak powinien wyglądać taki interfejs? Jak wiadomo interfejsy definiują pewien zakres funkcjonalności, specyfikują: potrafię robić takie, a nie inne rzeczy – to są moje umiejętności. Jakie powinny być zatem umiejętności interfejsu wyboru pliku? Przyjrzyjmy się dowolnej z czterech metod i ...
Sztuka programowania 4332 dni, 7 godzin, 4 minuty temu 50 źrodło rozwiń
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 4330 dni, 15 godzin, 22 minuty temu 57 źrodło rozwiń
Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 5.
W tej części cyklu przygotujemy testy dla wszystkich metod klasy MethodObject, ale najpierw musimy znaleźć powód niezaliczania pierwszego z przygotowanych testów – testu metody ImportCSV(). Najszybszym i najprostszym sposobem będzie skorzystanie z uruchamiania krokowego, skoro test nie jest zaliczany, to pierwszym, co należy sprawdzić jest kryterium jego zaliczania. Sprawdzimy zatem czy ...
Sztuka programowania 4336 dni, 23 godziny temu 94 źrodło rozwiń
Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 4.
W poprzedniej części niniejszego cyklu mimo usilnych starań nie udało się doprowadzić do przygotowania testów mających kontrolować refaktoryzowany kod. W tej części – mogę to obiecać – testy wreszcie powstaną. Przygotowania testów, zniweczyło występowanie we wszystkich czterech metodach wywołania statycznej metody Show() klasy MessageBox. Co począć z tym wywołaniem? Najbezpieczniejszym rozwiązaniem będzie ...
Sztuka programowania 4336 dni, 23 godziny temu 53 źrodło rozwiń
Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 3.
Dotychczasowe działania refaktoryzacyjne doprowadziły do wydzielenia refaktoryzowanego kodu do oddzielnej klasy, w oddzielnym pliku. Aby bezpiecznie przeprowadzić dalsze modyfikacje konieczne jest uzyskanie wiarygodnego mechanizmu weryfikującego ich poprawność. Po prostu potrzebne są testy. W jaki sposób przetestować metody importujące dane? Najlepiej dokonać za ich pomocą importu i sprawdzić czy zaimportowany plik daje oczekiwane dane. Przyglądając się poszczególnym metodom można zauważyć, że wszystkie ...
Sztuka programowania 4336 dni, 23 godziny temu 105 źrodło rozwiń
Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 2.
Co należy w pierwszej kolejności zrobić z kodem opublikowanym w pierwszej części? Skoro ma on ulegać zmianom, dobrze by było, aby nie odbywały się one w dotychczasowym pliku przechowującym kod, ale w pliku dedykowanym tylko tym zmianom. Należy zatem przenieść kod, który będzie modyfikowany do innego pliku. Myli się jednak ten, kto myśli, że wykorzystana zostanie do tego...
Sztuka programowania 4336 dni, 9 godzin, 26 minut temu 106 źrodło rozwiń
Istnieje zalecenie, aby tworząc terminologię opierać ją na już istniejącej czy to w danym języku i jego bibliotekach, czy też w samym projekcie. Nazywając klasy, które implementują jakiś wzorzec należy w ich nazwach używać nazwy tegoż wzorca, bo to pozwoli czytającemu gładko zinterpretować przeznaczenie klasy. Trudno się z tym zaleceniem nie zgodzić, jest ono oczywiste wręcz na poziomie podświadomości. Jak to jednak z zaleceniami bywa, w teorii wyglądają one przepięknie, kiedy jednak człowiek przechodzi...
Sztuka programowania 4394 dni, 17 godzin, 38 minut temu 44 źrodło rozwiń
Jestem zwolennikiem terminologii angielskiej, czyli wszystkie identyfikatory w kodzie są w tym właśnie języku. Dzięki temu kod rzeczywiście jest samodokumentujący się, bo nie dławi go dysonans angielskiej składni i polskiej terminologii, który nieodwołalnie prowadzi do identyfikatorów typu „ponglish„, np. BeforeZapisz, RestoreZasoby...
Sztuka programowania 4402 dni, 21 godzin, 16 minut temu 131 źrodło rozwiń