dotnetomaniak.pl

dotnetomaniak.pl - Najnowsze artykuły o .NET w dziale Sztuka programowania - Strona 45

Jak obiecałem – dziś uzupełnimy dotychczasowy zestaw testów o nowe testy. Co będziemy testować? Jeśli ktoś uważnie śledzi ten cykl zapewne oczekuje, że – zgodnie z wcześniejszymi zapowiedziami – przygotujemy test sprawdzający uruchamianie wszystkich metod biorących udział w przetwarzaniu pliku oraz dostosujemy stare testy sprawdzające powiadamianie o postępie przetwarzania. Tak – takie testy zostaną napisane. Ale najpierw utworzymy testy, których do tej pory nie było. Proszę zauważyć, że ...

Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 17.

Sztuka programowania 2088 dni, 5 godzin, 51 minut temu PaSkol 57 rozwiń

Ostatnią z czynności refaktoryzacyjnych będzie przystosowanie dotychczasowej klasy MethodObject do używania powstałych w trakcie refaktoryzacji klas. Jak można sprawdzić w części drugiej, klasa ta posiadała cztery publiczne metody: ImportCSV(), ImportTabSeparated(), ImportFixed(), ImportBinary(). Metody te były następnie wykorzystywane przez interfejs użytkownika do wykonywania odpowiednich importów. Te metody muszą zostać zachowane, zmieni się natomiast ich implementacja. Zmianie ulegnie też...

Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 19.

Sztuka programowania 2088 dni, 5 godzin, 51 minut temu PaSkol 34 rozwiń

W dotychczasowym procesie refaktoryzacji udało nam się stworzyć elastyczny mechanizm importu – uzyskaliśmy tym samym podstawową funkcjonalność w zadowalającej postaci. Pora zająć się pozostałymi operacjami, które są niezbędne, aby uzyskać kompletną, pierwotną funkcjonalność refaktoryzowanego kodu. Na implementację oczekują przecież: zdefiniowany na początku interfejs IFileSelector i jego pochodna IFilteredFileSelector. Konieczne jest też zaimplementowanie ...

Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 18.

Sztuka programowania 2089 dni, 13 godzin, 26 minut temu PaSkol 42 rozwiń

Czasami zachodzi potrzeba wykonania krytycznego kodu, który zużywa dużo zasobów. Podobnie jak w CER, nie chcemy wykonywać kodu jeśli wiemy, że nie ma wystarczającej pamięci. W .NET istnieje klasa MemoryFailPoint, która potrafi z góry “zaalokować” określoną pamięć.publicsealedclass MemoryFailPoint : CriticalFinalizerObject, IDisposable { public MemoryFailPoint(Int32 sizeInMegabytes); ~MemoryFailPoint(); publicvoid Dispose(); } MemoryFailPoint sprawdzi czy jest dostępna pamięć. Jeśli jej nie...

Dziel się z innymi:
Piotr Zieliński » MemoryFailPoint: alokowanie dużej ilości pamięci

Sztuka programowania 2090 dni, 13 godzin, 24 minuty temu pzielinski 98 rozwiń

Nadeszła pora, by doprowadzić do współpracy klas odczytujących pliki i klas wyodrębniających z nich dane. Aby ta współpraca była jednak w ogóle możliwa – klasa FileOfValuesReader musi zostać zmodyfikowana, albowiem musi być możliwe „wstrzyknięcie” do niej obiektu implementującego interfejs IValuesExtractor. W rezultacie konstruktor zyska jeszcze jeden, dodatkowy parametr, poprzez który będzie można przekazać odpowiedni interpreter danych. Ponieważ ów interpreter trafia od razu do klasy bazowej ...

Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 15.

Sztuka programowania 2090 dni, 13 godzin, 24 minuty temu PaSkol 43 rozwiń

