領域驅動設計案例:Tiny Library:使用者介面

來源:互聯網
上載者:User

工作繁忙,很久沒有更新部落格了。下面言歸正傳,簡單介紹一下Tiny Library的使用者介面實現。

如前所述,Tiny Library採用ASP.NET MVC架構實現了基於瀏覽器的使用者介面。回顧一下《商務邏輯與系統結構》一文,從層次架構圖中我們可以清楚地看到,使用者介面層是通過WCF Services與系統互動的。

為了快速簡單地實現Tiny Library,我只是簡單地使用了ASP.NET MVC,因此沒有對其做更深入的挖掘,有關ASP.NET MVC的更多知識,請朋友們自行上網搜尋或閱讀相關書籍。

這裡需要說明的問題有兩點:使用者認證與授權,以及MVC中的M。

使用者認證與授權(Authentication & Authorization)

ASP.NET MVC採用基於Forms的認證機制(Forms Authentication),因此Tiny Library也繼承了這種方式。事實上,使用ASP.NET MVC的這種認證機制,會在網站的App_Data目錄下產生一個ASPNETDB.MDF的資料庫檔案,用來儲存Authentication相關資訊,比如某個使用者註冊了,就會在這個資料庫中產生相關資訊。然而,我們的Tiny Library也有一套自己的資料庫,該庫中需要儲存使用者的相關資訊(比如Reader的名字等),目前我是在AccountController中,Register使用者的時候,同時在Tiny Library中同步一條資料,代碼如下:

隱藏行號 複製代碼 ? Register User
  1. MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email);
  2. if (createStatus == MembershipCreateStatus.Success)
  3. {
  4.     TinyLibraryServiceClient svcClient = new TinyLibraryServiceClient();
  5.     bool ret = svcClient.AddReader(new ReaderData
  6.     {
  7.         Id = Guid.NewGuid(),
  8.         Name = model.Name,
  9.         UserName = model.UserName
  10.     });
  11.     svcClient.Close();
  12.     if (ret)
  13.     {
  14.         FormsService.SignIn(model.UserName, false /* createPersistentCookie */);
  15.         return RedirectToAction("Index", "Home");
  16.     }
  17.     else
  18.     {
  19.     }
  20. }
  21. else
  22. {
  23.     ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus));
  24. }

 

這樣做其實很不保險,比如,如果在Tiny Library資料庫中添加使用者資訊失敗,那麼雖然使用者成功註冊(提交ASPNETDB.MDF成功),也無法正常使用系統。當然,Tiny Library只是個示範系統,如果是在實際應用中,這個問題還需要通過其他途徑解決。我目前沒有想到萬全之策,歡迎熱心的朋友在本文的留言中給出建議。

 

MVC中的M(Model)

有不少使用ASP.NET MVC的朋友,總會將Domain Model帶到使用者介面層,然後直接將Domain Model中的實體用作MVC中的M。在Fowler的PoEAA一書的DTO一章已經說過,Domain Model是不能暴露給高層的,因此將Domain Model中的實體用於MVC是不合理的。

其實如果你有瞭解過CQRS體繫結構模式,你就會瞭解到,MVC中的M,應該是Presentation Model,這個Presentation Model與領域毫無關係,僅僅用於介面資料繫結。在MVC Web Application添加了WCF的Service Reference之後,當你建立View的時候,你就可以很方便地將用戶端產生的Data Contract用作Data Class,如下:

其實,這裡列出來的BookData、ReaderData和RegistrationData,就是Model。

OK,使用者介面就寫這麼些吧,也沒有採用什麼特別的技術,主要還是使用ASP.NET MVC上的這幾個問題。有關ASP.NET MVC的內容,朋友們請自己查閱相關資料吧!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.