首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >3层设计问题,将数据绑定到表单

3层设计问题,将数据绑定到表单
EN

Stack Overflow用户
提问于 2011-01-23 23:53:33
回答 3查看 297关注 0票数 0

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

我想使用三层模式,DAL层将使用实体框架,BLL将使用DAL来检索数据,并使用我的表单来显示数据。

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

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

在后台代码中,我调用了BLL的方法,该方法将调用DAL方法来检索所需的实体对象……

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

所以我可以这样做:

代码语言:javascript
运行
复制
DataAccessLayer.Product product = BusinessLogicLayer.GetProduct(someid);
textbox1.text=product.name; 
textbox2.text=product.price; 
....

但这打破了3层模式!怎么做?是否创建一个新对象来保存此数据?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-24 00:05:22

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

更新

项目结构:

  • 域-包含实体,接口
  • DAL -包含数据访问逻辑,实现域
  • BLL的接口-包含业务逻辑,使用DAL和域,可能实现来自域的某些接口以及
  • 网页-包含页,使用BLL和来自域

的实体/接口<代码>F211

票数 2
EN

Stack Overflow用户

发布于 2011-01-23 23:56:36

使用接口。这样,您的表单就知道了一些IProduct,但不需要知道具体的实现。例如,您可以使用NInject来进行依赖项注入。

票数 1
EN

Stack Overflow用户

发布于 2011-01-24 00:50:03

最常见的方式也是最佳实践是使用客户端存储库。您可以将实体抽象为域对象。您可以使用像AutoMapper这样的映射器来映射由服务层返回的数据传输对象(DTO)和由应用层使用的域实体。通过将其抽象到存储库之后,您的应用程序层不需要了解服务层,并且两者可以独立变化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4774700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档