W aplikacjach bardzo często używamy zewnętrznych zasobów. A to trzeba wykonać zapytanie na bazie danych. Pobrać dane z usługi lub wysłać wiadomość email. Zasoby te charakteryzują się tym, że mogą być przez jakiś czas niedostępne, bo na przykład wystąpił jakiś problem z siecią lub zasób jest zbyt mocno obciążony. W takich sytuacjach zastanawiamy się, czy od razu pokazać użytkownikowi informacje o błędzie, czy może spróbować ponowić operację po jakimś czasie i do...
Strona głównaUżytkownik
danielplawgo | użytkownik
Wraz z rozwojem aplikacji oraz zwiększaniem się liczby użytkowników, stajemy przed coraz większymi problem związanymi z wydajnością. Szczególnie istotne jest to w momencie, gdy na przykład ruch na stronie jest na tyle duży, że serwer, z którego korzystamy jest wykorzystywany w 100%. Jednym z sposobów, który w miarę szybko daje spore efekty, jest dodanie mechanizmu cachowania często używanych danych. W tym wpisie pokaże Ci bibliotekę CacheManager (https://github...
W bardzo wielu aplikacjach w bazie danych zapisujemy ten sam czas jaki przyszedł do nas od użytkownika w formularzu. W przypadku, gdy tworzysz aplikację na rynek polski, takie podejście może okazać się bezproblemowe, bo wszyscy jesteśmy w jednej strefie czasowej i mamy ten sam czas. Problemy zaczynają się, gdy tworzymy aplikację, w której użytkownicy są w różnych strefach . Wtedy takie podejście może się okazać bardzo problematyczne. Dlatego zaleca się, aby po...
Dodając nowy kontroler lub widok do aplikacji ASP.NET MVC wybieramy jeden z szablonów, które wykorzysta Visual Studio do ich wygenerowania. Jest to bardzo przydatne, gdy na przykład formularz edycji zawiera wiele pól. Visual Studio wygeneruje kontrolkę dla każdej właściwości z klasy, którą ustawimy jako model widoku. Podobnie jest z generowaniem kontrolerów. Jest to bardzo fajne, ale niestety na dłuższą metę tak wygenerowany kod, nie jest tym, co potrzebujemy i...
Wzorzec DAO (Data Access Object) jest jednym z częściej używanych wzorców do organizacji warstwy dostępu do danych . Dla każdego obiektu/tabeli z bazy (np User, Product) tworzymy dedykowany interfejs/klasy. Klasy te często nazywamy repozytoriami* (np. UserRepository, ProductRepository) i na ogół zawierają takie same metody. Jestem wielkim fanem szablonów T4. Lubie je wykorzystywać do automatyzacji tworzenia powtarzalnych i schematycznych elementów kodu. Właśni...
W wpisie o lokalizowaniu enumów pojawił się komentarz, w którym Janko zwrócił mi uwagę, że rozbijanie napisów na małe pliki resource nie jest najlepszym pomysłem pod względem wydajności. Jak pisałem w innym wpisie (Używanie napisów w aplikacji) stosuje wiele plików resource do organizacji napisów wyświetlanych użytkownikowi. Dlatego chciałem sprawdzić, czy to prawda. Przeglądając internet można trafić na pytania na stackoverflow: https://stackoverflow.com/ques...
Wielokrotnie zastanawiam się, czy mój kod jest wydajny. Czy nie da się czegoś zrobić, aby aplikacja działała szybciej. Przy szybkości działania nie można założyć, że coś wydajne, bez zmierzenia tego. Jak zobaczysz pod koniec wpisu, może się okazać, że operacja, która wydaje się szybka, wcale taka nie jest. Jak zmierzyć wydajność kodu .NET? Możemy zrobić to na wiele sposobów. Niektórzy używają DateTime.Now, inni DateTime.UtcNow, czy też klasy StopWatch. W ka...
Typ string jest jednym z najczęściej używanych typów danych w aplikacji. Gdy go potrzebujemy to po prostu otwieramy cudzysłów, wpisujemy wartość i zamykamy cudzysłów. Bardzo często nawet nie zastanawiamy się, czy to dobre podejście. Niestety w dłuższe perspektywie takie podejście oznacza problemy. A to robimy literówkę w kluczu podczas pobierania wartości z słownika, o której dowiadujemy się dopiero podczas wykonywana kodu (o ile go przetestujemy). A to musimy w 20...
Typy wyliczeniowy są używane do określenia jednej wartości z góry określonego zbioru. Dzięki nim możemy ułatwić sobie tworzenie kodu poprzez nadanie nazwy dla wartości, którą później używamy. Nazwa enuma musi spełniać rygory składni takich języków jak C#, dlatego potrzebujemy mechanizmu, który wyświetli ładny napisu w interfejsie użytkownika. W tym wpisie drogi czytelniku, pokaże Ci jak to zrobić małym nakładem pracy oraz przy okazji wspierać wiele języków. Zob...
Dzisiejszy wpis jest zainspirowanym jednym z ostatnich code review jaki robiłem. Zauważyłem, że gdy pracujemy z Entity Framework często niektóre rzeczy zaczynamy robić nieefektywnie w stosunku do tego, jakbyśmy zrobili to w chociażby w przypadku ADO.NET. Taką właśnie czynnością jest aktualizowanie oraz usuwanie obiektów z bazy.Aktualizacja obiektu z jego pobraniem Standardowo, gdy zaczynamy uczyć się pracować z Entity Framework, do aktualizacji obiektu możemy ...
Bazy danych i XML 2331 dni, 4 godziny, 16 minut temu 197 źrodło rozwiń
W poprzednich dwóch postach (Postal – wysyłka email w ASP.NET MVC oraz Hangfire – wysyłka email w tle) pokazałem jak wysyłać wiadomości email w aplikacji ASP.NET MVC. Jeśli nie czytałeś/czytałaś tamtym wpisów, to zachęcam do nadrobienia lektury, szczególnie, że w tym wpisie będę bazował na kodzie, z tamtych wpisów. W dzisiejszym poście chciałbym jeszcze pozostać przy tej tematyce i pokaże Ci, w jaki sposób można automatycznie testować kod odpowiedzialny za wysy...
W poprzednim wpisie pokazałem jak w aplikacji ASP.NET MVC wysyłać wiadomości email z wykorzystaniem biblioteki Postal. Wspomniałem również, że wysyłka email w ramach żądania HTTP nie jest dobrym pomysłem, że lepiej skorzystać z jakiego mechanizmu kolejek oraz ponawiania operacji. Jednym z dostępnych narzędzi jest biblioteka Hangfire, która w prosty sposób jest wstanie wysłać email w tle, a do tego ponowić operację w momencie wystąpienia błędu.Hangfire Ostatnio do kolejkow...
Wysyłka email w ASP.NET MVC Wcześniej, czy później w aplikacji następuje potrzeba wysłania wiadomości email do użytkownika. W aplikacji ASP.NET MVC można zrobić to na wiele sposób. Możemy ręcznie przygotować treść wiadomości oraz wysłać ją z wykorzystaniem klasy SmtpClient. Możemy też skorzystać z tego, co daje ASP.NET MVC i użyć widoki do generowania treści wiadomości. W tym wpisie pokaże jak wykorzystać bibliotekę Postal do wysyłki email w ASP.NET MVC.Postal – przygotowan...
Tworząc aplikację ASP.NET MVC w wielu miejscach wykorzystujemy stringi do określenia takich rzeczy jak: nazwa kontrolera, nazwa akcji, nazwa widoku, ścieżka do pliku i wiele innych. Osobiście nie lubię używania napisów w kodzie aplikacji. Ciężko znaleźć później użycia danego napisu, przez co, gdy zmieniamy na przykład nazwę akcji, to wtedy bardzo łatwo o pominięcie jakiegoś linku w aplikacji, co powoduje, że psujemy jej działanie. Do tego dochodzą problemy z literówkami, c...
Pracując z kontenerami Dependency Injection bardzo często dochodzi to sytuacji, gdy kod konfiguracji takiego kontenera bardzo się rozrasta. W szczególności, gdy korzystamy z biblioteki, która nie wspiera autorejestracji (przez dłuższy czas w jeden z aplikacji WPF wykorzystywałem Unity, gdzie trzeba było każdy typ zarejestrować ręcznie w kontenerze), przez co klasa konfiguracji może zawierać dziesiątki, jak i nie setki linii kod. Na szczęście Autofac, którego wykorzystuje o...
Wstrzykiwanie zależności z wykorzystaniem kontenerów jest bardzo wygodne, ale też niesie z sobą trochę problemów. Jednym z tych problemów jest ilość oraz moment tworzenia obiektów. W tym wpisie pokaże ten problem oraz zaproponuje swoje rozwiązanie z wykorzystaniem obiektów Lazy. Poniżej jest przedstawiona dość standardowy kawałek kodu aplikacji ASP.NET MVC, w której jest wykorzystane wstrzykiwanie zależności przez konstruktor w formie interfejsów. Jak widać na kodzie pow...
Sztuka programowania 2373 dni, 5 godzin, 25 minut temu 113 źrodło rozwiń
W jednym z wcześniejszych wpisów pokazałem jak za pomocą dwóch bibliotek (Nbuilder oraz Faker.NET) wygenerować dane testowe. Przez dłuższy czas korzystałem z tamtego rozwiązania, natomiast ostatnio kolega z pracy pokazał mi inną, ciekawszą bibliotekę, która łączy działanie Nbuildera oraz Faker.NET. Do tego ma kilka dodatkowych funkcji, które się przydają. Biblioteka nazywa się Bogus i jest to port biblioteki Faker.js. Po pierwsze biblioteka umożliwia wygenerowanie jednego...
W poprzednim wpisie pokazałem, jak użyć Fluent Validation w aplikacji WPF. Wspomniałem, że tamta implementacja niestety nie nadaje się, gdy potrzebujemy walidować dane w sposób asynchroniczny – np. sprawdzić w usłudze, czy dane są unikalne. W tamtym wpisie pokazałem użycie IDataErrorInfo ponieważ jest on najczęściej wykorzystywany do realizacji walidacji. Natomiast dzisiaj opiszę nową wersję tego interfejsu, dodaną w .NET 4.5 – INotifyDataErrorInfo. Co fajne nowy interfejs...
W poprzednich wpisie pokazałem w jaki sposób można zintegrować Fluent Validation z aplikacją ASP.NET MVC, dzisiaj przyszedł czas na WPF. W WPF jest kilka sposobów na realizację walidacji. Najczęściej wykorzystuje się do tego interfejs IDataErrorInfo, który definiuje dwa elementy: właściwość Error zawierającą informacje o błędach oraz indekser, który zwraca błąd dla właściwości o nazwie przekazanej jako indeks. Interfejs ten można wykorzystać do integracji Fluent Validatio...
W dzisiejszym wpisie pokaże dwa sposoby w jaki sposób można integrować bibliotekę Fluent Validation z ASP.NET MVC. Pierwszy domyślny, który dostarcza sama biblioteka oraz drugi mój, który rozwiązuje cześć problemów z domyślnej integracji.Domyślna integracja Integracja Fluent Validation z ASP.NET MVC jest bardzo prosta, sprowadza się do dwóch kroków:Instalacja pakietu FluentValidation.Mvc5 z nugetaDodanie linijki konfiguracji biblioteki w metodzie startującą aplikację (Mvc...