我正在使用C#Framework 3.5
开发Web表单应用程序我想在我的应用程序中构建类似“Presentation> BLL> DAL>实体模型”的流程。但问题是,如何在Presentation层中使用实体对象?
建议?
答案 0 :(得分:2)
您使用的是实体框架吗?
如果是这样,请使用POCO Generator而不是默认的EntityObject。
虽然POCO是从数据库模型生成的,但它们实际上是松散耦合的,因为您可以更改DAL的实现,同时保留以前生成的POCO作为您的域模型。
我建议将POCO(以及POCO生成器创建的相关T4模板)移动到由表示层,BLL和DAL引用的不同项目中。
编辑:
备选方案(如果POCO生成器在3.5中不起作用)是手动创建域类并在DAL的接口中使用它们。它增加了工作量,但我建议不要在DAL之外公开EntityObjects。
答案 1 :(得分:1)
我实际上会采取以下方法:
将模型(POCO)放在例如仅由DAL和BLL引用的项目中。这将确保您可以在DAL层中使用它们,并在BLL中将业务逻辑应用于它们。
对于表示层,我将创建DTO(数据传输对象),它将仅携带特定场景/实体所需的数据。 DTO和POCO之间的翻译,我会放在BLL中。
我可以想到以下专业人士和这种方法的缺点:
1)优点
- 表示层和核心层(BLL,DAL)之间的完全分离。您的DTO将独立于数据库(POCO),这意味着无论您对数据库所做的任何更改,您只需要在翻译层中进行更改。
- 稳定的BLL API - 验证分离 - 您可以在DTO上为演示文稿和BLL的POCO实施验证。
2)缺点
- 每个POCO到DTO的翻译规则。这将不可避免地为您的代码增加一些复杂性,但我相信这是一个很好的回报。 - 性能开销。 DTO和POCO的翻译和实例化将为您的应用程序增加一些开销。根据您的要求和机器功能,您可以决定这是否是一个很好的回报。
我还建议您查看一些允许在不同类型的对象之间轻松映射/转换的映射库。在我看来,最好的一个是简单性和性能ThisMember。
此致
答案 2 :(得分:0)
我建议你把edm放在数据层。然后有另一个具有所有poco实体类的公共项目。您可以使用.net的Protocol Buffer将这些实体对象映射到您的poco实体。
在bll中你可以创建适配器类,它应该是presentation和dal之间唯一的接口。 Bll应该使用poco实体与表示层进行通信。