Z reguły naszą logikę biznesową umieszczamy w klasach serwisowych. Czasem są one większe, a czasem mniejsze. Zastanówmy się, jak mógłby wyglądać nasz kod, gdybyśmy dla każdej metody z serwisu tworzyli osobną klasę. Wykorzystamy do tego bibliotekę MediatR. Jeśli ktoś się zastanawia po co, odpowiedź jest prosta: aby zwiększyć spójność i zmniejszyć sprzężenie. Na razie nie będziemy się zagłębiać w takie pojęcia jak CQRS czy CQS. Naszym celem jest rozbicie klas na mniejsze i zmiana tego, jak je wołamy. Po ty...
Strona głównaUżytkownik
Admu | użytkownik
Sztuka programowania 1450 dni, 58 minut temu 138 źrodło rozwiń
Jakiś czas temu pisałem o tym, że gdy tworzymy API, warto dodać narzędzie Swagger. Umożliwia ono w szybki i prosty sposób przetestować nasze API (tutaj). Zdarza się jednak tak, że aby móc korzystać z naszego API, dane żądanie (request) musi być zautoryzowane, czyli np. posiadać odpowiedni token. Swagger umożliwia autoryzację żądań na wiele sposobów. W tym poście opiszę jak to zrobić, gdy potrzebujemy Bearer token.
Z reguły nasze aplikacje posiadają jakąś logikę biznesową (o ile nie piszemy prostego CRUD). Chciałbym jednak zaznaczyć, że nie mam tu na myśli logiki w rozumieniu walidacji czy reguł biznesowych, np. brak możliwości zmiany wartości jakiegoś pola, gdy pewne warunki nie zostaną spełnione. Chodzi mi bardziej o logikę procesu, np. gdy klient złoży zamówienie, musimy mu wysłać wiadomość e-mail. Ta logika nie dotyczy obiektu zamówienia, ale jest z nim związana. Skoro wiemy, że będziemy musieli przechowywać g...
Sztuka programowania 1499 dni, 2 godziny, 21 minut temu 132 źrodło rozwiń
Ostatnio pisałem o tym, co możemy zrobić, gdy nasze metody zwracają rezultat i chcemy go zmapować na odpowiedni kod http (tutaj). W tym poście podam podobne rozwiązanie, gdy nasze metody rzucają wyjątki, zamiast zwracać rezultat.
Jakiś czasem temu pisałem o tym, że nasze metody mogą zwracać rezultat lub zgłaszać wyjątek (tutaj). Zastanówmy się, jak mogłoby wyglądać nasze API, aby status rezultatu był mapowany na odpowiedni kod Http. Mamy dwie możliwości: wspólna metoda w klasie bazowej lub filtr.
Jakiś czas temu pisałem o testach w kontekście API (tutaj). W tym poście postaram się opisać jak napisać podobne testy, ale gdy nasza aplikacja komunikuje się poprzez kolejkę. Pokaże to z wykorzystaniem biblioteki MassTransit.
Często na GitHubie w opisach projektów można zobaczyć Badge – odznaki pokazujące status builda, pokrycia kodu, status testów i innych rzeczy. Jak zrobić coś takiego i czy w ogóle warto?
Często w naszych aplikacjach mamy do czynienia z datami. Najczęściej używamy ich przy polach takich jak data utworzenia (np. CreatedAt) lub data modyfikacji (np. ModifiedAt), ale są też inne miejsca. Wtedy z reguły stosujemy DateTime.UtcNow. Niestety w testach ciężko jest potem coś z taką datą zrobić. Nie mamy żadnej możliwości ustawienia tej daty na jakąś inną, aby przetestować czy nasza aplikacja działa poprawnie. Sprawa się jeszcze bardziej komplikuje, gdy mamy logikę biznesową uzależnioną od takiej ...
Witajcie w sześćdziesiątym odcinku Ostrej Piły. W tym trochę technicznie – porozmawiamy o zarządzaniu zależnościami. Z naszym gościem, porozmawiamy o jakie zależności możemy mieć w projekcie i czy zawsze trzeba nimi zarządzać a jeśli tak to jak możemy to zrobić. A na koniec o tym czy w świecie .NET grozi powtórka sytuacji z left-pad? Miłego słuchania. 🎶
Jedziemy z 61. odcinkiem Ostrej Piły. W nim, razem z naszym gościem, porozmawiamy o wystarczająco dobrym oprogramowaniu. Czy zawsze powinniśmy cisnąć kod aby była najlepszy z możliwych czy jest jakiś poziom przy którym możemy powiedzieć, że to co mamy jest good enough? A na koniec konkurs.
Kiedyś bardzo lubiłem bibliotekę AutoMapper. Była ona z reguły jedną z pierwszych bibliotek, jakie zawsze dodawałem do projektu na samym początku. Pozwalała mi tworzyć mnóstwo obiektów i mapować je do woli, poświęcając na to niewiele czasu „programistycznego”. Była świetna! Aż do momentu, gdy zaczęła być jedną z największych bolączek.
Sztuka programowania 1618 dni, 1 godzinę, 58 minut temu 262 źrodło rozwiń
Ostatnio pisałam o tym, jak skonfigurować odpowiedni Board Process dla serwisu Boards naszego projektu. Dzisiaj czas na konkrety dotyczące tworzenia tablic i zarządzania zadaniami.
Często gdy mamy napisać jakiś kod, okazuje się, że już gdzieś napisaliśmy taki sam lub podobny. Wtedy stajemy przed dylematem – czy zduplikować go, czy użyć ponownie?
Sztuka programowania 1632 dni, 2 godziny, 19 minut temu 131 źrodło rozwiń
W ramach urlopu i siedzenia w domu postanowiłam zaprogramować coś ciekawego w celu poszerzenia swoich umiejętności dotyczących m.in. .NET Core i Web API. Tak powstał pet projekt MyNozbe oparty na Nozbe. W trakcie programowania natknęłam się na ciekawy problem dotyczący Entity Frameworka, którym chciałam się z Wami podzielić.
Bazy danych i XML 1634 dni, 3 godziny, 3 minuty temu 146 źrodło rozwiń
Jakiś czas temu pisałam na temat innych serwisów Azure DevOps – Repos i Pipelines. Dzisiaj czas na Boards i konkretny problem ustawienia procesu dla naszego projektu.
Z reguły gdy tworzymy jakąś aplikację jest to jedna wielka aplikacja albo zbiór małych aplikacji, które w mniejszym lub większym stopniu się ze sobą komunikują. Ponadto często jest tak, że architektura większości z nich jest dokładnie taka sama. Czy to aby na pewno dobre podejście?
Architektura 1645 dni, 17 godzin, 2 minuty temu 143 źrodło rozwiń
Pisząc aplikację zwykle piszemy testy. Raczej nie muszę wyjaśniać po co 🙂 Czy tworząc różne procedury lub funkcje na bazie danych też sprawdzamy ich poprawność pisząc testy? Tu już niekoniecznie. A szkoda, bo pisanie testów w tSQLt nie różni się za bardzo od pisania zwykłych testów jednostkowych...
Bazy danych i XML 1648 dni, 2 godziny, 8 minut temu 63 źrodło rozwiń
W tym odcinku rozmawiamy o tym kto to jest trudny klient. Omawiamy różne typy oraz zastanawiamy się czy da się z sytuacji z takowym klientem wykaraskać. Podoba ci się to co robimy? Wesprzyj nas dzieląc się tym co tworzymy z innymi, wystawiając nam recenzję lub zostając naszym patronem.
General Responsibility Assignment Software Patterns (GRASP) to zbiór 9 zasad określających, jaką odpowiedzialność powinno się przypisywać określonym obiektom i klasom w systemie. Wszystkie te zasady odpowiadają na część problemów z oprogramowaniem, które są wspólne dla prawie każdego projektu. Techniki te nie zostały wymyślone w celu stworzenia nowych sposobów pracy, a jedynie w celu lepszego udokumentowania oraz standaryzacji starych, wypróbowanych i przetestowanych zasad programowania. Jest więc to kol...
Sztuka programowania 1659 dni, 1 godzinę, 57 minut temu 63 źrodło rozwiń
Na przestrzeni lat powstało bardzo dużo projektów. Część z nich była łatwiejsza w utrzymaniu, część trudniejsza. Analiza tych projektów pozwoliła zauważyć, że są pewne zasady, które powodują łatwiejszy ich rozwój. Te zasady zostały połączone w zbiory zasad. Najbardziej popularnym i powszechnie stosowanym zbiorem zasad jest SOLID. Postaram się opisać te zasady z pragmatycznego punktu widzenia.
Architektura 1674 dni, 16 godzin, 58 minut temu 91 źrodło rozwiń