I'd suggest to implement an abstraction allow implementation of more flexible models by using: http://en.wikipedia.org/wiki/Domain-driven_design
I'd suggest to implement an abstraction allow implementation of more flexible models by using: http://en.wikipedia.org/wiki/Domain-driven_design