I found that looking through github is a good exercise. I agree with some things and strongly disagree with other things.
I've mostly looked at projects that are web-based, and therefore, MVP style. I think the MVP acronym doesn't drive the concept home very well. I think there should be more letters, like:
B for "build," where you put your build scripts.
C should really be F, in my opinion. You can break controllers down into multiple function-type files, which go into their own semantically named directories. So, if one function has a purpose, each file, and each folder should have a single purpose. It is easier to move files around and keep your sanity that way.
C then becomes "connection" to external resources, etc.
Of course, models and views should be separated the same way as controllers.
My favorite kinds of systems have a very clear path from idea to idea. I suppose that, conceptually, you should aim to always navigate your code as if you never seen it before, asking yourself if what you did would make sense to someone who never seen your system before. If it doesn't, then it's time to move your files around, move functions to other files, create subfolders, etc. I'd much rather have 1,000 files with 4 functions in each than 4 files with 1,000 functions in each.
An example of what I'm talking about is in gcc:
https://github.com/gcc-mirror/gcc/bl...ily/c-format.c
The file is named "format.c." It includes a single line describing what the file does:
Quote:
/* Handle attributes associated with format checking. */
Sorry, don't have a book recommendation, but github is modern and full of interesting surprises.