Web Client Software Factory系列(2):Composite Web應用程式塊

來源:互聯網
上載者:User
概述

使用Composite Web應用程式塊的好處是能夠將一個主要站台拆分為多個獨立的模組,每個模組負責主要站台中一個目錄及其所有內容。多個開發人員分別獨立負責不同的模組而不會相互幹涉。

添加Business modules

在業務模組中,可以添加任何與特定業務有關的應用,可以有頁面顯示,使用者控制項、工作流程、業務實體、資料訪問等,如所示:

添加一個新的業務模組,在解決方案管理器右鍵菜單中,選擇Web Client Factory->Add Business Module,如所示:

這裡我們添加一個Products業務模組

將會出現建立業務模組嚮導介面,在這裡我們選中Create Project for Unit Tests選項,將會為我們自動建立一個針對該業務模組的單元測試項目

建立完成後,可以在解決方案管理器中,看到如下結構:

可以看到,在網站中建立與業務模組的名稱相同的新頂層子目錄Products,並且在 Modules 目錄下建立新的類庫項目。該類庫項目用於包含與 /Products目錄下的一組頁面相關聯的任意商務邏輯。它包含表示器類 (DefaultViewPresenter) 和介面 (IDefaultView) 的定義,用於定義要由 /Products目錄下的 Default.aspx 頁面實現的視圖的方法。頂層控制器類也是在該項目中定義的,該類與視圖和表示器類相結合可完成此模組的頁面邏輯。還有一個ProductsModuleInitializer.cs 檔案,其中包含一個從 ModuleInitializer 繼承的 ProductsModuleInitializer 類,此類定義將在首次載入網站時調用的初始化方法,並且它為模組提供了初始化任意資料、註冊網站映射資訊等的方法。模組通過添加到 /Products 子目錄下的 web.config 檔案關聯到網站載入,該子目錄包含描述此模組的名稱、程式集和 URL 的複合 Web/模組下的條目:

<configuration><configSections><sectionGroup name="compositeWeb"><section name="modules" type="Microsoft.Practices.CompositeWeb.Configuration.ModulesConfigurationSection, Microsoft.Practices.CompositeWeb"/><section name="authorization" type="Microsoft.Practices.CompositeWeb.Configuration.AuthorizationConfigurationSection, Microsoft.Practices.CompositeWeb"/></sectionGroup></configSections><compositeWeb><modules><module name="Products" assemblyName="Products" virtualPath="~/Products"><dependencies><dependency module="Shell" /></dependencies></module></modules><authorization>    </authorization></compositeWeb><appSettings/><connectionStrings/><system.web /></configuration>
現在我們運行程式後,可以看到,已經在左邊的導航樹中添加Products模組,並且提供了一個預設的視圖:
 
添加Service

為了後面的實現View-Presenter模式,這裡我們先添加一個Service。分別添加Product實體、IProductDataService介面、ProductDataService實現,如下程式碼範例:

Product實體:
public class Product{private string _name = string.Empty;private string _brand = string.Empty;/// <summary>/// 名稱/// </summary>public string Name{get { return _name; }set { _name = value; }}/// <summary>/// 品牌/// </summary>public string Brand{get { return _brand; }set { _brand = value; }}}

IProductDataService介面:

public interface IProductDataService{Product GetProductById(string id);}

ProductDataService實現,這雷根據ID從資料庫中讀取

public class ProductDataService : IProductDataService{public Product GetProductById(string id){// 這雷根據ID從資料庫中讀取:)Product product = new Product();product.Name = "Computer";product.Brand = "Lenovo";return product;}}
註冊服務和使用服務

在ProductsModuleInitializer.cs中我們可以找到AddModuleServices、AddGlobalServices這樣兩個方法,如果要添加的服務只在當前模組中使用,可以使用AddModuleServices,如果添加的服務在其他模組中也可以使用,使用AddGlobalServices方法。

protected virtual void AddModuleServices(IServiceCollection moduleServices){moduleServices.AddNew<ProductDataService, IProductDataService>();}

註冊完服務後,就可以用Dependency Injection來使用服務了,通過ServiceDependency特性來實現,開啟ProductsController.cs,添加如下代碼:

public class ProductsController{public ProductsController(){}private IProductDataService _productDataService;[ServiceDependency]public IProductDataService ProductDataService{set { _productDataService = value; }}public virtual Product GetProductById(string id){return _productDataService.GetProductById(id);}}

除了上面的方法之外,ServiceDependency特性還可以直接應用於方法的參數之上,如下代碼所示:

public class ProductsController{public ProductsController([ServiceDependency] IProductDataService productDataService){this._productDataService = productDataService;}private IProductDataService _productDataService;public virtual Product GetProductById(string id){return _productDataService.GetProductById(id);}}
結束語

Composite Web應用程式塊在Web Client Software Factory中經常與View-Presenter一起結合使用,限於篇幅,我把視圖、表示器放在下一篇中。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.