Reporting Architecture (Part 1)
Mastering Operational Reports, ListService Implementation, and Enterprise Reporting Patterns in AUA
The Importance of Reporting
View Full Reporting DocumentationReporting represents the final product of core operational data. It is vital for organizational users and managers to meet requirements faster, more dynamically, and with precise visibility into system metrics.
Operational Reports (ListService)
Operational reports provide quick, simple data retrieval with support for various filters across any entity. Known as ListService within the AUA framework architecture, they consist of a single input view model (filters) and a single output view model. If a non-zero TotalCount is passed via input, the framework bypasses automatic computation and returns the value unchanged.
Enterprise Reports
Enterprise reports offer complete, professional architecture sharing structural similarities with ListServices. By leveraging operator Specification Patterns, developers can easily execute complex, heavy-duty queries. Total count calculations are handled automatically unless overridden by an explicit non-zero input value.
1. ListService DTOs & SearchViewModel Pattern
Operational reports in AUA use a clean 1-input (SearchVm) to 1-output (GridDto) pattern. If TotalCount is passed in the search request, recalculation is bypassed for faster response times.
// 1. Search Filter Input ViewModel
public class UserAccessReportSearchVm : BaseSearchListVm
{
public string Title { get; set; }
public int? AccessCode { get; set; }
}
// 2. Grid Output Item DTO
public class UserAccessReportGridVm : BaseEntityDto, IMapFrom<UserAccess>
{
public string Title { get; set; }
public int AccessCode { get; set; }
}
"If you think good architecture is expensive, try bad architecture."AUA Framework Philosophy