About XOo°F

What ?

The main purpose of XOo°F is to help you create the interface of the business logic layer of your applications. The interfaces created using XOo°F exhibit the following properties:

  • XML enabled: it is possible to communicate with the business layer using XML messages (although this is not the only possible mechanism).

  • Extensible: it is possible to extend the business layer interface without redeploying client applications (thanks to a simple backward compatibility model).

  • Open: using XOo°F guarantees that the business logic is not tied to a particular middleware or platform; it is indeed possible to expose the same business logic over several communication protocols.

  • Object Oriented: the interfaces tries to preserve the simplicity and performance of coarse grained services, while allowing to structure the exposed operation in an object oriented way (using classes and interfaces).

  • Well documented: XOo°F provides a mechanism to specify the interfaces in XML, mixing informal documentation with very formal constraints in the same easy to read documents; code generation from these specifications then ensures that the constraint implemented in code matches the documentation. Such constraint include data type type constraints, and state machines.

XOo°F provides a set of tools for writing:

  • the XML specifications of the service façade exposed by the business logic layer of the application server: XMLClass;

  • the XML specifications (schemas) of the messages exchanged by each service: XMLStruct;

It also provides a framework for developing the application server that implements the specifications.

XOo°F stands for eXtensible Open Object Oriented Framework

How ?

At the core of XOo°F lies XmlStruct, an XML vocabulary to specify data structures. This vocabulary predates W3C XML Schemas and is much simpler, because it is specialized in the description of data structures. It includes simple yet powerful DTD for the documentation parts of the schemas, therefore encouraging the creation of well-documented data structures.

XmlStruct provides a set of code generation tools. Starting from the XML specifications, one can generate data structures in various programming languages (Java, .NET, VB6, Python). These generated data structures have methods to validate themselves according to the constraints laid out in the specifications, to convert themselves to and from an XML representation.

Additionally, code generation tools exist to generate DTDs, W3C XML Scheams, Tamino Schemas, RelaxNG Grammars, HTML, DOCBOOK, etc.

XmlStruct is complemented by another XML vocabulary, XMLClass, to specify classes and interfaces, where the methods accept and return parameters which are XmlStruct data structures. Additionally, classes can have a state machine specified.

A very lightweight framework, XMLDispatcher, exists in several programming languages (Java, .NET, VB6, Python) to help implementing the business logic specified in the XML specification. This framework combines code generation from the specifications, with a simple abstraction layer to isolate the Business Logic from its invocation environment (such as the communication protocol, or transaction handling).

Finally, a set of tools permit the creation of human-readable documentation from the XML specifications, in various formats (HTML, CHM, DOCBOOK, LaTeX).

When to use ?

Whenever you must implement a multi-tier application where the business logic may be deployed on a different machine than the user interface or client applications. XOo°F is most useful in heterogeneous environments (ex. .NET client communicating with Java or Python application server), although it is still interesting in a single language, single machine environments. Indeed, experience shows that successful applications live longer than expected, and will need to be invoked in unexpected ways during their lifecycle. The XOo°F interface enables very easy adaptation of the business logic to new middleware or communication protocols.

Depending on the requirements, XmlStruct may also be usefully used alone, to specify and document XML schemas.