c# – 3层架构 – 在层之间传递数据
|
试图实现3层(不是:层,我只是想在逻辑上将我的项目分开,在一台机器上)架构我发现了很多不同的方法,我很困惑,最好的方法是什么(如果有的话)在WinForms应用程序中.
现在我毫不怀疑项目中应该存在的3个层次: > UI(表示层) 在UI中我放了所有的WinForms.必须还有一些逻辑用控件中的数据填充对象并将其传递给BLL层. 在DAL中,我想使用ADO.NET为数据操作添加类和方法,如: public class OrderDAL
{
public OrderDAL()
{
}
public int Add(Order order)
{
//...add order to database
}
public int Update(Order order)
{
//...update order in database
}
//...etc.
}
问题在于BLL和问题 – 我应该使用数据传输对象在层之间传递数据,还是应该通过整个类? 如果我选择使用DTO,那么我将创建另外的公共类Order,它引用UI,BLL和DAL: public class Order
{
public int Id { get; set; }
public DateTime Date { get; set; }
public string Number { get; set; }
public string CustomerName { get; set; }
public Order ()
{
}
}
并将逻辑分为BLL: public class OrderBLL
{
public OrderBLL()
{
}
public int Add(Order order)
{
OrderDAL orderDAL = new OrderDAL();
return orderDAL.Add(order);
}
public int Update(Order order)
{
OrderDAL orderDAL = new OrderDAL();
return orderDAL.Update(order);
}
//...etc.
}
这种方法在不同名称下使用:here或here. 专业人士: > DTO可以很容易地通过设计来表示数据库表, 缺点: >反模式(听起来可怕; P), 所以,相反的方法是在层之间传递整个对象,比如here:没有DTO,只是BLL看起来像那样: public class Order
{
public int Id { get; set; }
public DateTime Date { get; set; }
public string Number { get; set; }
public string CustomerName { get; set; }
public Order()
{
}
public int Add()
{
OrderDAL orderDAL = new OrderDAL();
return orderDAL.Add(this);
}
public int Update(Order order)
{
OrderDAL orderDAL = new OrderDAL();
return orderDAL.Update(order);
}
}
专业人士: >它是一个很好的封装对象,遵循OOP规则(我想;)). 缺点: >要使用该对象,DAL必须引用BLL(这不是3层图层应该如何做的,不是吗?). 所以,它看起来像我选择的任何东西,我会违反一些规则.那么什么是更好的方式,我应该选择哪个?也许还有其他方法我还没找到? 解决方法
我不喜欢DTO,因为它们意味着创建一个很少或没有价值的双层次结构.
我也不喜欢让模型对象对自己的持久性负责的想法.我更喜欢单独的持久层.为什么?模型对象并不总是需要持久化才有用.业务逻辑和功能与持久性正交. 如果你有两个层,就可以保持单向依赖图:持久性知道模型,但模型不知道持久性.如果模型对象负责持久性,则最终会产生循环依赖.如果没有持久性,您永远不能测试或使用模型对象. 我的建议?不要做DTO.打破一个单独的持久层. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
