2014-10-10 152 views
0

所以我是MVC的新手,已經閱讀了關於SO和一些博客的幾十個類似問題。我無法理解如何構建我的應用程序。要麼我沒有得到它,要麼人們似乎對如何去做它有不同的看法。所以這裏是我的具體,簡單的例子:登錄屏幕和帳戶創建屏幕。MVC應用程序結構

從我的理解,我應該具備以下條件:

視圖 簡單的在這種情況下,兩種觀點

模式 兩種視圖模式。登錄有用戶名和密碼。註冊有用戶名,密碼,電子郵件等。只有屬性沒有方法。

控制器 通過調用等CREATEUSER服務層()

業務/服務 獨立生成項目視圖模型。有方法與數據庫交互並應用業務邏輯。由控制器調用,將輸出轉換爲視圖模型格式。這個項目有自己的模型/類別,而不是綁定到特定的視圖。這個層中的CreateUser()會調用db上的存儲過程。這是正確的流程嗎?另外,從業務層返回數據時,我不應該使用視圖模型。那麼,我是否在業務方面創建了另一組類似於db中邏輯實體的模型?

回答

2

這聽起來很合理。關於單獨模型和視圖模型的觀點是一般性建議,以避免服務層和用戶界面之間的緊密耦合。 這意味着即使用戶界面屏幕不同,多個應用程序也可以使用這些服務。不過,我認爲在某些情況下,如果它們成爲模型的鏡像,則跳過視圖模型是有意義的。我只傾向於創建視圖模型,如果它們在爲視圖準備數據(格式化等)時添加某種類型的值。

但是,有些人可能會聲稱,您應該始終創建視圖模型 - 即使是鏡像模型的視圖模型。我也可以理解這個觀點,因爲它與避免用戶界面和服務之間的耦合有關,它使您能夠在不改變鏈接到用戶界面的情況下發展服務。你必須作出判斷,告訴你這對你有多重要,因爲這是以在相同對象之間「傳遞」價值的層爲代價的。

+0

所以我們假設我有幾個頁面在返回用戶數據。在某些情況下,它可能只是用戶名,上次登錄日期和他們的用戶ID。在其他情況下,它可能更像一個完整的個人資料。服務層的輸出應該是什麼?它應該永遠是一個無所不包的課程。如果我開始創建特定於案例的輸出類,那麼我是不是基本上覆制視圖模型? – ElPresidente 2014-10-10 03:12:28

+0

我只會添加視圖模型,使其有意義並增加價值。在某些情況下,它可能會將模型對象直接綁定到視圖。有關服務回報的問題需要辯論。有些人更喜歡非常細化的服務(微服務),但其他人則更喜歡更通用的服務。 – TGH 2014-10-10 03:17:00

+0

所以我可以想象有另一個項目包含像SiteUser這樣的域模型和從第一個繼承的擴展SiteUserProfile。我的服務方法可能會根據功能返回到控制器?我最喜歡的是說我有一個像LastActivityDate這樣的字段。有些屏幕需要它,有些則不需要。如果我構建一個通用服務,聽起來像服務返回的我的SiteUser模型將包含該字段,而不管它是否被該特定控制器使用? – ElPresidente 2014-10-10 13:39:01