I think you are talking about software architecture (as opposed to hardware or system architecture).
Perhaps the most important rule (I would not call it a template) is the separation of problems. The value of one component must process exactly one task, only this task and the complete task. If you stick to this (which is harder than it sounds). You will have a basis for the connectivity you mentioned, for example. user interface sharing. If your user interface layer really only performs the user interface, you can replace it with something completely different.
-, GMail, " " . , , , . (, ). GUI, (, "" . , . , , , , , . - : "", (, , ), , , gui. , , , . , .
, : - , , . , , , . , " "
: . : " " ". , :" " , http://www.amazon.de/s/ref=nb_ss_eb?__mk_de_DE=%C5M%C5Z%D5%D1&url=search-alias%3Denglish-books&field-keywords=Enterprise+Integration&x=0&y=0 '. - , " -". (, Twitter) - , , , google > architecture twitter <.