Jim and Chris have just offered some excellent advice.  I would only add an 
emphasis on not trying too hard up front trying to make correct choices.  
Refactoring is not something to avoid, like an admission of guilt.  It is 
probably your most powerful OOP technique.  For me it is the most fun part of 
OOP programming.  I am just finishing an MVC project.  In the first 
iteration, there was a lot of leakage between M, V and C.  I knew it was 
happening but trapping my ideas before they slipped away was more important 
than "proper structure".  Now, in the refactoring stage, I concentrate on 
disentangling the speghetti without losing functionality.  The old adage is 
correct:  first get it working, then get it working right, then make it fast.  
(And then make it pretty).