SSW.CleanArchitecture.Template
0.6.0
Prefix Reserved
See the version list below for details.
dotnet new install SSW.CleanArchitecture.Template::0.6.0
SSW Clean Architecture Template
<div align="center">
</div>
๐ค What is it?
This is a template for creating a new project using Clean Architecture, leveraging SSW Rules & SSW's over 30 years of experience developing software in the Microsoft space.
โจ Features
- โ๏ธ EditorConfig - comes with the SSW.EditorConfig
- Maintain consistent coding styles for individual developers or teams of developers working on the same project using different IDEs
- as per ssw.com.au/rules/consistent-code-style/
- ๐ฆ Slim - no authentication provider, no authorization & no UI framework
- You can add these yourself or use one of our reference architectures from awesome-clean-architecture
- as per ssw.com.au/rules/choosing-authentication/
- ๐ Minimal Endpoints - because it's fast & simple. โก
- Extension methods to ensure consistent HTTP Verbs & Status Codes
- ๐ Global Exception Handling - it's important to handle exceptions in a consistent way & protect sensitive information
- Transforms exceptions into a consistent format following the RFC7231 memo
- ๐ OpenAPI/Swagger - easily document your API
- ๐๏ธ Entity Framework Core - for data access
- Comes with Migrations & Data Seeding
- as per ssw.com.au/rules/rules-to-better-entity-framework/
- ๐งฉ Specification Pattern - abstract EF Core away from your business logic
- ๐ CQRS - for separation of concerns
- ๐ฆ MediatR - for decoupling your application
- ๐ฆ FluentValidation - for validating requests
- ๐ฆ AutoMapper - for mapping between objects
- ๐ Strongly Typed IDs - to combat primitive obsession
- e.g. pass
CustomerId
type into methods instead ofint
, orGuid
- Entity Framework can automatically convert the int, Guid, nvarchar(..) to strongly typed ID.
- e.g. pass
- ๐จ
dotnet new
cli template - to get you started quickly - ๐ Directory.Build.Props
- Consistent build configuration across all projects in the solution
- e.g. Treating Warnings as Errors for Release builds
- Custom per project
- e.g. for all test projects we can ensure that the exact same versions of common packages are referenced
- e.g. XUnit and NSubstitute packages for all test projects
- Consistent build configuration across all projects in the solution
- ๐งช Testing
Simpler Unit Tests for Application
- No Entity Framework mocking required thanks to Specifications
- as per ssw.com.au/rules/rules-to-better-unit-tests/
Better Integration Tests
- Using Respawn and TestContainers
- Integration Tests at Unit Test speed
- Test Commands and Queries against a Real database
- No Entity Framework mocking required
- No need for In-memory database provider
Architecture Tests
- Using NetArchTest
- Know that the team is following the same Clean Architecture fundamentals
- The tests are automated so discovering the defects is fast
๐ Publishing Template
Template will be published to NuGet.org when changes are made to CleanArchitecture.nuspec
on the main
branch.
Process
- Update the
version
attribute inCleanArchitecture.nuspec
- Merge your PR
package
GitHub Action will run and publish the new version to NuGet.org
๐ Getting Started
- Install the SSW CA template
dotnet new install SSW.CleanArchitecture.Template
NOTE: The template only needs to be installed once. Running this command again will update your version of the template.
- Create a new directory
mkdir Northwind365
cd Northwind365
- Create a new solution
dotnet new ssw-ca
NOTE:
name
is optional; if you don't specify it, the directory name will be used as the solution name and project namespaces.
Alternatively, you can specify the name
and output
directory as follows:
dotnet new ssw-ca --name {{SolutionName}} --output .\
- Create a query
cd src/Application/Features
mkdir {{FeatureName}}
cd {{FeatureName}}
dotnet new ssw-ca-query --name {{QueryName}} --entityName {{Entity}} --namespaceRoot {{Namespace}}
- Create a command
cd src/Application/Features
mkdir {{FeatureName}}
cd {{FeatureName}}
dotnet new ssw-ca-command --name {{CommandName}} --entityName {{Entity}} --namespaceRoot {{Namespace}}
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
2024.11.19 | 88 | 11/19/2024 |
2024.11.6 | 96 | 11/6/2024 |
2024.11.4 | 83 | 11/3/2024 |
2024.10.24 | 103 | 10/24/2024 |
2024.6.24 | 253 | 6/26/2024 |
2024.6.11 | 139 | 6/11/2024 |
2024.6.6 | 127 | 6/6/2024 |
2024.2.22 | 938 | 2/22/2024 |
1.0.0 | 203 | 2/21/2024 |
0.7.0 | 2,349 | 11/27/2023 |
0.6.0 | 551 | 8/15/2023 |
0.5.0 | 280 | 7/22/2023 |
0.4.0 | 227 | 7/3/2023 |
0.3.0 | 224 | 6/6/2023 |
0.2.3 | 194 | 5/22/2023 |
0.2.2 | 181 | 5/15/2023 |
0.2.1 | 172 | 5/15/2023 |
0.2.0 | 189 | 5/10/2023 |