Jak się dowiedzieć, czy nasz kod działa wolno i przydałoby się go przyśpieszyć? Często opieramy się na naszej wiedzy, doświadczeniu oraz intuicji. Innym razem dostajemy uwagi od naszego zespołu podczas code review. Albo po prostu widzimy, że aplikacja się wlecze, jak czas pracy w poniedziałek. Nie zawsze jednak uda nam się to dostrzec, bo my ludzie, mamy spowolnioną percepcję, która nie nadąża za obliczeniami komputera. Łatwo zauważymy różnicę sekund, ale z mniejszymi wartościami, już sobie nie radzimy. Z pomocą może przyjść BenchmarkDotNet. Bo dobrze by było móc zobaczyć wyniki prędkości kodu. Tak by mieć liczby przed oczami i móc porównać czasy. Moglibyśmy wtedy sprawdzić ilokrotnie dany kod wykonujący tą samą czynność…
-
-
Brak komend do EF.Core w Package Manager Console
Problemy konfiguracyjne występują w projektach za często i są strasznie uciążliwe. Dziś napiszę o rozwiązaniu jednego z nich. Opis problemu Podczas korzystania z podejścia Code First w Entity Framework korzysta się z paru komend w Package Manager Console. Najpopularniejsze z nich to Add-Migration i Update-Database. Do tej pory, kiedy instalowałem paczkę Entity Framework komendy te były zawsze dostępne. Tym razem było inaczej, konsola zwróciła błąd: Przygotowanie programu Ze względu, że wpis na blogu dotyczy pewnego problemu wstawię kod bez większego wyjaśnienia. Zainstalowane paczki projektu dla EF Core: Kod służący do stworzenie tabeli bazy danych: Rozwiązanie Aby możliwe było korzystanie z instrukcji dostarczonych przez Entity Framwork Core w konsoli należy zainstalować…
-
Nie dziedzicz tego, czyli modyfikator sealed w języku C#
Głównym fundamentem języków zorientowanych obiektowo jest dziedziczenie. Pozwala ono na zachowanie pewnych właściwości rodzica, tych które są publiczne (ang. public) oraz chronione (ang. protected). Dzięki temu programista tworzący podklasę, nie musi za każdym razem tworzyć wspólnych właściwości i innych elementów. Co jednak, jeżeli uważamy, że po naszej klasie inna klasa nie powinna już więcej dziedziczyć? Że to nasza klasa osiąga największą szczegółowość, a tworzenie po niej klasy pochodnej oznacza, że ktoś tutaj nie zrozumiał naszego punktu widzenia? Na ratunek przychodzi nam modyfikator sealed. Jest to słowo kluczowe wstawiane w definicji naszej klasy przed słówkiem class. Oznacza to, że żadna inna klasa nie może dziedziczyć po klasie sealed. Swoją drogą sealed…
-
Walidacja danych za pomocą DataAnnotations
Wprowadzę sobie PESEL o długości 15 znaków, a co, niech programiści sobie if’ują! W wielu projektach, jak nie w każdym, zachodzi konieczność sprawdzenia, czy dane pole spełnia określone reguły narzucone przez potrzeby biznesowe, czy po prostu przez zdrową ludzką logikę. W prostych przypadkach dozwolony zakres danych narzucony jest przez typy zmiennych w typowanym języku programowania, jakim jest np. C#. Przez to nie możemy przypisać dowolnego tekstu do zmiennej całkowitoliczbowej. Co jednak jeżeli chcielibyśmy narzucić bardziej złożone ograniczenie, czy wtedy wszystko musimy sprawdzać ręczenie? W tym wpisie przedstawię, czym jest DataAnnotations oraz gdzie znajduje zastosowanie przy budowaniu aplikacji internetowych w ASP.NET (MVC, czy też Core). Co to DataAnnotations? Data Annotations…
-
ModelState, czyli wstępna walidacja w ASP.NET Web Api
ASP.NET dostarcza nam mechanizmu wstępnej walidacji danych (sprawdzenia czy dane są poprawne), które są przesyłane w żądaniu. Programista nie musi ręcznie sprawdzać czy dane pole nie ma wartości pustej, czy długość ciągu znaków nie przekracza narzuconego limitu, bądź czy liczba mieści się w dozwolonym zakresie. Wystarczy, że użyje techniki opisanej poniżej, która jednocześnie jest bardzo prosta w użyciu. Poniższy przykład został stworzony w ASP.NET Core 2.1 Web Api. Zanim zaczniemy, będziemy potrzebować modelu danych, który pomoże zrozumieć zagadnienie. Dobrym przykładem będzie stworzenie klasy związanej z człowiekiem, dlatego też utworzymy detektywa. Detektyw posiada trzy właściwości, jednak nie mają one jeszcze sprecyzowanej dziedziny (co mogą zawierać, a co nie). Żeby dodać…
-
Pudełkowanie (boxing) oraz odpakowywanie (unboxing) w języku C#
Nadszedł czas na wpis, do którego został stworzony ten blog, czyli na coś związanego z programowaniem. Na start opisze tutaj, czym jest mechanizm opakowania (lub pudełkowania) w C#. Zapraszam do czytania. W języku C# wszystkie klasy dziedziczą po System.Object, klasie która jest położona najwyżej w hierarchii dziedziczenia. Za sprawą polimorfizmu, jednego z fundamentalnych założeń programowania zorientowanego obiektowo, można potraktować każdy obiekt dowolnej klasy właśnie jako typ object. Ponieważ nasz utworzony byt w uogólnieniu jest też object-em (bo po nim zawsze dziedziczy). Warto tutaj zaznaczyć, że object jest tym samym, co klasa System.Object. Co jednak, gdy chcielibyśmy w taki sam sposób zamienić podstawowy typ, np. int na typ…