Git Product home page Git Product logo

clean-go-notes's Introduction

Clean Architecture Notes API

This is my implementation of clean architecture for a golang REST API.

What is clean architecture

Clean architecture is a highly modular architecture pioneered by Robert C. Martin (Uncle Bob). There are several layers of abstraction for the separation of core business rules from everything else.

Why clean architecture?

It creates a system which is

  1. Independent of Frameworks

    The architecture does not depend on the existence of some library of feature laden software. This allows you to use such frameworks as tools, rather than having to cram your system into their limited constraints.

  2. Testable

    The business rules can be tested without the UI, Database, Web Server, or any other external element.

  3. Independent of UI

    The UI can change easily, without changing the rest of the system. A Web UI could be replaced with a console UI, for example, without changing the business rules.

  4. Independent of Database You can swap out Oracle or SQL Server, for Mongo, BigTable, CouchDB, or something else. Your business rules are not bound to the database.

  5. Independent of any external agency

    In fact your business rules simply don’t know anything at all about the outside world.

Clean architecture components

  1. Entities

    Entities are similar to models in MVC. They are an OOPS representation of a real world entity.

  2. Use Cases (Repository)

    Repository is an abstraction over the entity. It houses the lower level business rules related to database connections. This is independent of the database service used

  3. Services

    Services are yet another abstraction layer over the application level business rules. This is an interface for higher level business logic oriented functions.

  4. Interface Adapters

    Each interface has its separate directory. Since we made an API we have an api directory

  5. Frameworks and Drivers

    In our case, it is Web since this is the layer where all the detials go. In our case, we have implemented handlers for request-response model

References

See this article on Medium - Clean Architecture, the right way (by Angad Sharma)

DSC VIT's template repo of clean architecute in Go - Go template repository

An implementation for a full fleged rest api and clean code - Bandersnatch by supercmmetry

Another implementation I've referred to while learning this - Clean Notes API by Rithik Jain

clean-go-notes's People

Contributors

bro3886 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.