About Java project and package organization
There is a heated debate about what is the most appropriate organization and naming convention of Java packages and projects and, by extension, software modules. The two approaches are ‘by abstraction layer’ (e.g. model, controller, view, etc) or ‘by feature’ (e.g. account). I find that, at least at an inside-tier level (e.g. application level), the later approach makes more sense. That is, a tier will be contained in a project (e.g. web-service or core) where packages are organized by features. Inside of these packages I reproduce the different abstraction layers in sub-packages if needed.
Dangers of inheritance in OO programming
Note: The following ideas are part of what is considered today good practices in the Java development community, and are very well explained in the book Effective Java (2nd Edition) by Joshua Bloch.