Java Value Objects

Posted by & filed under Java.

Java 8 not only gives us both default and static methods on interfaces. One of the consequences of this is you can create simple value objects using interfaces alone, without the need to define a class. Here’s an example. We define a Paint type which is composed of an amount of red/green/blue paint. We can… Read more »

Java Forwarding-Interface Pattern

Posted by & filed under Java.

Java 8’s default methods on interfaces means we can implement the decorator pattern much less verbosely. The decorator pattern allows us to add behaviour to an object without using inheritance. I often find myself using it to “extend” third party interfaces with useful additional behaviour. Let’s say we wanted to add a map method to… Read more »

Joins in pure-java database queries

Posted by & filed under Java.

I’ve been thinking about how to express joins in my pure Java query library. Hibernate and other ORMs allow you to map collection fields via join tables. They will take care of cascading inserts and deletes from multiple tables for you. While this is nice and easy, it can to cause problems with bigger object… Read more »

Thoughts from #pipelineconf

Posted by & filed under Conferences, ContinuousDelivery, XP.

This week I attended #pipelineconf, a new one-day continuous delivery conference in London. I did a talk with Alex on how we do continuous delivery at Unruly, which seemed well received. The slides are online here There were great discussions in the open space sessions, and ad-hoc in the hallways. Here’s a few points that… Read more »

Checked Exceptions and Streams

Posted by & filed under Java.

There are different viewpoints on how to use exceptions effectively in Java. Some people like checked exceptions, some argue they are a failed experiment and prefer exclusive use of unchecked exceptions. Others eschew exceptions entirely in favour of passing and returning types like Optional or Maybe. Whatever your view, you are likely to need to… Read more »

C# style properties in Java

Posted by & filed under Java.

One of the complaints that often comes up in any discussion on Java is getters/setters. If there are c# developers present they sometimes suggest that Java would be better off with c# style properties. c# properties, replace separate getters and setter methods that often clutter Java code. They allow the getters/setters to be combined together,… Read more »

Tools and Tradeoffs – CI Build Servers

Posted by & filed under XP.

There are some tools that are considered almost a universal good amongst developers. Revision control systems tend to fall into this category. Everyone ought to be using one. Continuous integration servers are also often bundled in to this category. It’s the kind of tool people ask you during interviews whether you use and judge you… Read more »

Cross-functional teams vs Software Architects

Posted by & filed under XP.

This week I have been reading Simon Brown’s leanpub book “Software Architecture for Developers”. It is an interesting read and has lots of useful advice for creating a shared technical vision and communicating technical concepts effectively via sketches. One thing I was struck by while reading it is just how many of the responsibilities of… Read more »

Typesafe database interaction with Java 8

Posted by & filed under Java.

Method references in Java 8 will allow us to build much nicer APIs for interacting with databases. For example when you combine method references with features we already had in Java it’s possible to create clean, typesafe queries without needing code generation. Full examples and implementation available on github. Here’s an example of what’s possible… Read more »

Null Coalescing in Java 8

Posted by & filed under Java.

SQL gives us a “coalesce” function, which returns the first non-null argument. This seems to be a common operation in Java too, since Java unfortunately burdens us with the concept of nulls. We have been able to do something similar with Java for some time using a varargs method like this: public static <T> T… Read more »