Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/numq/golang-clean-architecture-imageboard-backend
gRPC imageboard application backend
https://github.com/numq/golang-clean-architecture-imageboard-backend
architecture back-end backend boilerplate boilerplate-template clean clean-architecture demonstration docker go golang grpc grpc-go mongodb protobuff server yaml
Last synced: about 4 hours ago
JSON representation
gRPC imageboard application backend
- Host: GitHub
- URL: https://github.com/numq/golang-clean-architecture-imageboard-backend
- Owner: numq
- Created: 2021-12-06T16:28:26.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2024-05-19T21:34:10.000Z (6 months ago)
- Last Synced: 2024-05-19T22:34:17.266Z (6 months ago)
- Topics: architecture, back-end, backend, boilerplate, boilerplate-template, clean, clean-architecture, demonstration, docker, go, golang, grpc, grpc-go, mongodb, protobuff, server, yaml
- Language: Go
- Homepage:
- Size: 48.8 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Imageboard Clean Architecture Back-End
*This is the part of project which includes back-end and mobile client.*
**Also check:**
[Android Compose Clean Architecture Client](https://github.com/numq/android-clean-architecture-imageboard-client)## Project description:
**Simple anonymous imageboard which allows to create threads, posts and reply to users by quoting their posts.**## Installation
> docker-compose up -d
>
## Tech:*Common:*
- **Golang**
- **Docker**
- **Yaml***Infrastructure:*
- **gRPC***Data:*
- **Protobuf**
- **MongoDB**## Structure:
- `Config`
- `Data`\
*Repository implementation, data sources initialization.*
- `Domain`\
*Abstract entities & repositories.*
- `Infrastructure`\
*Server & handlers.*
- `Mapping`\
*In fact, creating a contract between models and entities.*\
*It's very important, therefore it's a separate package.*
- `Proto`
- `UseCase`\
*Most likely: use case for each repository method.*### Summary:
**Well, I use `Golang` when I need to get simple and obvious product. I really like it, because I can create what I need without tons of libs and avoiding extra dependencies. Also Golang is great to fit with *Clean Architecture* because of abstraction through composition. I think that the stucture of this project is pretty good and I will use it again.****I like `MongoDB` because it's flexible and not very complicated to compose effective database query inside repository. Also it doesn't need to create a special abstraction on top of database methods which is definitely an advantage.**
**What about `gRPC`? I think that it's good to be used as a CRUD alternative to REST, but I would prefer Web Sockets for real-time (I mean "actually real-time", e.g. chatting) operations to avoid polling strategy, although gRPC is good for it, but I just think that each task needs it's own tool.**
**`Protobuf` is good to use for crossplatform products, but it's a bit tricky to set up the projects, because the implementations are different (especially in the case of the JVM). Sometimes it matters.**
**`Docker` is simply the best way to deploy an application, especially if you want to use database replication (which is really painful without it).**
**`Yaml` is just the simple way to create separate config file.**