@victorlin - definitely agree with you regarding OO design too early making it over engineering or modeling it wrong, but we've been working on this for almost 3 years now. We've got a couple of patterns that we can share w/ you that we've really nailed down over time.

One flaw I see with your method is if you ever have to override any of the uuid creation schemes, it's very hard to do so (you don't expose a method anywhere to do this).

I'll fork your branch of billy and make a pull request so I can demonstrate what I'm talking about. I'll also add you to our internal Balanced project so you can see how advanced it is.