.NET Core boilerplate, czyli mój projekt wzorcowy

UPDATED: Boilerplate został zmigrowany do .NET 6!

Boilerplate to kawałek kodu, który w szybki sposób pomaga wystartować pisanie kodu. Pewnego rodzaju szablon. Zamiast startować z pustym projektem i dodawać za każdym razem od nowa te same cegiełki, możemy posłużyć się boilerplatem, który te cegiełki już zawiera.

Ostatnimi czasy kilka razy tworzyłem od początku aplikację w .NET Core, a w ramach tej aplikacji odpowiedni zestaw projektów oraz komponentów. Za każdym razem schemat postępowania był bardzo podobny – w jednym projekcie API, w kolejnym projekcie warstwa dostępu do danych oraz kawałek biznesu, następnie projekty z testami. Typ projektu determinował załączone NuGetowe paczki, konfigurację oraz klasy bazowe, które po wielokroć były identyczne. Na koniec “strażnicy” jakości kodu, oni również identyczni w każdej z nowopowstałych aplikacji. Schemat się powtarzał.

Postanowiłem stworzyć wzorcową aplikację (tytułowego boilerplate), która zawierać będzie zestaw zwyczajowych komponentów. Jeśli jakiś komponent jest nadmiarowy, niepotrzebny dla nowego rozwiązania które rozpoczynam, to najzwyczajniej go usuwam. Znacznie szybciej redukować kod źródłowy aplikacji niż dodawać. To rozwiązanie pozwala mi znacznie szybciej wystartować projekt, a co za tym idzie zaoszczędzić czas.

Boilerplate dostępny jest na GitHub. Korzystać z niego można do woli, zapraszam.


Zawartość


Architektura

Api

HappyCode.NetCoreBoilerplate.Api

Core

HappyCode.NetCoreBoilerplate.Core


DbUp

HappyCode.NetCoreBoilerplate.Db


Testy

Testy integracyjne

HappyCode.NetCoreBoilerplate.Api.IntegrationTests

Testy jednostkowe

HappyCode.NetCoreBoilerplate.Api.UnitTests

HappyCode.NetCoreBoilerplate.Core.UnitTests

Testy obciążenia

HappyCode.NetCoreBoilerplate.Api.LoadTests


Repozytorium

https://github.com/lkurzyniec/netcore-boilerplate

Podbij ↑

14 thoughts on “.NET Core boilerplate, czyli mój projekt wzorcowy

    • CrazyBaran,
      W moim odczuciu multitenancy da się zapewnić tylko i wyłącznie odpowiednią architekturą całego systemu/aplikacji. Zarówno mój boilerplate, jak i generator z Twojego linku, to tylko jeden element skomplikowanej układanki, na który nie ma szablonów. Każdy system tego typu należy zaprojektować indywidualnie patrząc na wymagania.

      Niemniej jednak, dzięki za link.

  1. Czy jest jakiś konkretny cel w tym że w projekcie jest zarówno msSql jak i MySql ? Czy tylko po to żeby pokazać jak używać jednego i drugiego ?
    Druga sprawa to różna jest konstrukcja Employe od Cars (controller employer dostaje się do danych przy pomocy repository, a cars -> services->dbContext) Czy jest tego jakiś konkretny zamysł ? czy przedstawione są poprostu 2 możliwości konstrukcji aplikacji i należy zdecydować się na wygodniejszą i usunąć drugą ?

    • Marcin,
      W obu przypadkach dobrze dedukujesz.
      Wyjaśniając intencje pierwszego przypadku, to chciałem pokazać jak w prosty sposób można korzystać z obu silników bazodanowych w .NET Core.
      W drugim natomiast, że niekoniecznie należy trzymać się schematu db -> repository -> service -> controller, lecz samemu zdecydować i może iść na skróty, a może jednak wykorzystać schemat. W moim przypadku to bardzo małe API więc idę na skróty, natomiast dla większych aplikacji zdecydowanie zalecałbym skorzystać ze schematu.

      • Dzięki za szybką odpowiedź. W takim razie wykorzystam sytuację, że kontakt z autorem jest taki dobry i…
        ściągnąłem projekt, uruchomiłem go poprzez docker-compose up. Jednak /health pokazuje, że nie może połączyć się z bazami danych.
        MySql podczas uruchomienia ogłasza:
        [Server] –initialize specified but the data directory has files in it. Aborting.
        [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.

        a SqlServer ogłasza że nie może się zalogować z tymi danymi ponieważ nie ma user’a o nazwie User.
        Wiesz może w czym może być problem ? odpalam na macOS

  2. Cześć,

    Chciałbym zapytać o możliwość uzyskania kodu twojego boilerplate na innej licencji, niż GPL 2.0. Chciałbym wykorzystać twój kod w komercyjnym projekcie, a co za tym idzie dział prawny będzie mnie maglował o to, żeby nie musieć obejmować naszego kodu GPLem tylko dlatego, że użyjemy boilerplate’u na takiej licencji. Czy rozważałeś publikację na bardziej liberalnej licencji typu MIT, albo ewentualnie czy można uzyskać komercyjną licencję za pieniądze?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *