目前我工作的項目需要大量的搜索/篩選頁面。例如,我有一個comlex搜索頁面,以獲取數據,類別,單位等問題...您更喜歡搜索/報告DataTable還是DTO或Domain Class?
問題域類很複雜,包含大量值對象和子對象。
。我想知道人們如何處理UI的搜索/過濾/報告。據我所知,我有3個選項,但沒有一個讓我更開心。
1.)發送參數給存儲庫/ DAO獲取數據表和數據表綁定到UI Controls.For實施例到ASP.NET的GridView
DataTable dataTable =issueReportRepository.FindBy(specs);
.....
grid.DataSource=dataTable;
grid.DataBind();
在此選項中,我可以簡單地通過傳遞領域層和查詢數據庫給定的規格。而且我不必完全構建複雜的Domain Object。不需要值對象,子對象,..直接從數據庫獲取數據以在DataTable的UI中顯示並顯示在UI中。
但是,如果必須在UI中顯示計算字段的方法返回值,我必須在DataBase中執行此操作,因爲我沒有完全的域對象。我必須複製邏輯和數據表問題,如沒有intellisense等...
2.)發送參數到Repository/DAO獲取DTO和綁定DTO到UI控件。
IList<IssueDTO> issueDTOs =issueReportRepository.FindBy(specs);
....
grid.DataSource=issueDTOs;
grid.DataBind();
在這個選項和上面一樣,但我必須爲每個搜索頁面創建貧血的DTO對象。另外對於不同的問題搜索頁面,我必須顯示Issue Objects的不同部分.IssueSearchDTO,CompanyIssueTO,MyIssueDTO ....
3.)將參數發送到Real Repository類以獲取完全構建的Domain Objects。
IList<Issue> issues =issueRepository.FindBy(specs);
//Bind to grid...
我喜歡Domain Driven Design and Patterns。在這個選項中沒有DTO或重複邏輯,但是在這個選項中,我必須創建很多不會在UI中顯示的子對象和值對象。此外,它需要很多的ob連接才能獲得完整的域對象和針對子對象的性能成本對象和值對象。
我沒有使用任何ORM工具也許我可以實現這個版本的手工懶惰加載,但它似乎有點矯枉過正。
你更喜歡哪一個?還是我做錯了?有沒有任何建議或更好的方法來做到這一點?