2013-02-18 39 views
0

在試圖分離我的域圖層和GUI並查看所有不同的方法來做到這一點時,我一直在問的是爲什麼這麼難?爲什麼所有額外的數據代碼都是obejcts,然後是所有額外的屬性複製值的映射等等。不應該是一個更簡單的方法嗎?映射工具,如EF設計師,但對於數據對象?

然後,我記得當我用微軟小數分貝應用程序使用微軟Access,Access有一個Dynaset的概念,基本上一個Dynaset是一個視圖,就像一個SQL Server視圖,除了它是一個可更新的視圖。因此,MS Access表單將基於View/Dynaset,因此不必知道涉及的所有單個表的詳細信息。聽起來像數據對象模式給我。現在,既然Access已經擁有了這個二十年,那麼對於Entity Framework來說,沒有類似的Dynaset,View,Mapping工具可以從演示文稿中抽象出實體嗎?有沒有我不知道的一個?第三方?

有關這方面的想法?

回答

0

如果我理解正確,您可能正在使用POCO實體查找實體框架。您可以在模板的聯機圖庫中找到它們的模板(當您在項目中添加新項目時)。或者,您可以在.edmx設計視圖中右鍵單擊,選擇「添加代碼生成項」並選擇Fluent Generator。

這些方法創建多個文件,而不是默認的所有功能於一身的EF生成的文件。一個這樣的文件是DbContext(與ObjectContext相對),其中一個僅包含實體(以常規C#對象的形式,沒有屬性或任何東西,只是普通對象),最後一個包含以流暢規則形式生成的映射。

在這個階段,您可以將實體文件從其模板中分離出來並將其移動到另一個程序集。瞧,你們擁有獨立於EF基礎設施的實體。你可以像以前那樣傳遞這些實體的上下文,它會自己進行映射。

或者,您可以使用像AutoMapper這樣的工具,但是您必須手動提供映射,這是很多工作,但在某些情況下可能會很好。

+0

是的,我已經使用EF爲POCO創作,但我說的層形式的分離,所以POCOS不能在表現層可見。 AutoMapoper看起來非常接近我的想法,它看起來像一個1 t o1地圖,而我更像是一個View,其中manty採集和場地圖映射到一個將由GUI使用的結果集。例如Customer,Order,OrderItems,ShipMethod =>將全部映射到預設層中的一個OrdetrInfo對象。 – JAMES 2013-02-18 23:07:57

+0

這聽起來像是非常嚴格的圖層分離,我個人更喜歡將POCO實體作爲應用程序的核心,由所有圖層共享 - 數據持久性確實是數據庫映射,表示是否執行DTO映射,但這兩層仍然可以看到這些實體。至於視圖映射,我不知道任何這樣的工具,對不起。 – 2013-02-19 08:59:54

+0

這是非常標準的MVC Enterprise軟件。但我認爲它是mkuch更容易只是在各地使用這些實體本身,但這些日子不像建築師那麼酷...... – JAMES 2013-02-19 17:47:02

0

良好的設計需要工作。如果很簡單,每個人都會自動完成。畢竟,每個人都希望儘可能少地工作。

所有你抱怨的事情都是好的設計過程的一部分,如果你想要一個好的設計,就沒有必要繞過它們。

如果你想採取捷徑,那麼一定要跳過它們。這是你的代碼。沒有什麼要求你以任何特定的方式做事。

訪問可以做很多事情,因爲它是一個桌面應用程序,而不是一個Web應用程序。 Web應用程序與桌面應用程序在設計方式,工作方式以及面臨的問題上有着根本的區別。例如,事實上你有一個無狀態的環境,並且無法保持從請求請求到結果集的請求,這使得許多人認爲在Access中理所當然的事情不可能在Web應用程序中完成。

具體來說,如果你想使用視圖,你可以這樣做。如果視圖設計得當,視圖是可更新的,但通常需要隻影響視圖中一個表的更新語句)。 EF也可以處理視圖,但它有許多你必須處理的怪癖。

數據映射模式已經成爲網頁設計中的一種常見模式,因爲它是在層和/或層之間清晰分離問題的最簡單直接的方式。我建議你找到方法讓他們在你的開發過程中工作。

也可能是MVC不是您最適合使用的框架。這聽起來更像是你想按照Acceess的方式構建Web應用程序,在這種情況下,Visual Studio Lightswitch可能是更好的選擇。

http://msdn.microsoft.com/en-us/library/ff851953.aspx

+0

我同意你所說的一切,以及我正在嘗試切割的唯一「角落」是所有字段來回應對的手動手動編碼,以及View或Dynaset擁有的自動綁定。我正在考慮EF如何從數據庫自動生成POCOS的相同概念,爲什麼不設置一個設計器,然後生成映射到這些POCO的視圖級對象? – JAMES 2013-02-18 23:11:36

+0

@DJAMES - 如果你只是想要一個設計師,請使用班級設計師。 – 2013-02-18 23:14:58

+0

不,我想要的不僅僅是一個班級設計師。我想要一個與Entity Framework完全相同的工具,它位於實體框架之上,amd管理POCOS和高級數據對象之間的數據傳輸,並保持對象同步。 – JAMES 2013-02-19 17:37:49