modeling closer to the domain itself, surrendering a little OOP