Blog

Software Architecture: Containers

Containers are a transformational technology that enables an enterprise to move faster by using automation and better hardware allocations. As I'm doing some learning around Kubernetes as one of my technical development goals this year, I've decided to switch gears from my pure Software Architecture blogs to focus more on containers and Kubernetes for a few months to support those personal learning goals. While containers in and of themselves have less to do about software…

April 08, 2022
|
approximately 7 minutes to read
Reading Reference Data in .NET Unit Tests

When I'm unit testing in .NET many times I need a very large string or set of data to provide as input to a test case or as a final insertion. I like to use XUnit, but there aren't a lot of clear options to do this in any unit testing framework. One way to do this is to just store the large amount of data in a file somewhere near the test it's self. Common options to reference this file are around finding the test assembly DLL, making sure the files are copied to the output…

March 26, 2022
|
approximately 2 minutes to read
Software Architecture: Components

For most of my posts in my software architecture series, I've been talking about defining boundaries and layering software to build a piece of software. In this post, I want to talk about dividing layers up even further into software components. What's a Software Component A software component is a set of code that is typically built and deployed together and cannot be broken apart from that deployment unit. In .NET this would be an assembly. In java this would be a jar. In…

February 26, 2022
|
approximately 8 minutes to read
Software Architecture: Clean Architecture

Clean Architecture is a pattern set out by Robert Martin, also known as "Uncle Bob" in the software industry. It can read about in his book Clean Architecture: A Craftsman's Guide to Software Structure and Design. This is a post to summarize my thoughts after reading the book last year. It is an architectural pattern used to structure software. It's based on the premise that Use Cases and the Business Domain are central to the software. In other words, I can use an database…

February 18, 2022
|
approximately 9 minutes to read
Building a Gatsby Plugin to Render Mermaid Diagrams

A while ago, I decided to start using Gatsby to build my personal website (this site). I had been using the static site generator Hugo for a while, but the developer tooling wasn't that great. As I had been working on React pretty exclusively at work, I figured using React would be a better front end as the developer tooling is much better. After all React is often rated as one of the top view engines for the web right now. What is Gatsby? Gatsby is a static site generator…

February 12, 2022
|
approximately 5 minutes to read
Software Architecture: Dependency Inversion

Dependency inversion is a practice to help decouple code from its implementation. Specifically, it helps to control the flow of dependencies from one component to another. It's a crucial technique to have in a software developer's tool chest as it can help to craft the dependency chain in an application and enforce architectural boundaries. By being able to control the direction of dependencies in an application we can control where change needs to occur for an application…

February 11, 2022
|
approximately 4 minutes to read
Software Architecture: The Monolithic Application

This is the second article in my software architecture series. I'm going to be delving into monolithic software architectures. I will not hit all topics, but again this is just to organize my thoughts after recently reading several books related to software architecture over the past year. What's a Monolithic Architecture A monolithic architecture is a piece of software built together and deployed as a single code base. Internal components of the architecture typically have…

February 08, 2022
|
approximately 8 minutes to read
Using GitHub Actions to Build Docker Images

Docker is a great tool for deploying applications. One of these primary reasons is packaging up an application in an image which can easily be deployed across systems. The Docker image needs to be built and it needs to be pushed to a container registry. Docker can then use the container registry to pull images and run them on local machines and servers. GitHub provides an excellent capability to do this for simple projects with its GitHub Container Registry. It's built in and…

February 01, 2022
|
approximately 5 minutes to read
Software Architecture

I picked up the book Fundamentals of Software Architecture and have been reading through it. I had also read Clean Architecture last year. So, thoughts about software architecture have been on my mind as of late. I decided I would jot down some thoughts from the books. What's Software Architecture I like how the Fundamentals of Software Architecture defines a software architecture. Most definitions I've come across deal with structuring the software into components. While…

January 21, 2022
|
approximately 4 minutes to read
Dockerfile Tips and Tricks for .NET

I've been working with Docker for close to 4 years now. My first project was a React application that I needed to deploy an on-premsis server. I was fairly new to containers, so I decided I'll just install it on a Linux server and see what the fuss is about. Once I had something working, I was hooked. They just made life so much easier! While it is very easy to containerize applications, there are a few tips and tricks I've learned over the years that really make Docker much…

January 18, 2022
|
approximately 3 minutes to read
© 2024 - Built and designed by Jeremy Honl with Gatsby. Images are from Unsplash