W tym wpisie zaprezentuję dwie klasy dziedziczące po FileOfValuesReader i realizujące odczyt z plików tekstowych oraz binarnych. Obie klasy będą współpracować z odpowiadającymi im klasami wyodrębniającymi wartości z odczytanej zawartości. A ponieważ dopełnią one całości mechanizmu importu, to przygotuję także odpowiednie testy, które pozwolą upewnić się, że mechanizm importu nadal działa tak samo. Jako pierwszą zaimplementuję ...

Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 16.

Sztuka programowania 2091 dni, 6 godzin, 20 minut temu PaSkol 35 rozwiń

Jedną z ciekawszych cech web developerki jest mnogość dostępnych na tym polu rozwiązań i technologii. Dlaczego uważam, że to dobrze? Poniekąd dlatego, że w ten sposób programista może przezwyciężyć spadek motywacji i nudę związaną z wykonywaniem kolejnego wielkiego projektu w młodym, dynamicznym zespole. Stwarza również pole do popisu i ciągłego rozwoju, pokazuje różne sposoby na zrobienie tego samego lepiej i szybciej. Niestety z punktu widzenia osób odpowiedzialnych za dostarczenie projektu klientowi ...

Tagi: rozważania
Dziel się z innymi:
Simple Solutions: Nowe technologie - tak czy nie?

Sztuka programowania 2091 dni, 16 godzin, 8 minut temu http://horusiath.blogspot.com/ 122 rozwiń

Jednym z ostatnich rodzajów długów jakie chcę poruszyć to testy. Testy we wszelakiej postaci, od jednostkowych, przez integracyjne, specyfikacji, smoke, white i black box do obrzydliwych ręcznych. Brak testów to najgorsza rzecz jaką możemy zrobić. W każdej normalnej branży (a nie takiej, gdzie większość to pryszczaci kolesie z problemami interpersonalnymi ) czyli takiej o solidnych podstawach ukształtowanych przez lata praktyki, normą są testy. Budowlańcy robią testy wytrzymałości beton...

Źródło: www.benedykt.net
Dziel się z innymi:
Brak testów to brak pewności | @rek online | Arkadiusz Benedykt

Sztuka programowania 2092 dni, 16 godzin, 32 minuty temu arek 157 rozwiń

W poprzedniej części uczyniliśmy spostrzeżenie, że z dotychczasowych klas można wyodrębnić niezależną funkcjonalność – interpretację odczytywanych danych. Obecnie zajmiemy się jej implementacją. Nie będzie ona specjalnie trudna, ponieważ większość kodu już istnieje – zawierają go metody Extract() klas potomnych klasy FileOfValuesReader. Przypomnijmy je sobie wszystkie...

Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 14.

Sztuka programowania 2093 dni, 3 godziny, 50 minut temu PaSkol 35 rozwiń

Monolity – wielkie projekty składające się z setek klas ściśle powiązanych ze sobą. Czasem to nawet nie muszą być przesadnie wielkie te projekty jednak wystarczy, że klasy są ściśle powiązane ze sobą. Co to znaczy ściśle powiązane ze sobą? Jeśli w jednej klasie użyjemy słowa new, żeby stworzyć obiekt innej klasy to właśnie ściśle powiązaliśmy te dwie klasy. Jedna bez drugiej żyć nie może, nie da się jednej z nich przenieść do innej biblioteki bez odpowiednich referencji. Jeśli chcemy zlec...

Źródło: www.benedykt.net
Dziel się z innymi:
Monolity to też dług technologiczny | @rek online | Arkadiusz Benedykt

Sztuka programowania 2094 dni, 18 godzin, 53 minuty temu arek 120 rozwiń

Na dzisiaj przygotowałem dwie proste klasy, w których pokażę, jak nagrywać i odtwarzać dźwięki w aplikacjach typu Metro. Musimy to zrobić trochę inaczej niż do tej pory, ponieważ skorzystamy z nowego API zawartego w pakiecie Windows.Storage. Zacznijmy od klasy odpowiedzialnej za nagrywanie...

Dziel się z innymi:
C# : Nagrywanie i odtwarzanie dźwięku w aplikacjach Metro

Sztuka programowania 2095 dni, 18 godzin, 52 minuty temu bari 117 rozwiń

