MVC is the architecture espoused by all and sundry as the epitome of "proper" development. Conceptually it makes sense. The reality falls a little short.
We were discussing the relaitve merits of different application servers here at WNC the other day and discovered that although we strive to separate the visual stuff from the business logic, there is always some overlap. J2EE, as an example, has JSPs and servlets as the main two application design components. The servlet is normally used for logic and heavy lifting (let's not talk about EJBs in this context, as few people actually use them) while the JSP provides the visual layout. Problem is you can poke layout into servlets and (more dangerously) you can poke logic into JSPs.
I've never been a fan of JSPs purely because the ugly mix of html markup and Java code all in the same file. For this reason we went with p-tags in pages in Tornado server. The p-tag simply denotes a field you have no ability to put any kind of server-side logic into Pages. Actions are a little less clear and are most like servlets (or web query open agents in Domino). In Actions there is the ability to blur the line between presentation and logic.
It's all about compromise. I think we strive for perfection but always have to compromise at some point between delivering the solution and coming up with the perfect logical design. The difference between a good and bad system is where that compromise point occurs.