Service design patterns

D-NET supports a component-oriented programming methodology where services can be designed assuming the existence of given type of services, even though instances of such resource might not be yet available (i.e. registered) to the infrastructure or their location is unknown at the time of realizing the service. D-NET services are thus designed to discover the resources they need at run-time, and possibly react to their absence. D-NET services are designed according to one or more of the following patterns: user operated service, functionality service, factory service, manager service.

  • User-interaction service. It is a service whose operations can be invoked by users through a user interface. User can possibly be authenticated to the system, thus be authorized to fire certain actions, or be anonymous; e.g. Generic User Interface Service, Repository Management Service;
  • Functionality service. It is a service whose operations can be invoked by other services; Feature Extraction Service;
  • Factory Service. It is a service that manages Data Structures. Typically, its API contract consist of two parts: (i) creation, update and deletion of data structures and (ii) usage of data structures; e.g., Index Service and Store Service.
  • Active Service. It is service that actively runs processes, typically to monitor its internal status or the infrastructure resource map and execute given operations when specific conditions are met; e.g., Manager Services;
  • Subscribing  service. It is a service whose operations can be invoked by a notification message, sent by the Information Service as a consequence of service being subscribed to given events. See below for more details on D-NET subscription and notification mechanisms; e.g., Search Service and Generic User Interface Service;
  • Mediating service. It is a service that bridges the system with data sources external to the system. Typically such services offer access to external sources through a Web Service APIs that returns D-NET Result Set objects; e.g., Harvester Service, Downloader Service.