我想将表单上的控件绑定到数据库中的数据,绑定发生在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层模式!! 怎样成为?创建一个新对象只是为了保存这些数据?
答案 0 :(得分:2)
我通常将处理这些对象(如IRepository)的业务对象和接口分离到Domain项目中。然后我的DAL可以引用这个项目,我的web项目也可以。
<强>更新强>
项目结构:
答案 1 :(得分:1)
使用界面。然后您的表单知道一些IProduct,但不需要知道具体的实现。例如,您可以使用NInject来执行依赖项注入。
答案 2 :(得分:0)
最常见的方式也是最佳做法是使用客户端存储库。您可以将实体抽象为域对象。您可以使用AutoMapper之类的映射器来映射服务层返回的数据传输对象(DTO)以及应用程序层使用的域实体。通过在存储库后面抽象这一点,您的应用程序层无需了解服务层,并且两者可以独立变化。