Java – From a DDD perspective is a report generating service a domain service or an infrastructure service

Architecturedesigndomain-driven-designjavaobject-oriented

Let assume we have the following service whose responsibility is to generate Excel reports:

class ExcelReportService{

   public String generateReport(String fileFormatFilePath, ResultSet data){
      ReportFormat reportFormat = new ReportFormat(fileFormatFilePath);
      ExcelDataFormatterService excelDataFormatterService = new ExcelDataFormatterService();
      FormattedData formattedData = excelDataFormatterService.format(data);
      ExcelFileService excelFileService = new ExcelFileService();
      String reportPath= excelFileService.generateReport(reportFormat,formattedData);         
      return reportPath;    
   }    
}

This is pseudo code for the service I want to design where:

  • fileFormatFilePath: path to a configuration file where I'll keep
    the format of my excel file (headers, column widths, number of
    columns,..etc)

  • data: the actual records returned from the database. This data
    can't be used directly coz I might need to make further calculations
    to the data before inserting them to the excel file.

  • ReportFormat: Value object to hold the report format, has methods
    like getHeaders(), getColumnWidth(),…etc.

  • ExcelDataFormatterService: a service to hold any logic that need to
    be applied to the data returned from the database before inserting it
    to the file.

  • FormattedData: Value object the represents the formatted data to be
    inserted. ExcelFileService: a wrapper top the 3rd party library
    that generates the excel file.

Now how do you determine whether a service is an infrastructure or domain service?
I have the following 3 services here:
ExcelReportService, ExcelDataFormatterService and ExcelFileService?

Best Answer

All of it is infrastructure service. Domain in DDD is primarily concerned with data and business rules that operate on this data. It has nothing to do with how the data are presented. So in your example, the only part that would be related to domain is how you get the data.

Related Topic