2011-03-02 60 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提供的幫助將大型模型分解爲易於管理的部分。

希望這會有所幫助! :)