2011-03-02 72 views
0

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

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

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

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

非常感谢您的帮助!

+0

Telerik可能是最好的人问这个问题。 – 2011-03-02 16:58:28

+0

@罗伯特哈维 - 谢谢你,我们也是这么做的。我们希望尽可能多地收集有关此事的意见。 – bryan 2011-03-02 17:13:07

回答

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提供的帮助将大型模型分解为易于管理的部分。

希望这会有所帮助! :)