Good practices of software engineering tell us to decouple software components as much is possible (without overtake a reasonable limit!).
If you give a read to my first blog article (excluding greetings...), you can see my interest about this argument. In few words I thing that last generation OO-platforms like .NET and Java are of great help in slicing software in components viewed as services.
Two of most important design patterns behind this principles are Inversion of Control and Dependency Injection (I suggest you to read Martin Fowler article).
For .NET there are two interesting libraries that help you implement this kind of stuff:
Castle Project and Unity Application Block (both open source).
For Java take a look to PicoContainer.
All of these are large and powerful libraries that give you a lot more of what told in this post. For this reason I decided to write a simple Inversion of Control/Dependency Injection Container (as soon as possible on CodePlex).