Pattern name: Phase-In Tiers
Context
You must come up with a solution that supports both your current and planned network architecture, and yet leverages your investment in object technology to produce results quickly. You understand that a three-tier approach would be beneficial, but your current tools and development expertise aren't up to the task. So:
Problem
How do you move to a Three-Tier distribution architecture over time?
Forces
You need to best utilize existing and new computing and network resources. You would like to move to a client-server set of solutions as quickly as possible, but there is no way that everything can be replaced at once. The cost of a total redevelopment effort is prohibitive, and your staff could not complete the effort in a reasonable length of time. Therefore:
Solution
A good approach is to begin all development on the client (sometimes resulting in a prototype "fat client") and then push the code from the bottom two layers of a four layer architecture onto a server as development progresses. In this way you can add tiers over time, starting with a two-tiered system (i.e., a "fat client") and moving to a three-tiered system later.
Consequences
Using distributed object technology does not preclude using either relational or OODBMS technology as appropriate for object persistence on the server(s) in any of the upper tiers. In fact, one common solution is to utilize an ODBMS for object persistence between tiers one and two, and an RDBMS for persistence between tiers two and three.
Related Patterns
TrimAndFitClient discusses how to distribute behavior between client and server. FourLayerArchitecture discusses how to distribute behavior among the layers of a software architecture. ThreeTierArchitecture gives the rationale for going to a three-tier architecture.