GeistHaus
log in · sign up

Clean Coder Blog

blog.cleancoder.com
56 pages link to this URL
Clean Architecture, Modular Monolith and Vertical Slice Architecture

Introduction Good software architecture is crucial for a business to reach its goals. It provides a structured way to build software that is easy to maintain, reliable, and performs well. Key drivers of software architecture Several factors influence a software’s architecture: Business requirements: What the software needs to do. Quality attributes: How well the software performs, such as its speed, scalability, and availability. Agility: How quickly the development team can adapt to changes. Constraints: The limitations of the deployment environment, such as the hardware or operating system. Principles: Established practices, like automated testing and deployment, that guide the development process. Different Ways to Structure Software There are two main ways to build software applications:

0 inbound links article en posts ArchitectureServicesModularityMicroservicesMonolith
When Objects Are Not Enough

Alan Kay mentions in a talk that the Smalltalk don't scale quite well to big teams and infrastructure. However, he had some ideas on how to make OOP scale.

Introducing Domain-Oriented Microservice Architecture

Recently there has been substantial discussion around the downsides of service oriented architectures and microservice architectures in particular. While only a few years ago, many people readily adopted microservice architectures due to the numerous benefits they provide such as flexibility in the form of independent deployments, clear ownership, improvements in system stability, and better separation of concerns, in recent years people have begun to decry microservices for their tendency to greatly increase complexity, sometimes making even trivial features difficult to build.

3 inbound links website en
Structuring a Ktor project

SERIES: Building a backend with Ktor Part 1: Structuring a Ktor project Part 2: How to persist Ktor logs Part 3: How to use an in-memory database for testing on Ktor Part 4: How to handle database migrations with Liquibase on Ktor Part 5 Generate API documentation from Swagger on Ktor Part 6: How to schedule jobs with Quartz on Ktor Part 7: Moving from mobile to backend development with Ktor It’s been a few months since I’ve started working with Ktor to build the backend of Revelop. We decided to go with Ktor because it is a lightweight framework, easy to use and with a gentle learning curve even for a mobile developer.

0 inbound links article en posts
From broken to testable SwiftUI navigation: The decoupled approach of MVVM with coordinators

SwiftUI provides several tools for managing navigation, and the introduction of NavigationStack and value-destination links improved programmatic navigation. However, in larger applications, vanilla SwiftUI navigation can pose challenges for testability, maintainability, and modularity. Navigation logic is distributed across views, introducing coupling and making the navigation code hard to locate. These problems can be addressed by ... Read more

0 inbound links article en Uncategorized prism
Dependency Inversion | Khalil Stemmler

The enemy of well-designed software is coupling. When large bodies of code are tightly coupled, they become ultimately unchangable and difficult to test…

0 inbound links website en SOLIDDesign Principles
On narrow integration tests

Narrow integration tests are tests that only involve very few components, mostly relying on test doubles to simulate external dependencies. As always, we have Martin Fowler to thank for yet another excellent article on integration tests so I’ll simply refer to that for the details of what a narrow integration test is. That said, during 2019 I have grown increasingly convinced that the distinction between a narrow and wide integration (also know as system tests or end-to-end tests) is an important one, for two reasons:

0 inbound links article en posts blogdeveloperstaff engineeringpersonalTestingSimplicitySystem TestingIntegration TestingEnd-to-End Testing
DDD and SOLID: A refactoring story

TL;DR Command-Query Separation Extract Use Cases (Clean/Hexagonal Architecture) Domain Events (with Eventhandlers and Composite Pattern) Cross-Cutting Concerns (with Decorator Pattern) Many backend applications end up as a big ball of mud where small changes ripple through the whole codebase. The root causes are high coupling and low cohesion. The best remedies against those are Domain Driven Design (DDD) and the SOLID principles which are well-known, but often wrongly applied.

0 inbound links article en posts programmingsoftwareengineeringdddsolid
Clean Architecture with Xamarin Forms

In this post, we'll look at how to apply the principles of The Clean Architecture to build a Xamarin.Forms Android app. This app will be based on a robust architecture that is loosely coupled and cleanly separates the important business or domain logic from other details and infrastructure like databases, UI frameworks, and network communications.

Intentoinal Errors

There’s an apocryphal story from the development of a game called Battle Chess. A Product Manager was well-known to always have to make a comment or propose a change on anything, no matter how minor - so, an engineer intentionally added an incongruous companion duck in a piece’s animation. The PM could say “looks good - but lose the duck”, and feel that they’d had a meaningful impact, when in fact the end result after removing the “sacrificial duck” was exactly as the engineer had originally intended.

0 inbound links article en posts
My 2021 review - blog.dornea.nu

