This book is divided into four sections.
This book would attempt to explain all concepts/patterns with source code. I am assuming a relational database based system. Since in this book I would explain why, the concepts could be useful in other kind of systems as well. I am using Java as a programming language in order to reach out to most people. I would be sticking to familiar architecture and tool set to keep things simple.
I would take the reader through layers within an module, modules forming an application and applications forming a system. There are two ways I contemplated taking this journey in terms of levels of abstraction. First was to start from highest level which would be system view or from the lowest level, that is a single layer in a module. Instead I thought I start from somewhere in middle and expand both ways. So we would start with an application. This also seemed natural to me because this is similar to evolution we see when we start with a new product.
In this book we would take the example of a software system which enables the business of a small micro finance institution.
Anatomy and workings of an application
Every project needs define its layers, modules and building blocks.
All things not dependency http://www.tonymarston.net/php-mysql/dependency-injection-is-evil.html
You don't suffer because you haven't figured out the right presentation pattern (MVC, MVP, MVVM) but because you haven't figured out, how to handle view launching other view, handling modal windows, wizards, so on
Hide everything inside webcontext and keep your code independent of session, request, response. For testing create a derived test object and set data into for asserting the state
Build frameworks deliberately to separate all domain specific code from the functional code. The framework should be created in a way that any functional code on it should be easily unit testable. The development of framework should be associated with development of test utility if required.
The functional test should ideally test the behavior of the framework and not the functional code. Functional code should be testable