博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web Client Software Factory系列(2):Composite Web应用程序块
阅读量:5900 次
发布时间:2019-06-19

本文共 3007 字,大约阅读时间需要 10 分钟。

概述

使用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/模块下的条目:
现在我们运行程序后,可以看到,已经在左边的导航树中添加Products模块,并且提供了一个默认的视图:
 

添加Service

为了后面的实现View-Presenter模式,这里我们先添加一个Service。分别添加Product实体、IProductDataService接口、ProductDataService实现,如下代码示例:
Product实体:
public class Product{private string _name = string.Empty;private string _brand = string.Empty;/// /// 名称/// public string Name{get { return _name; }set { _name = value; }}/// /// 品牌/// 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
();}
注册完服务后,就可以用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一起结合使用,限于篇幅,我把视图、表示器放在下一篇中。
本文转自lihuijun51CTO博客,原文链接:http://blog.51cto.com/terrylee/67730
 ,如需转载请自行联系原作者
你可能感兴趣的文章
乐在其中设计模式(C#) - 单例模式(Singleton Pattern)
查看>>
Tensorflow官方语音识别入门教程 | 附Google新语音指令数据集
查看>>
AssetBundle进阶内存优化(Unity 4.x)
查看>>
Windows Home Server 简体中文版安装和配置体验 - 海量图鉴
查看>>
GitHub 版本控制 项目托管 00 总体框架
查看>>
Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)
查看>>
Windows 8部署系列PART3:配置WDS服务器环境
查看>>
Ruby中写一个判断成绩分类的脚本
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>
Exchange2003-2010迁移系列之十,Exchange证书攻略
查看>>
使用NTFS权限保护数据安全
查看>>
infortrend ESDS RAID6故障后的数据恢复方案
查看>>
【STM32 .Net MF开发板学习-23】DHT11温湿度传感器通信(下)
查看>>
android在代码中四种设置控件(以及TextView的文字颜色)背景颜色的方法
查看>>
extmail集群的邮件负载均衡方案 [lvs dns postfix]
查看>>
SCCM2012SP1---资产管理和远程管理
查看>>
Java获取图片的宽高等信息
查看>>
用C++实现跨平台游戏开发之Irrlicht引擎
查看>>
六年程序生涯
查看>>
发布一个win8 UI风格的前端开发者网址导航
查看>>