After last year’s pandemic shock, this year has brought more hope and motivation to people. I’ve felt motivated to learn new things, deep-dive into unknown areas and finally change some things in my life. In this post I’ll share with you my most valued (software) tools, productivity tips, some books worth reading and finally some failure and success with regards to my habits. Health # Wim Hof Method # Last year just before the (pandemic) winter blues was about to begin I’ve had enough of that feeling something you cannot control was already part of my daily life.

1 inbound link article en
When to avoid DRY in Go

If you’re here for the first time, this post is part of our Business Applications in Go series. Previously, we introduced Wild Workouts, our example application built with modern tools but containing some subtle anti-patterns. We added them on purpose to show common pitfalls and how to avoid them. In this post, we begin refactoring Wild Workouts. Previous articles will give you more context, but reading them isn’t necessary to understand this one.

0 inbound links article en
How to implement Clean Architecture in Go (Golang)

In this guide, we share our pragmatic approach to Clean Architecture in Go, refined through years of real-world experimentation. We demonstrate refactoring techniques on a live project, showing how to extract application logic, define interfaces, and improve testability. You'll learn how to apply Clean Architecture principles in an idiomatic Go way, balancing theory with practical implementation. Our battle-tested methods help you create loosely coupled, highly cohesive code that's easier to maintain and extend over time.

0 inbound links article en
Vanilla Rails is plenty

A common critique of Rails is that it encourages a poor separation of concerns. That when things get serious, you need an alternative that brings the missing pieces. We disagree.

3 inbound links website en
Clean Architecture on Frontend

Not very long ago I gave a talk about the clean architecture on frontend. In this post I'm outlining...

1 inbound link article en typescriptreactarchitecturesoftwarecodingdevelopmentengineeringinclusivecommunity
Event Sourcing in Go

I’ve recently gone into doing CQRS with event sourcing along with DDD (Domain Driven Design) principles. I’ve been doing it in Go and want to share how I do it. To begin with, I’ve researched this topic thoroughly; I’ve probably watched and re-watched hundreds of videos and read many posts, articles, and books on it. I am by no means a cqrs/es expert, but I have gained some insight into how to do it. The first thing I want to put out there is that you don’t need a framework to do this. Ddd and cqrs/es are best done without a framework getting in the way and instead you should create a Clean Architecture where the framework you choose later on becomes a sort of plugin into your application.

0 inbound links en bloghomepagetechnologygotechgolangopinionDDDDomain-Driven DesignGoEvent Sourcing
Don't Use Frameworks

Stop using frameworks for everything. Just stop. You don’t need a framework to write good code and deliver products. Don’t get me wrong, frameworks are useful, but they are all-consuming and hide the application. So if you shouldn’t depend on frameworks what should you do instead? Clean architecture. More specifically, there are some patterns you can follow to better architect your application and think about the structure of your application and remove the need for frameworks to express your application. The patterns I suggest you use are Clean Architecture, Domain Driven Design, and the SOLID principles. Having a maintainable application is a matter of applying certain design principles and professionalism. In particular, applying TDD or BDD and Domain Driven Design principles. Think about your application before you write a single line of code, design it, and test before you implement it.

0 inbound links en bloghomepagetechnologygotechgolangopinion
Why VIPER and MVVM in SwiftUI are actually the same pattern: A lesson in architectural thinking

Architectural design patterns like VIPER might seem radically different from common ones like MVVM. However, upon deeper inspection, it turns out that these patterns share the same constitutive components. In this article, we will compare the MVVM and VIPER design patterns in SwiftUI and show how they follow the same principles. Table of contents Architectural ... Read more

0 inbound links article en Uncategorized prism
Skills and Expertise

My name is Luciano Nooijen, freelance software engineer and lifelong learner

0 inbound links en luciano nooijenlucianonooijen
Application-as-a-Function Thinking

TL;DR Architecting an application with a pure function at its core can be a first step towards the “functional-core imperative shell” ideal, which can simplify testing and lower an applications complexity bar.

Simplify your Application Architecture with Modular Design and MIM | CodingFox

1. Intro tl;dr Instead of forcing your application into a prescriptive template like Clean or Hexagonal Architectures, get back to basics and use patterns from Modular Software Design. Divide the application into independent modules, each containing business logic representing a specific process. For modules with complex business logic, extract the infrastructure-related code into separate Infrastructure-Modules. This will enable you to build an application characterized by low cognitive load, high maintainability, and high extensibility.

0 inbound links article en posts software-designprogrammingunit-tests CC BY-SA 4.0
Clean Architecture with ASP.NET Core

Clean Architecture is a way of structuring a solution such that dependencies and infrastructure concerns are kept separate from business logic and the domain model. It's frequently used with Domain-Driven Design and can easily be built with ASP.NET Core using a solution template described in this article.

1 inbound link article en
What Is Good Code?

This is the second part of a 3 or 4 part series where I’m formulating my thoughts about an ongoing initiative at MedeAnalytics. I started yesterday with a related post called On Giving Techni…

1 inbound link article en Uncategorized