我正在使用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)方法的内容。在大多数情况下,业务逻辑是描述业务规则,验证,关系等的单独的层。 –