介绍一下我利用Url重写实现的松耦合框架
--------------
前言
--------------
我之前开发了2个系统,一个是健康检查,每天定时发送系统运行日志;另外一个是issuetrace,用于缺陷跟踪。
现在,我希望查看系统运行日志时有个超级链接,点击之后自动把当前日志记录加入缺陷跟踪中。这样,我就能够很方便的把最新的bug添加到了issuetrace。
而且,将来,可以在工作流中使用这一技术,实现松散组织下的工作流扭转,例如点击一下email的link就实现了文档审批。
--------------
效果展示
--------------
整个演示系统的拓扑结构包括:
1. 服务商A,即健康检查系统。
2. Rewrite框架。
3. 客户B,使用Rewrite框架,获取健康检查系统的报告记录,插入缺陷跟踪系统。
三者之间的关系是:
- A引用了Rewrite
- B引用了A,Rewrite。
健康检查系统的配置
--------------------
首先,健康检查系统需要暴露出自己的服务引用,使用以下代码:
ISoaHyperLink link = SoaManager.CreateHyperLink(module);
link.AddParameter("recordcode", "0000001");
this.HyperLink1.NavigateUrl = link.Serialize();
module表示当前服务商的唯一ID,即健康检查系统,这样在页面就会出现了全局唯一引用。
以上代码的意思是,在链接里面嵌入了recordcode这个字段,值是00000001。
那么将来有人调用了这个链接,就等于获取了 健康检查系统,记录编号为00000001的记录。
效果如下:
配置Rewrite框架
---------------------
然后,我们需要配置Rewrite框架,当有人点击这个链接的时候,需要做出相应。
这个页面配置了,当链接被点击后,被hello.aspx处理。
配置客户B处理代码
----------------------
hello.aspx
TextBox1.Text = code;
效果如下:
这样,当点击了这个link之后,就跳转到了hello.aspx,处理。
当然,如果这个link被重复点击,会提示:
后记
---------------------
看似多此一举的架构,如果直接在健康检查系统嵌入hello.aspx的链接,不就完事了。
的确如此。但是问题是,我在开发健康检查系统的时候,缺陷跟踪还没有出生,因此这个需求还没有出现。我不希望将来每添加一个新功能,都要修改原代码,这样耦合度就太紧了。
所以,我使用了一个中间的映射层,Rewrite框架。由于Rewrite框架提供了全局唯一的访问入口,因此旧的经典系统是不需要修改代码,只需要集成了这个Rewrite框架。
这样,系统开发,可以按照模块一个个叠加。
如果各位有更好的想法,欢迎提出来。如果觉得我这个东西就是废物,也欢迎留下建议。