InfoQ Homepage Design Pattern Content on InfoQ
-
Article Series: Cell-Based Architectures: How to Build Scalable and Resilient Systems
In this article series, we take readers on a journey of discovery and provide a comprehensive overview and in-depth analysis of many key aspects of cell-based architectures, as well as practical advice for applying this approach to existing and new architectures.
-
You’re Doing it Wrong: it’s Not about Data and Applications – It’s about Processes
Classic developer thinking tends to approach application design from a data-centric point of view. When the domain is process management, that often leads to excess complexity and work; it also (wrongly) over-reduces proactive processes to quick bursts of automation triggered by data changes. There’s a better way to do this: start with the process.
-
Design Patterns for Serverless Systems
After shortly introducing design patterns at different levels of abstractions, this article will present a few patterns specifically suited to serverless systems, including the Pipes and Filters pattern and show a POC implementation using AWS EventBridge.
-
Microservices — the Letter and the Spirit
Microservices to be a pattern of ‘decoupled services’ managed to get the best out of it (the underlying understanding of the pattern (‘small’ vs ‘decoupled’) forces developers to take certain design decisions that are consistent with these objectives. In this article discuss we will discuss well and poor implementations: ‘small-services’ vs ‘decoupled-services’ or ‘Letter’ vs the ‘Spirit’.
-
Models and Their Interfaces in C# API Design
Traditional MVC, MVP, MVVM, Web MVC; the common element in every UI pattern is the Model. And while there are many articles discussing the view, controllers, and presenters in these architectures, almost no thought is given to the models. In this article we’ll look at the model itself and the .NET interfaces that they implement.
-
Q&A on The Rise and Fall of Software Recipes
Darius Blasband has written a book which challenges the conventional wisdom of software engineering: he protests against the adoption of recipes and standards-based approaches and rails against the status-quo. He calls himself a codeaholic who advocates for careful consideration of the specific context and the use of domain specific languages wherever possible.
-
Advanced Use Cases for the Repository Pattern in .NET
In our previous article, we looked at the basic patterns needed to implement a repository. In many cases these patterns were such a thin layer around the underlying data access technology they were essentially unnecessary. However, once you have a repository in place, many new opportunities become available.
-
Implementation Strategies for the Repository Pattern with Entity Framework, Dapper, and Chain
This article will focus on the basic functionality that one would find in a typical repository created with .NET. We’ll look at both general functionality and how that functionality would be implemented using three different styles of ORM: Entity Framework, Dapper, and Tortuga Chain.
-
Configure Once, Run Everywhere: Decoupling Configuration and Runtime
Configuration is one of the most widely used cross-cutting concerns in application development. Apache Tamaya is a new incubator project that brings standardized property management to Java.
-
Refactoring for Software Design Smells Review and Q&A with the Authors
Refactoring for Software Design Smells by Girish Suryanarayana, Ganesh Samarthyam, and Tushar Sharma presents a catalogue of typical software design smells and how they can be fixed.
-
Agile Architecture Applied
Agile is adaptive. When and how to apply architecture depends on the context. This article first explains why this is the case and then how you can still give proper attention to architecture in an agile setting. Adaptability and conversation are the essentials.
-
Microservices: Decomposing Applications for Deployability and Scalability
What are microservices? This article describes the increasingly popular Microservice architecture pattern, used to architect large, complex and long-lived applications as a set of cohesive services that evolve over time.