As you can see, there are a few projects involved in this solution.

The two Application Blocks projects need not neccessarily be included, instead we could have built the assemblies and referenced those from our projects.

The Unit tests projects speak for themselves, though a word of note should be raised at this point with regards to the distinct lack of a complete and exhaustive set of unit tests:

  • Since this is a Prism 2 showcase solution, it was considered that attention could be distracted from other matters should we concentrate our efforts on providing a complete set of unit tests.
  • We have provided unit tests for most of the application, but due to an issue identified with Rhino Mocks with respect to the Unity application block, at the time of development not all modules were fully unit tested .
Loosely coupled ...

The components are decoupled through the use of Interfaces.

Each composite module can be thought of in terms of providing implementation details for the given (and respective) set of interfaces.

Programming against a set of interfaces at design time gives us the ability to change the implementations thereof at runtime

The clients of any given interface are not bound to a specific implemntation of that interface. They are said to be loosley coupled in that the client is tightly bound to a given interface, but loosely so in that the implementation is not dictated.