代码之家  ›  专栏  ›  技术社区  ›  lmsasu

linq实体作为业务对象-pro/cons

  •  3
  • lmsasu  · 技术社区  · 17 年前

    visual studio(sqlmetal)生成的dbml文件带有映射到数据库表的实体。在您看来,这些类适合用作域模型类?或者我们应该避免它们,并将它们仅隔离到数据访问层中?

    谢谢

    4 回复  |  直到 17 年前
        1
  •  4
  •   Rex M    17 年前

    在大多数情况下,实体对象和编写sql之间的一层甜蜜的美好 你的DAL。linq的全部目的是让dal具有比过去更具表现力的结构。

    如果没有linq,在bl中可能只限于方法调用,比如 GetCustomersByLastName(string) 对抗你的达尔。你写这个方法的唯一原因是因为在你的bl中,你需要用姓氏联系客户。这意味着您的dal合同是由bl的需求显式驱动的,而使用linq,您将从bl的需求和dal合同之间的具体依赖中解放出来。DAL对于特定的使用是完全不可知的,它只暴露实体和它们的关系的契约,而BL随意使用它们,而不关心它们的数据实现。那就是 关注点分离。

    如果你把linq的力量隐藏在传统的dal后面,那么使用linq有什么意义呢?

        2
  •  3
  •   marc_s MisterSmith    17 年前

    对于一个足够简单的应用程序,直接使用linq实体的最大好处是-简单。您可以避免在代码中再添加一层,可以避免编写大量的样板逻辑来从业务对象映射到LINQ实体(尽管有类似工具)。 AutoMapper 这在这里会有很大帮助。

    另一方面,正如您所说-您的数据库可能不是您的域模型的一个spitting映像。然后,如果您需要此功能来在给定的物理数据库模型和逻辑域模型之间进行映射,那么您应该改为查看实体框架?这正是EF的支柱——这两个模型以及它们之间的映射层。

    马克

        3
  •  1
  •   Alan Jackson    17 年前

    它取决于

    如果你是域对象 简单的 你的项目很小,那么使用这些类就不是问题了。编写一个完整的额外层来重复这些类是浪费时间的。

    如果对象是 复杂的 而且不要以一种拘束的方式进行映射,另一层对于将这些细节从数据访问层中分离出来至关重要。

    如果你真的不确定,你可以直接开始使用它们,然后一旦你需要它,再添加另一层。

        4
  •  0
  •   matteo75    15 年前

    我想这要看情况。

    我现在正在写一个wcf服务,我的数据模型不是很复杂,但是所有的表都有外键,表之间的关系使得linq创建了一个非常复杂的对象树。

    从客户机的角度来看,检索所有这些对象树是没有意义的,而且返回的xml消息将非常繁重(因此,如果不更改消息大小max allowed value,我将得到错误)。

    在这种情况下,我必须在linq对象上创建自定义视图,以返回客户机希望检索的数据。这相当痛苦,因为我不得不重写大多数实体,但最终我完全控制了与客户的通信。

    推荐文章