Dynamic Recursive API with F#

In this post I will implement a state machine using recursion and continuation functions. These two concepts enables us to implement a state machine with a dynamic recursive API that hides any data associated with states while enforcing the client to perform only valid transitions between the states.

»
Author's profile picture Lauri Taimila on F# and Functional

F# - How to keep domain pure when logic depends on current date

In functional programming we strive to write side-effect free applications. In other words, all the functions of the application should be [pure][12b2f6a1]. However, completely side-effect free applications are mostly useless, so the next best thing is to minimize the amount of side-effects, make them explicit and push them as close to the boundaries of the application as possible. Although the whole application cannot be completely side-effect free, it’s usually possible to write all the business and domain logic in a pure functional way.

»
Author's profile picture Lauri Taimila on DDD, F#, and Functional

DTO Builders with T4

T4 template that you can add to any Visual Studio project to generate DTO Builder classes automatically from the DTO classes. It generates builders with fluent extensible API.

»
Author's profile picture Lauri Taimila on .NET

The complicated relationship of domain and persistence

It was only yesterday when I blogged about .NET Solution structure of an enterprise application. I got some feedback from my colleagues about that post. One of the confusions was, why would I make the persistence project depend on the domain project? In this blog post I try to give a complete answer to that design choice.

»
Author's profile picture Lauri Taimila on Architecture

.NET Solution Structure of an Enterprise Application

After reading multiple DDD-books (all two of them) and studying architectures like Onion, Clean and Hexagonal, I have tried to come up with a good .NET solution structure that enables developing a well architected enterprise application with domain-driven development while following the SOLID principles. In this blog post I will build such a solution step-by-step while explaining the reasons behind each design decision. You can find the complete solution from the GitHub with one commit for each step of the post.

»
Author's profile picture Lauri Taimila on Architecture

Elokuvat

I’m really excited to release my 3th iOS app called Elokuvat. That’s Finnish for movies. Elokuvat is an application that brings the currently playing movies and showtimes of the Finnkino movie theaters in Finland into your pocket in an elegant and easy-to-use package. The application utilized Finnkino’s open API and The movie DB for enhanced content.

»
Author's profile picture Lauri Taimila on Projects

DDD & Testing Strategy

In my previous post I discussed the unit of unit testing. Uncle Bob happened to blog about the same subject few days after my post. In that post he proposed the following rule:

»
Author's profile picture Lauri Taimila on Testing and Architecture

Unit of unit testing

Unit testing is something I have been doing for many years now. During that time, I have learned a lot about writing good tests, clean code and testability in general. I have learned mocking, TDD, BDD, you name it. One thing however has stayed the same during the whole learning process: the concept of unit. When I started unit testing I learned that class is a unit and all the external dependencies of the class should be mocked away. So, each class is tested in isolation from all the other ones and there is always a test class for each production code class.

»
Author's profile picture Lauri Taimila on Testing

Junat 2

I finally finished my second iPhone app which is pretty much the same as the first one was. My second application is Junat 2, which continues from where my first app Junat left off. Junat 2 is a complete rewrite of the application and brings a lot of new features that were missing from the original Junat application. I also had to change my strategy and made this application non-free to be able to cover my development costs. I’m hopeful that the users will understand this and are willing to pay the minimum price from my app.

»
Author's profile picture Lauri Taimila on Projects

White clock for OSX

I really like the Obsidian Menu Bar that Max has created for Lion. It basically just changes the OSX menu bar into black which makes it blend very nicely with the Apple displays. The problem is that it doesn’t change the color of the clock and therefore forces users to install iStats or some other application that offers more customizable clock. Although iStats is a great application, when you only need a clock $16 might feel a bit too much.

»
Author's profile picture Lauri Taimila on Projects