3层设计问题,绑定数据形成

时间:2011-01-23 15:53:33

标签: c# asp.net

我想将表单上的控件绑定到数据库中的数据,绑定发生在codebehind中。

我想使用3层模式,将使用实体框架的DAL层,将使用DAL检索数据的BLL,以及用于显示数据的表单。

假设有一个名为Product的Entity对象,它有3个属性:Name,Count,Price

我想将它们绑定到from上的3个文本框。

从后面的代码我调用BLL的方法,它将调用DAL方法来检索所需的实体对象......

问题是,为了绑定表单上的数据,表单必须“知道”BLL返回的这个entityObject。

所以我可以这样做:

DataAccessLayer.Product product = BusinessLogicLayer.GetProduct(someid);
textbox1.text=product.name; 
textbox2.text=product.price; 
....

但这打破了3层模式!! 怎样成为?创建一个新对象只是为了保存这些数据?

3 个答案:

答案 0 :(得分:2)

我通常将处理这些对象(如IRepository)的业务对象和接口分离到Domain项目中。然后我的DAL可以引用这个项目,我的web项目也可以。

<强>更新

项目结构:

  • 域 - 包含实体, 接口
  • DAL - 包含数据访问逻辑, 实现域
  • 的接口
  • BLL - 包含业务逻辑,用途 可能是DAL和域名 实现一些接口 域名以及
  • Web - 包含页面,使用BLL和Domain
  • 中的实体/接口

答案 1 :(得分:1)

使用界面。然后您的表单知道一些IProduct,但不需要知道具体的实现。例如,您可以使用NInject来执行依赖项注入。

答案 2 :(得分:0)

最常见的方式也是最佳做法是使用客户端存储库。您可以将实体抽象为域对象。您可以使用AutoMapper之类的映射器来映射服务层返回的数据传输对象(DTO)以及应用程序层使用的域实体。通过在存储库后面抽象这一点,您的应用程序层无需了解服务层,并且两者可以独立变化。