【问题标题】:LINQ to SQL DAL + BLL + Presentation [closed]LINQ to SQL DAL + BLL + Presentation [关闭]
【发布时间】:2011-10-10 09:40:49
【问题描述】:

我对一个简单的应用程序进行了以下设置:

  1. 从我的数据库表中生成 LINQ to SQL 类(DAL?)

  2. 创建的类 (BLL?) 使用 LINQ to SQL 数据上下文来插入、更新、删除、选择

  3. 在我的表示层中,当插入例如一个新的“产品”,我正在创建一个新的对象“产品”实例,它来自我的 DAL 层(这是 LINQ to SQL 为我创建的)

我的问题是,在这种情况下,这是否是分离层的正确方法。对我来说奇怪的是,我使用的是在 DAL 中定义的对象类型,如果你问我,它不应该在表示层中使用。但是,如果我想在不创建新对象的情况下使用 LINQ to SQL 对象,这似乎是可行的方法。

您对此有何建议?我不确定这里的最佳方式是什么。

【问题讨论】:

    标签: linq linq-to-sql


    【解决方案1】:

    我认为从来没有一刀切的解决方案,但是,如果您有一个简单的应用程序,您可能不想让事情变得不必要地复杂化 如果您能够忍受在表示层保持数据上下文打开,那么在保持 L2SQL 实体方面会有一些“生产力”提升:

    • 支持延迟加载(但要注意 1:N 问题)
    • 您有一组生成的实体(尽管可以识别数据上下文)

    但是,对于更重、更纯粹的架构,您可以考虑

    • 将 Linq2SQL 工件包装在 Repository Pattern 中
    • 将 L2SQL 实体映射到 POCO,然后再将它们返回到您的 BLL/服务层
    • 根据您的网络和表示架构,您可能还需要考虑您的实体在网络上的样子(序列化、WCF、JSON 等),您还可以查看View Models,在这种情况下您的实体将“在图层之间映射和转换时,多次更改类和形状。
    • 事实上,您可能会考虑完全不同于 Linq2SQL 的另一个 ORM,例如NH 或 EF

    编辑: 如果您不想在 BLL 或表示层中使用 VS 生成的 L2SQL 实体,您有几个选择。

    • 创建一组新的 POCO,然后将 L2SQL 实体映射到您的存储库/dal 中。 Automapper 可以简化这个任务。

    • 您可以通过提供XmlMappingSource 直接在 Linq2SQL 中使用自己的 POCO,尽管这需要更多工作。

    【讨论】:

    • 感谢您的帮助。我对 Linq 2 SQL 的简单程度感到相当满意,所以我想保留它,但我唯一担心的是我在表示层中使用了 DAL 实体。在我当前的设置中解决这个问题的最简单方法是什么?
    猜你喜欢
    • 2010-12-30
    • 2013-03-13
    • 1970-01-01
    • 2015-08-13
    • 2010-11-26
    • 2010-10-31
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多