我正在使用MVP創建應用程序:被動視圖和EF(模型優先)。據瞭解,我有一位演示者直接從通過EF創建的DataContext獲取數據。它看起來是這樣的:MVP:被動視圖(帶EF)和圖層
private void UpdateOrderTableControl()
{
IList<Order> orders = dataContext.Orders.ToList();
IList<OrderViewModel> viewOrders = new List<OrderViewModel>();
foreach (var o in orders)
{
viewOrders.Add(new OrderViewModel()
{
OrderId = o.Id,
CustomerId = o.CustomerId,
LastName = o.Address.LastName,
FirstName = o.Address.FirstName,
Company = o.Address.Company,
Weight = o.Weight,
Sum = o.Sum,
Date = o.Date
});
}
view.GetOrderDataGridView().DataSource = viewOrders;
}
所以演講得到所有訂單的列表,創建訂單視圖模型的列表(來自不同表的數據組合,即上面的地址),然後發送視圖模型列表中視圖。
這幾乎是同樣的事情,周圍的其他方式,爲了獲取從視圖中的數據時,編輯或添加到數據庫:
private void SaveOrder()
{
GetOrderDataFromView();
if (isNewOrder)
{
dataContext.Orders.Add(selectedOrder);
}
else
{
dataContext.Entry(selectedOrder).State = EntityState.Modified;
}
dataContext.SaveChanges();
isSaved = true;
UpdateOrderTableControl();
}
1)可通過EF創建EF(實體時, DataContext等)被認爲是DAL?它應該在它自己的項目中嗎?
2)我想主持人不應該像這樣訪問DataContext,而是訪問這兩者之間的另一個層,對吧?那會是服務層,業務層還是兩者?
3)我說的視圖模型實際上是一個視圖模型還是其他東西?我只想讓我的術語正確。
編輯:
4)我讀到有關添加業務邏輯由EF生成的實體提出了一些建議,但是,這並不健全的非常正確的我。我應該在EF之上的獨立業務層創建業務對象嗎?含義我會有訂單(由EF生成),OrderBO(業務對象)和OrderViewModel(要顯示的訂單)。我將不得不做更多的映射,因爲我會添加另一個圖層,但它會使演示者更輕。
在此先感謝!
謝謝。我又增加了一個問題。 – Lahey
我推薦你閱讀一些關於領域驅動設計(DDD)方法的內容。在大多數情況下,業務邏輯是描述業務規則,驗證,關係等的單獨的層。 –