When developing with XPE, you should follow a Service-Oriented approach, which is quite different traditional OO based approach.
In XPE, each Service is provided by a Resource. A Resource is anything that has a URI. Therefore, a Service itself is also a Resource but a Resource may not be a Service. A similar concept in traditional programming languages to URI is namespace. Just about everything in XPE is a resource.
To be more specific, a Service in XPE is provided by an XML Pipe (XPipe), which is made of a number of XML Pipe Nodes (XNode). There are three types of XNodes:
Writing a Service under XPE is very nature. When providing a Service, one usually starts thinking the input and output, which are handled by selecting the right XSource and XSink. Next, one divides the process of providing a Service into a number of smaller steps. Each step is then modelled by a XFilter. The best analogy to a Pipe is an assembly line.
XPE introduces a number of architectural constraints so optimal system attributes (performance, scalability, extensibility etc) can be achieved: