One way to do this is to create a portlet service that accesses the Domino database (or any other back-end application/data store for that matter) so that the specifics of accessing Domino applications are not embedded in the portlet code. Portlet services are shared by all portlets and are, therefore, a great place to implement logic (and caching) that is shared by multiple portlets.
I just finished editing an article for the premier edition of The Sphere (WebSphere version of the highly respected The View magazine), which describes exactly how to implement a portlet service that accesses a Domino database.
This was first published in August 2005