Yesterday Chris Toohey provided one of his typically insightful articles about the change of nomenclature with Domino R8, from database to application. To paraphrase the article, it was a challenge to developers to think before hitting Ctrl + N, that a developer’s toolkit should contain reusable modules that are extended and assembled into an application. In my opinion, IBM have made large strides towards encouraging developers to do so not just by a change of terminology but through the two major additions with R8.
First came composite applications. Now first let me admit that I’ve yet to use composite applications in anger, not because of the technology itself, I’ve just not had a project that suited a composite application. But this epitomises the core of the new terminology, that an application doesn’t even need to hold the data it is surfacing. That is what a database is for and a concept that is in line with the integration with DB2 in R7. The end user doesn’t even need to open the underlying database, they can open a separate application that may pull data from different databases. So it makes sense that the menu should be File – Application.
The second major addition was XPages. Again XPages makes it possible to store your data in a separate database and have your UI and all business logic in a separate application. I did that at a basic level in my first XPages application, an intranet that displayed a searchable, filterable view of data from a separate internal directory database. All the UI design elements relating to the intranet are in the intranet application, the form and view are in the internal directory database (that’s actually an application too, but in this context it’s just a database). And unlike embedded views, the source can be computed to allow clean deployment across multiple environments – Dev, UAT, Live.
For some this concept will be challenging. But I for one have been developing applications for many years. My toolkit contains databases, some of which are extended, some of which are incorporated without change, some of which are built from scratch incorporating portable elements such as keyword documents or certain script libraries that are standard in my databases. In some applications the method of extensibility is handled via configuration options, sometimes it a bit more innovative, but that’s a topic for another post. At a basic level, in all my applications I incorporate OpenLog. And that’s the point. Users may access an application through one UI, but actually be accessing multiple databases, without even knowing it. Most of my applications are multi-database solutions, some workspace icons the users (or a subset of users) access directly, some they don’t. And to a certain extent it may be argued all applications are technically doing this. All my applications draw upon databases like the Notes Log or Domino Directory. I don’t use Print statements in my agents, because that’s not good for performance, but if presented on the web the Notes Log is used to track platform-level issues. All applications use the Domino Directory to cross-reference with the ACL and in my About documents I have an area that will give a breakdown of user access privileges for support purposes, all reusing data and functionality relating to the Domino Directory. But my end users don’t look at these other databases. They only look at my application.
More recently, with some applications I have considered retaining the classic Notes application, providing a separate application for delivering it as XPages, and a third for delivering it for mobile devices. And extending the concept further, individual components may be surfaced in separate composite applications. This is purely theoretical at the moment, but this is the power we now have, to think outside the box, to push the concept of an application split across ‘databases’ even further. This is an extreme example and not suited to all applications. But that doesn’t mean we can’t reuse functionality, even if we have vanilla versions of components that get customised in certain instances.
Like OpenLog and other reusable components, now extended in rich client components and reusable controls on OpenNTF or blogs. The Import and Export for Domino Designer rich client component on OpenNTF makes it easier to download reusable controls into your applications. All of these resources can and should be incorporated into your applications, as appropriate. They may require some learning, you may have to overcome occasional issues of conflicting functionality. But they will enhance your skills and your applications.