Shotgun Surgery: What It Is and How to Stop It
October 2, 2018 1 minutes read I really love the name “shotgun surgery” for describing a code smell. It’s sort of an interesting mix of aggressive and comical, and so...
Onion Architecture: Going Beyond Layers
September 25, 2018 1 minutes read So you’ve read about the Onion Architecture and think you get it. There are layers in this architecture. They’re onion-like. And they make your...
Linq Tutorial: A Complete Beginner’s Gentle Introduction
September 18, 2018 1 minutes read There was a time when Linq was a mystery to me. But, now that I’ve learned how to use it, I don’t know how...
You Should Favor Software Products That Include Support in the Price
September 11, 2018 1 minutes read Quite often we talk about architectural concerns on this blog, with topics like application layering or the merits of design patterns. But today I’m...
Programming to an Interface: A Simple Explanation
August 21, 2018 1 minutes read As an architect, you know that programming to an interface is good. It’s what everyone should do. But what does that mean? And why...
What Is a Good Unit Test? 5 Must-Haves
August 14, 2018 1 minutes read In this day and age, unit testing isn’t as controversial as it once was. Sure, you still see the occasional inflammatory, clickbait-y, confrontational “unit...
Layered Architecture: Still a Solid Approach
August 7, 2018 1 minutes read Layered architecture gets a lot of flack. Even though it’s still the most prevalent architecture, we view it as an anti-pattern. It’s old, not...
Autofac: A Detailed Look Under the Hood at Its Code Quality
July 31, 2018 1 minutes read In case you haven’t seen it, I’ve been diving ever-further down the code research rabbit hole. Today it brings me to the Autofac codebase...
3 Design Patterns That Have Aged Poorly
July 10, 2018 1 minutes read Design patterns seem to be a controversial topic. On one hand, many developers seem to love them and treat the famous book by the Gang...
Declarative Programming in Depth
July 3, 2018 1 minutes read Most people that start programming learn to program in an imperative way. Shortly after, they will probably learn a declarative language too. Many developers...
Software Architecture: The 5 Patterns You Need to Know
June 26, 2018 1 minutes read When I was attending night school to become a programmer, I learned several design patterns: singleton, repository, factory, builder, decorator, etc. Design patterns give...
Continuing Our Clean Architecture Example in C#
June 19, 2018 1 minutes read After a somewhat long delay, it’s time to finally continue our series on clean architecture. This is the second post in the inner series...
Log4net vs NLog: A Comparison of How They Affect Codebases
June 12, 2018 1 minutes read Ah, the old “versus” Google search. Invariably, you’re in the research stage of some decision when you type this word into a search engine. ...
Use NDepend to Measure How SOLID Your Code Is
June 5, 2018 1 minutes read Not that long ago, we published a post defending the SOLID principles of object-oriented design. In today’s post, we take it a step further: we’re going...
Imperative Programming in Depth
May 29, 2018 1 minutes read Programming languages come in all shapes and sizes: interpreted vs. compiled, weak vs. strong typing, low-level vs. high-level, terse vs. expressive… There are many...
Separation of Concerns, Explained
May 22, 2018 2 minutes read Software development is a very young field, particularly when you compare it to, say, medicine or law. Despite this, there’s no shortage of wisdom...
NDepend and .NET Fx v4.7.2: an extension method collision and how to solve it easily
May 17, 2018 2 minutes read In Oct 2017 I wrote about the potential collision problem with extension methods. At that time the .NET Framework 4.7.1 was just released with...
What Makes a Codebase Acquirable?
May 15, 2018 1 minutes read What makes a codebase acquirable? This is the rare question that affects software developers, managers, and executives in a surprisingly similar way. And that’s...
A Look at .NET Core 2.1
May 8, 2018 6 minutes read The .NET Framework has certainly been through many changes since it was introduced by Microsoft in 2002. Arguably, .NET Core is the biggest change....
Null Is Evil. What’s the Best Alternative? Null.
May 1, 2018 1 minutes read “Null is evil.” If you’ve been a software developer for any reasonable length of time, I bet you’ve come across that statement several times....
In Defense of the SOLID Principles
April 24, 2018 2 minutes read From posts that politely offer their criticisms to others that outright deem them “for dummies,” it seems that bashing the SOLID principles is all...
Quickly assess your .NET code compliance with .NET Standard
April 19, 2018 4 minutes read Yesterday evening I had an interesting discussion about the feasibility of migrating parts of the NDepend code to .NET Standard to ultimately run it...
Moq: A Detailed Look at Its Code Quality
April 17, 2018 7 minutes read In case you haven’t seen it, I’ve been doing a series of research-oriented posts for this blog. This is going to be in the...
On the Superiority of the Visual Studio Dark Theme
April 10, 2018 2 minutes read When I downloaded the newest version of NDepend, something wonderful awaited me. Was it support for the latest .NET Core version? The addition of...
C# 8.0 Features: A Final Glimpse Of The Future
April 3, 2018 1 minutes read It was not that long ago when we published our first post about the future of C# 8.0 and the probable features it’s getting....
Starting A Clean Architecture Example in C#
March 27, 2018 1 minutes read It’s time for the second part of our series about clean architecture. As promised in the first post, we’re going to show you a...
Functional C# Improves Your Design Without Making Your Code Cleaner, Exactly
March 20, 2018 2 minutes read Today I offer another one of the code research posts we’ve been doing. If you want more backstory on the series, check out the...
C# Immutable Types: Understanding the Attraction
March 13, 2018 2 minutes read As I’m sure you’re aware, the word immutable means “unchanging.” So, C# immutable types obviously refers to a C# type that can’t change. What...
Checking DDD Ubiquitous Language with NDepend
March 13, 2018 4 minutes read Since NDepend version 2018.1, the tool proposes a default rule to check Domain Driven Design (DDD) Ubiquitous Language validity. DDD Ubiquitous Language Let’s quote Martin Fowler...
New .NET Core 2.1 and ASP.NET Core 2.1 APIs
March 8, 2018 2 minutes read .NET Core 2.1 and ASP.NET Core 2.1 Preview1 have just been released (see here the official announcement) and we are going to explore new...