Node Clean Architecture Template
Jamie Livingstone - Apr 14 '22 - - Dev Community
Preface
Writing highly scalable, testable codebases that are easy to maintain is the dream for most engineers and is some of the problems that software architectures aim to solve.
Software architecture serves as a blueprint for a system. It provides an abstraction to manage the system complexity and establish a communication and coordination mechanism among components.
Having worked in many JavaScript and TypeScript codebases throughout my career, I often find that they do not conform to an established architecture which is very different from more established languages such as C# and is why I decided to build this template.
The template
The template conforms to the Clean Architecture principles and encourages established practices.
Features
- TypeScript first
- Dependency injection via Awilix
- CQRS (Command Query Responsibility Segregation)
- High test coverage (unit, integration and functional tests)
- Automatic error handling
- Logging
- Versioned APIs
- Swagger
- Prisma ORM
A Node template that follows the Clean Architecture principles and encourages established practices.
Clean Architecture Template
A Node template that follows the Clean Architecture principles and encourages established practices.
Features
- TypeScript first
- Dependency injection via Awilix
- CQRS (Command Query Responsibility Segregation)
- High test coverage (unit, integration and functional tests)
- Automatic error handling
- Logging
- Versioned APIs
- Swagger
- Prisma ORM
Getting Started
- Install the latest Node.js LTS
- Install Docker and ensure that it is running
- Create .env file
cp .env.example .env
- Install project dependencies by running
yarn install
- Start Docker (local Postgres instance)
docker-compose up -d
- Create database
npx prisma migrate deploy
- Start development server
yarn start
- Navigate to Swagger ( http://localhost:3000/api-docs)
Scripts
Build production bundle
Lint project (eslint)
Start development server
Run all tests
Run unit tests
Run functional tests (API tests)
License
This project is licensed with the MIT license.
Credits
The project's inspiration is Jason Taylor's clean architecture template…
Why clean architecture
Clean architecture is a battle-tested software architecture that offers many benefits.
-
Highly Testable: Clean architecture is designed with testing in mind
-
Framework Independent: Doesn’t rely on tools from any specific framework (language agnostic too)
-
Business logic is encapsulated: Easy to add new entry points to the system (e.g. GraphQL)
-
Database Independent: The majority of your application will not know or need to know what database it’s drawing from. This means you can adopt a new database with no changes to the majority of the source code
-
Flexible: Refactoring and maintaining your code will become easier and will demand little effort
Learn more about the architecture by reading this blog post by Robert C. Martin (Uncle Bob).