三层架构问题

时间:2009-06-13 05:09:25

标签: c# entity-framework three-tier

我有一个具有三层架构的ASP.NET应用程序:

  • 表示层:ASP.NET

  • 业务层:C#库。

  • 数据访问层:带有
    的C#库 ADO.Net实体框架对象。

Bussiness层上的一些方法会返回ADO.NET实体对象但是,数据访问层在Presentation层不可见我不能这样做。

我的问题是:在设计视图中,在表示层中公开实体对象是否正确?我想我只需将数据层库与ASP.NET应用程序链接起来。

谢谢!

4 个答案:

答案 0 :(得分:4)

绝对希望您的实体对象可供在表示层中使用和使用。这就是所有工作的目的。

  • 将对象集合绑定到网格/列表视图/下拉列表
  • 将单个对象(即客户)映射到表单上以进行读取/更新/删除

这让你的生活更加轻松。否则,您必须在演示文稿和业务层之间的双字符串后面的int之后传递字符串。

这些可能是Entity对象,甚至是你自己的POCO对象,它们是从Entity对象中提取的。

我甚至会说你的Entites应该与DAL分开。

答案 1 :(得分:1)

我认为不,它不是,最好的方法是将数据类与行为分开,并仅引用表示级别的数据类。我认为使用WCF的好方法见link < / p>

答案 2 :(得分:1)

我建议您查看View对象...或数据传输对象(DTO)的概念。您可以考虑使用AutoMapper等工具,它将从您的实体中创建特定于视图的域对象。通常,您可能拥有需要实体来执行其工作的屏幕。但通常情况下,您需要传递几个不同的实体。在这种情况下,最好创建一个包含所有这些实体的DTO。通过这样做,您将在表示层和业务层之间添加一层分隔。通常,您的实体具有比您可能希望向表示层公开的更多功能。并且......反之亦然。通常,您可能需要根据业务层中标记的某些验证将一些UI消息发送到表示层。而不是让你的ui比它需要的更复杂(通过传入你的完整实体),你只能以DTO的形式传递UI所需的内容。此外,您的业务对象从不需要关心表示层特定的任何内容。我建议你不要直接数据绑定到数据访问层的任何东西。从技术上讲,您的表示层应该尽可能少地了解您的业务层。在MVP或MVC的情况下,通过这种额外的分离来断开前端和后端非常容易实现!

答案 3 :(得分:0)

请参阅Supervising ControllerPassive View

如果你通过实体,你基本上是监督控制器。否则你就是被动视图。

监督控制器工作量少,但可测试性较差。监督控制器也说数据绑定没问题。 被动视图是可测试的,但还有很多工作要做。没有数据绑定。很多属性。

通常我坚持使用监督控制器。您通常不需要那种级别的可测试性,这不值得额外麻烦。