Skip to content

acodeninja/es6-clean-architecture

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ES6 Clean Architecture

TL;DR

You want to develop a JS application using clean architecture principals.

Defining boundaries and use cases

const {Boundary, UseCase} = require('es6-clean-architecture');

/** ./src/Boundary/GetAListOfWidgetsRequest.js */
class GetAListOfWidgetsRequest extends Boundary.Request {}

/** ./src/Boundary/GetAListOfWidgetsResponse.js */
class GetAListOfWidgetsResponse extends Boundary.Response {}

/** ./src/UseCase/GetAListOfWidgets.js */
class GetAListOfWidgets extends UseCase.UseCase {
    async Execute() {
        return new GetAListOfWidgetsResponse();
    }
}

Directly calling a use case

const GetAListOfWidgetsRequest = require('./src/Boundary/GetAListOfWidgetsRequest');
const GetAListOfWidgets = require('./src/UseCase/GetAListOfWidgets');

const useCaseExecution = async () => {
    const request = new GetAListOfWidgetsRequest();
    const getAListOfWidgets = new GetAListOfWidgets(request);
    return await getAListOfWidgets.Execute();
};

Express.js integration

const express = require('express');
const GetAListOfWidgetsRequest = require('./src/Boundary/GetAListOfWidgetsRequest');
const GetAListOfWidgets = require('./src/UseCase/GetAListOfWidgets');

const app = express();
app.use(express.json());

app.get('/widget', async (req, res) => {
    /** we pull params and body together here */
    const props = {};
    Object.assign(props, req.params, req.body);

    const request = new GetAListOfWidgetsRequest(props);
    const getAListOfWidgets = new GetAListOfWidgets(request);

    const response = await getAListOfWidgets.Execute();
    
    res.send(response);
});

About

A library to assist in creating javascript applications using clean architecture principals

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published