Our example consists of two netlets. The first simply uses a node facet. This client netlet is even simpler than our previous example because no warrant is needed to access a node facet; if the netlet is running on that node it just asks the node for it. The facet we ask for is, of course, the IHelloFacet.
Now you might be thinking ``Why would a node offer an IHelloFacet? A node has the potential to offer many useful features, but offering a facet to get a simple hello world message is surely arbitrary and a waste of time.'' This is fair enough. The fact is the node doesn't offer IHelloFacet among its default facet collection, but this collection can be extended and that's where the second netlet comes in.
The second netlet provides the IHelloFacet. (Or, more correctly, it provides an object with implements IHelloFacet, because IHelloFacet is an interface.) This more interesting. It doesn't directly provide an IHelloFacet--what it actually does is tell the node that it can provide an IHelloFacet if needed.
One of Nodality's own facets is an admin facet called INodeAdminFacet, and one of INodeAdminFacet's features is the ability to add to Nodality's existing facet collection. The provider netlet supplies an object which can produce an IHelloFacet.
That's a procedure worth repeating: Nodality's INodeAdminFacet is given an object which, when asked, gives an IHelloFacet.
Note that INodeAdminFacet is certainly not given an IHelloFacet itself. The IHelloFacet may never be requested. Or it may be requested several times by different netlets, and we might not want to give the same implementation on every request. So the INodeAdminFacet is given a object from which it can get an IHelloFacet if ever it's needed.
Nik Silver 2002-03-09