The Sin.Net Project

Project Sin.Net
Sin.Net is an open source project that contains several assemblies to help you building your software with a clean architecture approach. The assemblies contain often used functionalities like reading and writing special file types e.g. CSV or JSON or access to an external infrastructure via MQTT or HTTP. You can easily exend the functions of the provided assemblies by using their interfaces.

The binaries are developed with .NET Standard so that every kind of .NET related project can use them. You can integrate the assemblies as NuGet packages, for more information please take a look into the NuGet Gallery. If you want to look into the source code itself, you can find the project on GitHub - Sin.Net.
Clean Architecture

The implementation of clean architecture follows mostly the ideals of Jason Taylor - so thank you Mr.! To give you a brief overview how it works, please look at the flow chart below. Each layer represents one or more assemblies in your app. To be clear each box carries the word layer.

graph RL A[presentation layer] --> B[infrastructure layer] A --> C[persistence layer] B --> D[application layer] C --> D D --> E[domain layer]
graph TB A[presentation layer] --> B[infrastructure layer] A --> C[persistence layer] B --> D[application layer] C --> D D --> E[domain layer]

Now I will state out some principles for each layer. Please note that this list has not the intention to be complete. So you might consider to check further literature or contact me in case of emergency.

Attention Zone

As you might see, the Sin.Net assemblies are bypassing the application layer. That is - of course - because I can’t provide this layer to you. Maybe if you pay me. But if you decide to use the Sin.Net.Domain.dll it makes sense to build your upper layer’s based on its interfaces and abstractions. In the best case you just use the other assemblies too and maybe extend them within your own layers.

This could be a potentional (and most comprehensive) implementation of the Sin.Net Project. What’s also not illustrated here, is a project for unit testing your app, but you should definitely have one.

graph TB A[Your.Project.Presentation] --> B[Your.Project.Infrastructure] A --> D[Your.Project.Persistence] A --> I[Sin.Net.Logging] subgraph D --> E[Sin.Net.Persistence] end subgraph B --> C[Sin.Net.Infrastructure] end C --> F[Your.Project.Application] E --> F F --> G[Your.Project.Domain] subgraph G --> H[Sin.Net.Domain] end
Conclusion

Now, if you like this way of organizing your software architecture, please take a deeper look into the videos or blog posts of Jason Taylor, because he explains that stuff with lots more details. And if you like to test some ready-to-go assemblies that follow these principles, please download the Sin.Net assemblies and use them according to your requirements.


Have a nice day!