NDepend

Improve your .NET code quality with NDepend

3 Design Patterns That Have Aged Poorly

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 of Four like sacred scripture. On...
Carlos Schults July 10, 2018

Declarative Programming in Depth

Most people that start programming learn to program in an imperative way. Shortly after, they will probably learn a declarative language too. Many developers go a long way without knowing...
Peter Morlion July 3, 2018

Software Architecture: The 5 Patterns You Need to Know

When I was attending night school to become a programmer, I learned several design patterns: singleton, repository, factory, builder, decorator, etc. Design patterns give us a proven solution to existing...
Peter Morlion June 26, 2018

Continuing Our Clean Architecture Example in C#

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 in which we show you a...
Carlos Schults June 19, 2018

Log4net vs NLog: A Comparison of How They Affect Codebases

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.  Probably not something like Coke vs...
Erik Dietrich June 12, 2018

Use NDepend to Measure How SOLID Your Code Is

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 to present NDepend’s rules that will...
Carlos Schults June 5, 2018

Imperative Programming in Depth

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 buckets you can put a programming...
Carlos Schults May 29, 2018

Separation of Concerns, Explained

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 pearls, which accumulated in the decades...
Carlos Schults May 22, 2018

NDepend and .NET Fx v4.7.2: an extension method collision and how to solve it easily

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 this new extension method that is...
Patrick Smacchia May 17, 2018

What Makes a Codebase Acquirable?

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 saying something since, by and large,...
Erik Dietrich May 15, 2018

A Look at .NET Core 2.1

The .NET Framework has certainly been through many changes since it was introduced by Microsoft in 2002. Arguably, .NET Core is the biggest change. First, .NET Core is open source....
Justin Boyer May 8, 2018

Null Is Evil. What’s the Best Alternative? Null.

“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. I’d say it’s also very likely...
Carlos Schults May 1, 2018

In Defense of the SOLID Principles

From posts that politely offer their criticisms to others that outright deem them “for dummies,” it seems that bashing the SOLID principles is all the rage nowadays. The fact that...
Carlos Schults April 24, 2018

Quickly assess your .NET code compliance with .NET Standard

Yesterday evening I had an interesting discussion about the feasibility of migrating parts of the NDepend code to .NET Standard to ultimately run it on .NET Core. We’re not yet...
Patrick Smacchia April 19, 2018

Moq: A Detailed Look at Its Code Quality

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 same vein but focused on the...
Erik Dietrich April 17, 2018

On the Superiority of the Visual Studio Dark Theme

When I downloaded the newest version of NDepend, something wonderful awaited me.  Was it support for the latest .NET Core version?  The addition of checks for ubiquitous language for DDD...
Erik Dietrich April 10, 2018

C# 8.0 Features: A Final Glimpse Of The Future

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. On the first post, we covered...
Carlos Schults April 3, 2018

Starting A Clean Architecture Example in C#

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 sample application in C#, to demonstrate...
Carlos Schults March 27, 2018

Functional C# Improves Your Design Without Making Your Code Cleaner, Exactly

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 last post in the series, where...
Erik Dietrich March 20, 2018

C# Immutable Types: Understanding the Attraction

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 would be the attraction of such...
Carlos Schults March 13, 2018

Checking DDD Ubiquitous Language with NDepend

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 on Ubiquitous Language: Ubiquitous Language is...
Patrick Smacchia March 13, 2018

New .NET Core 2.1 and ASP.NET Core 2.1 APIs

.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 APIs in this post. We’ll found...
Patrick Smacchia March 8, 2018

CQRS: Understanding From First Principles

There seems to be no end to the choices you have for architecture when building an application. You don’t want to fall victim to cargo cult programming, so you need to...
Justin Boyer March 6, 2018

How to Measure Lines of Code? Let’s Count the Ways

There are a few ways to count lines of code, and they each have their advantages and disadvantages. Much of the differences come down to defining what a “line” is....
Eric Goebelbecker February 27, 2018

Your Guide to Winning Arguments About Code

The whole “tabs versus spaces” thing occupies sort of an iconic position in the programmer world.  It represents the impossibility of winning arguments that are unwinnable by their very nature. ...
Erik Dietrich February 20, 2018

Functional Programming Makes Your Code Not OO…And That’s It

Over the course of the fall and winter, I’ve been gaining momentum with code research posts.  Today, I bring that momentum to bear on the subject of functional programming.  Or...
Erik Dietrich February 13, 2018

C# 8.0 Features: Another Glimpse of the Future

About two months ago, we talked about some of the (probable) features we’ll be getting with C# 8.0. The post was well received and generated some buzz, which encouraged me...
Carlos Schults February 6, 2018

An Introduction to Clean Architecture

It seems to me that the topic of software architecture has attracted a lot of interest in the last few years. And among many different flavors and styles of software...
Carlos Schults January 30, 2018

Unit Tests Correlate With Desirable Codebase Properties

Today, I give you the third post in a series about how unit tests affect codebases. The first one wound up getting a lot of attention, which was fun.  In...
Erik Dietrich January 23, 2018

Value Objects: A Tool for Self-Documented Code and Fewer Errors

Have you ever heard of value objects? I bet you have. Even though they’re talked about a lot less than I’d like, they’re still talked about enough that many developers have...
Carlos Schults January 16, 2018