Modern readable coding
"Clean code is simple and direct. Clean code reads like well-written prose. Clean code never obscures the designer's intent but rather is full of crisp abstractions and straightforward lines of control."
~Grady Booch, author of *Object-Oriented Analysis and Design with Applications*
The SolTechnology.Core repository contains a set of shared libraries. This is a foundation for CQRS-driven applications using basic Azure technologies. The libraries support a modern coding approach presented in the example applications.
Documentation | Tags | NuGet |
---|---|---|
SQL Database | Database , SQL , ORM , Dapper , EF |
|
Blob Storage | Azure , Blob , Storage , no-SQL |
|
HTTP Clients | HTTP , Client , REST |
|
Message Bus | Azure , Messaging , Async , Queue |
|
Guards | Validation , Guards , Checks |
|
Authentication | Auth , Security , Basic , API key |
|
Logging | Logging , Diagnostics , Tracing |
|
Scheduler | Scheduler , Cron , Tasks |
|
CQRS | CQRS , Patterns , Architecture |
|
API | API , Web , Controllers |
|
Cache | Cache , Memory , Performance |
The idea of clean and readable code has stayed with me from the very beginning of my career. As a book lover and amateur writer, this is the most natural part of programming.
In the Tale Code approach, I am trying to summarize all the information about coding, design, automation, and configuration that I have learned over the years. The Tale Code rule is simple:
"Make your code a pleasure to read, like a tale."
~Adrian Strugała
The sample application is the most common case that came to my mind. It's built of a user-facing API and a background worker responsible for fetching data and feeding the SQL database. The communication between these two is asynchronous and based on messages, as shown in the picture:
Code design is the main goal of Tale Code. Logical flow and code structure are described in detail, and it even follows a more human-friendly, functional-like notation:
var context = new CalculateBestPathContext(cities!);
var result = await Chain
.Start(context, cancellationToken)
.Then(_downloadRoadData)
.Then(_findProfitablePath)
.Then(_solveTSP)
.End(_formResult);
I have summarized the knowledge and decisions into three chapters.
Enjoy your reading!
1. The Design
2. The Automation
3. The Quality
Some ending words