RSSAmplifier

Blog

Frank on Software

A blog on software, coding, and technology by Frank de Jonge

blog.frankdejonge.nlRSS feed ↗15 posts

Latest posts

New language, new direction, new content

Over the last couple of years, this blog has gone stale. I intend to change that and produce more content when I learn something new. This new content will still cover a lot of the things you're used to: software design, architecture, domain-driven design, and distributed systems.

Encapsulating interactions with the outside world in your domain model.

In my ever-lasting battle against anemic domain models I've developed a preference on how to integrate with the external concerns. In this post I'd like to show an alternative, a strategy on how to keep encapsulating behaviour wile interacting with the outside world.

Use a message envelope

Event-driven architectures have various styles of communication. In my previous post I described a couple of event types you may see in these kinds of architectures. In this post I'd like to go over a supporting practice that benefits virtually all types of events; the use of message envelopes.

The different types of events in event-driven systems

Event-driven systems come in all sorts of shapes and sizes. The obvious commonality is; they all use events to communicate information. These events come in many shapes and sizes, and determining what goes into an event has an immense impact on the design of your system. In this post

Reliable event dispatching using a transactional outbox

Using events in a system is great, but how do you know for sure if you've reliably dispatched your events? The transportation of events needs to be done reliably while maintaining overall system consistency, be it eventual or immediately. In a typical setup, a database is used to

Flysystem 3.0.0 is released

On the 13th of January 2022, version 3.0.0 of Flysystem was released. The library ships a couple new methods on the main filesystem and adapter interfaces, making it a breaking change that cause a major version increase.

Where does my validation live?

This is a question I've received over and over again, a question that does not have a single answer. Sometimes when I explain how I approach this I get surprised reactions, so I figure I might as well share it in a blog post and see what other

Ensuring data(base) consistency during concurrent requests

Bugs caused by race conditions can be a huge source of frustration. They are difficult to identify and often difficult to remedy. As part of my day to day job at Mollie , guarding against data inconsistencies is always top of mind. At the very least, unexpected inconsistencies require attention from

Setting up a TypeScript multi-package mono-repo for @scoped/packages.

How to use NPM workspaces for scoped packages.

Back the func off, this is my abstraction!

How to deal with failures when designing abstractions.

A new major version of Flysystem

For those who missed it, a new major version of Flysystem was released on the 24th of November. A new major version allows you break with the past for the sake of the future, which is exactly what I've done. For the second version of Flysystem I went

Testing without mocking frameworks.

By creating your own fakes, you can free yourself from using mocking frameworks. Find out how you can benefit from it.

Setting up docs with Tailwind CSS & GitHub Pages.

Learn how to setup documentation websites using Tailwind CSS, Jekyll, and GitHub Pages. See how to configure webpack to purge unused CSS.

Type-safe stream processing in TypeScript

TypeScript's advanced typing features allow you to create a type-safe way to process streaming data.

Array destructuring in PHP

Use advanced array destructuring techniques for more expressive handling of arrays in PHP. New array functionalities since version 7.1