So, in taking all the CS classes I took in school something that the department seemed to want to stress was to keep graphics related classes apart from the rest of your code. I never really questioned this and for the small projects I've worked on since it always worked well enough.
As an example, let's say I am making a very simple soccer game. I'm basically going to draw the field, the movable objects, and then an overlay of some sort that might say the time or the score. Well based on the above I would have a graphics class and it would have a drawField method, a drawPlayers method, and a drawOverlay method. I would have some kind of "main" method that would pass the player objects (for example) to the Graphics class and it would draw them, simple simple. The field class, overlay class, and player class wouldn't even know what graphics api I was even using.
Well, as I've been trying to build some bigger and more complex games this method of doing things seems less than optimal. I find I'm passing various objects all over the place and that my Graphics class can "see" basically every single bit of my code, which doesn't seem quite right to me. I've looked up some open source games to see how they did it and I've seen a few different ways of doing things, but it seems like many have drawable objects drawing themselves. So is that a better way to do things? Is my original way of organizing ok? Is there a "standard" way to do it?