You should sell any grand-parent you can get your hands on to avoid this, but cases do come up. Then you just have to hold your nose and divide your software into remote, coarse-grained components. The overiding theme is, in Colleen Roe's memorable phrase, to be parsimonious with object distrubtion. Sell your favorite grandma first if you possibly can. Working with the Distribution Boundary So as you design your system, you need to limit your distribution boundaries as much as possible, but where you have them you need to take them into account.
Every remote call travels over the cyber equivalent of a horse and carriage.
All sorts of places in the system will change shape to minimize those remote calls. That's pretty much the expected price. However you can still design within a single process using fine-grained objects. These coarse grained objects don't really do anything, so they act as a facade for the fine-grained objects, a facade that's only there for distribution purposes, hence the term Session Facade . Using a Session Facade helps minimize the difficulties that the coarse-grained interface introduces.