我有以下的庫:庫設計混亂
EmployeeRepository
DocumentRepository
CourseRepository
LeaveRepository
我們有一個要求,現在增加一個新的業務對象調用BusinessTripBidding
它允許員工出價不同的商務旅行等等。無論如何,問題是在返回Bidders
列表時,我需要包含上述所有倉庫中的信息,然後生成一個新對象並返回一個列表(在我的業務對象中),如下所示:
IEnumerable<BidderInfo> GetBiddersInfo(int tripId)
{
List<Bidder> bidders = _bidderRepository.GetListByTripId(tripId);
List<Course> courses = _courseRepository
.GetListByEmployeeId(bidders.Select(b => b.EmployeeId).AsEnumerable());
List<Document> passports = _documentRepository
.GetListByEmployeeId(bidders.Select(b => b.EmployeeId).AsEnumerable(), DocumentType.Passport);
List<Leave> leaves = ...........
var biddersInfo = new List<BidderInfo>();
foreach(Bidder b in bidders)
{
var bi = new BidderInfo();
bi.Courses = courses.Where(c => c.EmployeeId == b.EmployeeId).ToList();
bi.Passport = passports.FirstOrDefault(p => p.EmployeeId == b.EmployeeId);
bi.ComingLeave = .........
// the same for the rest of the repositories
biddersInfo.Add(bi);
}
return biddersInfo;
}
旁邊的多次調用DB和環旁,它會如果我建立新倉庫只負責打造這一個BidderInfo
單一的查詢更加容易,讓我們把它BidderInfoGeneratorRepository
然後在注入該庫業務對象的構造函數。
現在,我應該保留的東西,因爲我目前正在做(多個數據庫調用),但事情看起來是正確的; 或者我應該創建另一個存儲庫並將它傳遞給業務對象以使事情更快一點?這種情況下的最佳做法是什麼?
'沒有代碼complexity'這是問題的一個很大的增長..怎麼樣?我的方法是通過爲此創建一個新的存儲庫來糾正嗎? – Him
在這種情況下,您可以創建一個新的存儲庫。 兩件小事:當我正確地看到它時,你正在過濾你的課程兩次。第二:我不會調用ToList()來設置bi.Courses,因爲它會降低性能。 – Dexion
第一個過濾器是獲得的課程都被列入了這一要求所有的員工,GetByEmployeeId具有接受IEnumerable的''過載。第二個過濾器是獲取特定的員工。 –
Him