Przygotowane w poprzedniej części testy uwidoczniły pewne ułomności zaimplementowanych klas – chcąc przetestować funkcjonalność powiadamiania o postępie przetwarzania pliku, konieczne było wykonanie samego importu. To nasuwa wniosek, że powiadamianie o postępie zależy od samego procesu importu. Co więcej, w jednym z testów tej funkcjonalności nie udało się początkowo uzyskać pozytywnego wyniku. To nasuwa kolejny wniosek – powiadamianie o postępie zależy od konkretnego typu importu. To już bardzo daleko i...

Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 13.

Sztuka programowania 2096 dni, 19 godzin, 22 minuty temu PaSkol 36 rozwiń

W ostatnim poście pisałem jak prawidłowo wykonać finalizację obiektu jeśli mowa o zasobach niezarządzanych, których zwolnienie jest krytyczne. Dzisiaj o obiekcie, który jest bardzo często wykorzystywany w sytuacjach gdzie należy przechowywać wskaźnik do zasobów niezarządzanych. Zacznijmy od jego definicji:[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, UnmanagedCode =true)] publicabstractclass SafeHandle : CriticalFinalizerObject, IDisposable Co to oznacza? Wszystkie rzeczy jakie daje n...

Dziel się z innymi:
Piotr Zieliński » Obiekt SafeHandle

Sztuka programowania 2096 dni, 19 godzin, 22 minuty temu pzielinski 102 rozwiń

Funkcja Array.Sort sortuje tablicę elementów. Niestety algorytm jest niestabilny co nie zawsze jest dobrym rozwiązaniem. Rozważmy poniższy kod:publicclass Person { publicint Age { get; set; } publicstring Name { get; set; } } internalclass Program { publicstaticvoid Main() { var persons =new[] { new Person { Age =1, Name ="a" }, new Person { Age =2, Name ="b" }, new Person { Age =3, Name ="c" }, new Person { Age =2, Name ="e" }, new Person { Age =1,...

Tagi: sortowanie
Dziel się z innymi:
Piotr Zieliński » Array.Sort a stabilność sortowania

Sztuka programowania 2097 dni, 6 godzin, 27 minut temu pzielinski 134 rozwiń

Pora po raz kolejny napisać testy dla uzyskanego kodu. Zapewne niektórzy zaczynają być znużeni tą ciągłą potrzebą pisania testów. Cóż – jest to jedyny sposób na zapewnienie odpowiedniej jakości kodu. A pisząc „odpowiedniej” mam na myśli jedynie jego poprawność. Na pocieszenie uchylę rąbka tajemnicy – nasz kod jest coraz lepszy, coraz bardziej elastyczny, a to przekłada się także na pisanie testów. W poprzednich testach udało się wykorzystać jedynie dane użyte w testach wcześniejszych. Obecnie uda się ...

Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 12.

Sztuka programowania 2097 dni, 6 godzin, 27 minut temu PaSkol 38 rozwiń

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ą ...

Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 11.

Sztuka programowania 2097 dni, 20 godzin, 14 minut temu PaSkol 49 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 ...

Dziel się z innymi:
Piotr Zieliński » Implementacja Finalize oraz CriticalFinalizerObject

Sztuka programowania 2099 dni, 6 godzin, 15 minut temu pzielinski 81 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 ...

Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 10.

Sztuka programowania 2099 dni, 18 godzin, 18 minut temu PaSkol 53 rozwiń

Kolejna cześć artykułu o wydajności w C#. Zapraszam do lektury!

Dziel się z innymi:
Piotr Zieliński » Optymalizacja kodu C# – część II

Sztuka programowania 2100 dni, 4 godziny, 23 minuty temu pzielinski 187 rozwiń

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...

Me z .NET tete-a-tete » Nadeszła pora na cykl publikacji: „Historia pewnej refaktoryzacji”. Część 9.

Sztuka programowania 2104 dni, 20 godzin, 3 minuty temu PaSkol 55 rozwiń

1 2... 43 44 45 46 47 48... 50 51