Implementing domain driven design