A more ddd-esque approach