我目前正在从事的项目需要大量搜索/过滤页面。例如,我有一个复杂的搜索页面,可以按数据、类别、单位、...
问题域类很复杂,包含大量的值对象和子对象。
.我想知道人们如何处理 UI 的搜索/过滤/报告。据我所知,我有 3 个选择,但没有一个能让我更快乐。
1.) 将参数发送到 Repository/DAO 以获取 DataTable 并将 DataTable 绑定到 UI 控件。例如到 ASP.NET GridView
DataTable dataTable =issueReportRepository.FindBy(specs);
.....
grid.DataSource=dataTable;
grid.DataBind();
在这个选项中,我可以简单地通过域层并查询给定规格的数据库。而且我不必完全构建复杂的域对象。不需要值对象,子对象,.. 直接从数据库中获取数据以显示在 UI 中的 DataTable 中并显示在 UI 中。
但是如果必须在 UI 中显示计算字段,例如方法返回值,我必须在数据库中执行此操作,因为我没有完整的域对象。我必须复制逻辑和 DataTable 问题,比如没有智能感知等......
2.) 将参数发送到 Repository/DAO 以获取 DTO 并将 DTO 绑定到 UI 控件。
IList<IssueDTO> issueDTOs =issueReportRepository.FindBy(specs);
....
grid.DataSource=issueDTOs;
grid.DataBind();
在此选项中与上述相同,但我必须为每个搜索页面创建贫血的 DTO 对象。另外对于不同的问题搜索页面,我必须显示问题对象的不同部分。IssueSearchDTO、CompanyIssueTO、MyIssueDTO ....
3.) 将参数发送到 Real Repository 类以获得完全构造的域对象。
IList<Issue> issues =issueRepository.FindBy(specs);
//Bind to grid...
我喜欢领域驱动设计和模式。此选项中没有 DTO 或重复逻辑。但在此选项中,我必须创建许多子对象和值对象,这些对象不会在 UI 中显示。此外,它还需要大量的 ob 连接才能获得完整的域对象和针孩子的性能成本对象和值对象。
我不使用任何 ORM 工具也许我可以为这个版本手动实现延迟加载,但它似乎有点矫枉过正。
你更喜欢哪一个?还是我做错了?有什么建议或更好的方法吗?