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 |
|---|---|---|
| API | API, Web, Controllers |
|
| HTTP Clients | HTTP, Client, REST |
|
| AUID | GUID, UUID, ID, Identifier |
|
| Authentication | Auth, Security, Basic, API key |
|
| Blob Storage | Azure, Blob, Storage, no-SQL |
|
| Cache | Cache, Memory, Performance |
|
| CQRS | CQRS, Patterns, Architecture |
|
| Story Framework | Workflow, Interactive, Tale Code |
|
| Guards | Validation, Guards, Checks |
|
| Logging | Logging, Diagnostics, Tracing |
|
| Message Bus | Azure, Messaging, Async, Queue |
|
| Scheduler | Scheduler, Cron, Tasks |
|
| SQL Database | Database, SQL, ORM, Dapper, EF |
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 Aleksander 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 reads like a well-written story:
public class CalculateBestPathStory : StoryHandler<Input, Context, Output>
{
protected override async Task TellStory()
{
await ReadChapter<DownloadRoadDataChapter>();
await ReadChapter<FindProfitablePathChapter>();
await ReadChapter<SolveTspChapter>();
await ReadChapter<FormResultChapter>();
context.Output.BestPath = context.OptimalRoute;
}
}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

