This blog post is part of the 2024 C# Advent Calendar. Thanks to Matt Groves for organizing this awesome collection of knowledge and festivities. I’d also like…
Yes, it is in fact possible to test randomness within your application! Like with so many other facets of your code, it’s important too. Whether you’re making a…
This post is part of the Festive Tech Calendar 2024 adventures. Just as holiday cookie recipes give you tried-and-true methods for festive treats, design…
LINQ (Language Integrated Query) has always been a game-changer for .NET developers, streamlining data manipulation with elegance and efficiency. With .NET…
Occasionally you’ll find yourself wanting to query data from a database. I know I do! Sometimes that involves grouping your data. Sometimes you want to group…
So you’ve been through part 2 : Scaling the Monolith, and you’re still thinking microservices might be the right answer? OK, Let’s talk it out… Part 3 - Moving…
Welcome back to this series on architecting applications and systems with scaling in mind. In Part 2 of this series, we are going to take the sliced/modular…
In our webinar on “Common Antipatterns and Refactorings”, I mentioned loops could sometimes be seen as antipatterns. Some people were concerned because loops…
I was working with another developer the other day, using C# records. When using a record, you may have seen syntax similar to primary constructors to declare…
This post is part of a series on NServiceBus. In the past couple articles, we created a saga that tries to verify a contributor’s phone number and marks them…
Welcome to the series “Architecting to Scale”. In this series we are going to look at an iterative approach to scaling your applications, whether as a ‘monolith…
This post is part of a series on NServiceBus. In the previous article, we created our first saga. In this article, we will introduce the concept of timeouts and…
For a long time, I’ve been used to creating regular expressions in C# like this: I declare it because I know it’ll never change or require any dynamic values…
This post is part of a series on NServiceBus. In this article, we will implement the happy path of our example saga introduced in the previous article. In this…
This post is part of a series on NServiceBus. In the previous articles, we looked at fundamental concepts for messaging and how to get started with NServiceBus…
This is part of my blog post series on AutoMapper. Part 1 Part 2 Part 3 Part 4 The series returns! Part 5 of my AutoMapper series is brought to you today thanks…
Introduction Unit Testing is easy on greenfield but hard on legacy code. You’ve gone through the initial steps of extracting the troublesome dependencies for…
Consulting remotely for multiple clients presents many unique challenges not seen in other areas of software development. Within the scope of things probably…
.NET’s abstraction finally absolves us of the need to wrap and friends with a custom interface. I’ve used it a lot for my date/time abstraction needs and have…
You’re being responsible! You want to ensure that merges into your stable source control branch are safe, so you gate any merges with a build, establishing…
Dependencies on external resources can make code difficult to test or maintain. This is hardly a hot take. Recently, a user in the devBetter Discord server had…
This post is the fourth in a series on NServiceBus, a popular messaging framework for building distributed systems. If you’ve missed any of the previous…
In my last post, I wrote about wanting to run my web projects and tests in one terminal window and how I achieved it using DotnetBackground. We received this…
Picture this - you’re working on a .NET website and want to run front-end tests against that site. What happens when you want to run tests against the sites…
This post is the third in a series on NServiceBus, a popular messaging framework for building distributed systems. In the previous post, we covered the basics…
Pull requests, or PRs, are a functional requirement in any cooperative development environment (and single development environment, in my humble opinion). They…
This post is the second in a series on NServiceBus. In the previous article, we looked at What is NServiceBus. In this article, we will look at how to get…
This post is the beginning of a series focused on NServiceBus which aims to provide an overview of the framework and its ecosystem. We’ll start this series with…
Every now and then I need to do some math in my code, for some required business logic rule or other purpose. As an easy example, let’s apply a discount to a…
In today’s increasingly complex world of software development, asynchronous messaging has become a fundamental architectural principle when building service…
Recently someone asked: A simple question. I have a set of tasks to perform and I want to optimize their performance. Basically reading a file and writing to a…
After seeing Steve pairing with ChatGPT, I’ve been pairing with my friends ChatGPT and Bard Gemini to help me get past writer’s block. This morning, I prompted…
This article is part of a series on leveling up your testing skills Creating Test Objects via Design Patterns Supercharging Your Test Data With AutoFixture…
Lately I’ve been tinkering with game development. It’s an aspect of software development that isn’t part of my job and I’ve always had a hankering to produce a…
Refit exposes several settings and options. One such option enables the ability to add bearer tokens (any headers, really) to outgoing requests. To get this…
This article is part of a series on leveling up your testing skills Creating Test Objects via Design Patterns Supercharging Your Test Data With AutoFixture…
When we got started with Refit in my previous post I left a question open: If we wanted detailed information on HTTP traffic in Refit, how would we go about it…
There are lots of ways to work with in .NET. When working with external APIs, I’ve recently discovered a rather useful mechanism that lets me set up a named…
This article is part of a series on leveling up your testing skills Creating Test Objects via Design Patterns Supercharging Your Test Data With AutoFixture…
If you’re like me, you’ve needed to test business logic surrounding the current time. You’ve probably run into the classic case of having a embedded directly…
This article is part of a series on leveling up your testing skills Creating Test Objects via Design Patterns Supercharging Your Test Data With AutoFixture…
As you move from Moq to NSubstitute, you may wonder how they differ code-wise. In a recent lunch-n-learn discussion, Scott DePouw walked us through how the code…
In an ever-evolving digital landscape, businesses large and small often face challenges keeping pace with technological advancements. Sometimes, the gap between…
We help some of our clients with migrating from .NET Framework to .NET Core apps. The .NET Upgrade Assistant can assist in the transition. One of the approaches…
Have you checked in code that’s misaligned and not formatted cleanly? Have you checked in code with broken tests? What if there was a way that you could have a…
Have you ever looked at code and felt overwhelmed by the inconsistencies in curly brace placement? Have you felt exhausted trying to follow the inconsistent…
Note: This post is part of the SciFiDevCon 2023: May the Fourth Be With You event. Ardalis and Sadukie happen to be a part of the Stir Trek planning committee…
If you are wanting to work with EF Core with Postgres, you may run into a problem where the casing of your tables may cause issues for running SQL queries…
As March comes to an end, I wanted to feature someone in honor of Women’s History Month, one of the women behind the L of SOLID principles. Dr. Barbara Liskov…
LINQ (Language Integrated Query) is a widely used feature in .NET, and it’s great to see that it’s still being built upon and modernized. Most of the changes…
Naming things is hard, especially if there are multiple words that make up that name. Remembering names of naming conventions can also be hard. However…
Code coverage analysis is a useful tool for any developer looking to build high-quality, maintainable code. It helps identify gaps in your test coverage and…
While I was looking at the Ardalis.GuardClauses repo, I noticed that the build process was failing. Talking with Steve, I noticed that the build was failing on…
In today’s digital age, having a website or a web application has become a necessity for businesses and individuals alike. But deploying a web application can…
In this quick tutorial, you will learn how to run and debug your application in Linux using WSL (Windows Subsystem for Linux) and Visual Studio Code. The…
Compression can be a useful tool for reducing the size of data transmitted over a network or stored on disk. The .NET framework includes several classes that…
This post is part of the F# Advent Calendar 2022 hosted by Sergey Tihon. The goal of this post is to provide a glimpse into the journey of two C# developers…
Unit Testing Validation of Annotated Models It’s no secret that I like to unit test my code. The more I can decouple from dependencies and isolate, the faster I…
This is part of my blog post series on AutoMapper. Part 1 Part 2 Part 3 This was something I stumbled across in my work lately, which spurred this unexpected…
In this article we’ll show how structs and classes have different behaviors when it comes to constructors and why you need to be careful when using a struct to…
Fluent Assertions is a library used to make C# test code more readable and expressive. This frees your tests from syntax heavy assertion statements and allows…
This is the third part of my blog post series on AutoMapper. First part here! Second part here! AutoMapper Allows Self-Mappings Without Map Creation Typically…
I recently tried a code kata that Steve Smith posted in our devBetter Discord server. The kata is essentially a modelling exercise. The goal is to model a…
If you’re coming from another programming language like JavaScript, Rust or Go, you may be familiar with the function found in the standard library of those…
So you’ve set up some benchmarks for some performance critical piece of code in your application. Perhaps you’ve even followed along with my Benchmarking in…
In the latest release of Ardalis.Result, a community requested feature was added to convert results from one type to another. This allows for flexible…
In this article I will show, step by step, how to set up a .NET benchmarking project. It is a cleaned up transcript from a video I made. We’re gonna start with…
This is the second part of my blog post series on AutoMapper. Check out the first part here! AutoMapper: A Very Testable Tool One of the many reasons I use…
Over the years, one of the tools I end up setting up / using / maintaining a lot has been AutoMapper. For the uninitiated, AutoMapper is a tool used to do a…
ASP.NET Core has great support for automated integration testing. The docs provide everything you need to get started, and there are many community articles…
I was recently going through the process of installing the developer tooling I use on a fresh, new laptop. I installed the usual suspects like Visual Studio and…
Earlier this year Microsoft announced a new way to manage dependencies in .NET applications called Central Package Management. This new way of managing…
Specification is a pattern in Domain Driven Design that helps encapsulate domain knowledge in a reusable way. The term Specification was coined by Martin Fowler…
A result is an abstraction that allows developers to express the value as well as the outcome of an operation. A basic result can represent whether an operation…
Monitoring and Logging are critical pieces to the overall health and success of an application. Logging, which we’ll be specifically focusing on in this article…
A Smart Enum is an enhancement of the C# enum that provides a strongly typed and object oriented approach to enum types. Smart Enums can be used when a enum…
In a previous article we covered Getting Started with Guard Clauses. We introduced what guard clauses were, when they should be used as well as the Ardalis…
A guard clause is a software pattern that simplifies complex functions by “failing fast”, checking for invalid inputs up front and immediately failing if any…
Localization, the process of providing information in multiple languages as specified by the user, is a pretty common requirement for web apps. ASP.NET Core has…