【问题标题】:Help with structuring a Telerik OpenAccess Domain Model帮助构建 Telerik OpenAccess 域模型
【发布时间】:2011-03-02 16:55:59
【问题描述】:

我的公司即将开始一个使用 Telerik 的 OpenAccess ORM 的新项目。这对我们来说是一个新产品,我们将第一次在项目中使用 ORM 而不是基于数据集的方法。我们目前在构建数据层的最佳方式方面存在一些分歧。具体来说,我们是否应该有一个项目的 .rlinq 文件和域模型,或者我们是否应该拥有每个屏幕/模块的 .rlinq 文件,其中只包含特定屏幕/模块所需的表格和表格中的列。为了说明后者:

假设我们有一个 Person 表,其中包含名字、姓氏、ssn、出生日期、性别和婚姻状况的字段。在个人信息屏幕中,我们需要所有这些字段,因此我们将整个表包含在该 .rlinq 文件中的域模型中。在另一个屏幕上(带有单独的 .rlinq 文件),我们只需要此人的姓氏和 ssn,因此该 .rlinq 文件中的 Person 对象仅包含姓氏和 ssn。

这个方法的主要观点是我们应该只选择特定屏幕所需的数据,而不是更多。在我们当前基于数据集的应用程序中,这是有道理的。也有人担心拥有不必要的表和关系会导致加载不需要的数据,即使它没有被请求并导致网络负载。反对这一点的论点是,我们正在分割域模型并引入不必要的复杂性,而 ORM 的部分工作是通过缓存和延迟加载来管理数据获取。我们无法就此达成协议,也无法以某种方式找到任何确凿的信息,因此我们向 StackOverflow 社区寻求帮助!

如果重要的话,我们正在构建一个基于 Windows 窗体的 Intranet 应用程序,数据层将位于 WCF 服务之后,并且数据库将有大约 100 个表。

提前感谢您的帮助!

【问题讨论】:

  • Telerik 可能是提出这个问题的最佳人选。
  • @Robert Harvey - 谢谢,我们也在这样做。我们希望就此事获得尽可能多的意见。

标签: orm telerik telerik-open-access


【解决方案1】:

一般来说,最好在单个 RLINQ 文件中构建实体域模型。然后,您可以根据需要通过将查询投射到 ScreenModels/DTO 来处理屏幕问题。

举例

假设您有一个具有多个属性的人员对象,但是,在特定屏幕上您只想返回名字和姓氏。

   var myUserDto = context.People
                          .First()
                          .Select( p => new UserDto { FirstName= p.FirstName, 
                                                      LastName=p.LastName });

OpenAccess 足够聪明,在这种情况下只查询名字/姓氏。现在,当屏幕最终需要 person 对象中可用的另一个属性时,您只需更新 dto 和 LINQ 查询。

此外,如果您计划使用 OpenAccess 提供的Data Service Wizard,它会为每个 OpenAccessContext 创建一个服务。因此,如果每个实体都有一个 RLINQ,那么每个实体都会有一个服务,至少可以说在客户端上维护会很痛苦。如果您手动滚动服务层,您显然会在此处获得更多控制权,但您仍需要不断记住哪个 OpenAccessContext 处理每个域对象。

仅供参考,对于大型模型,查看 aggregate metadata source OpenAccess 提供的帮助将大型模型分解为可管理的部分可能会有所帮助。

希望这会有所帮助! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 2011-06-12
    • 2010-10-01
    • 1970-01-01
    相关资源
    最近更新 更多