介绍一下我利用Url重写实现的松耦合框架

--------------

前言 

-------------- 

我之前开发了2个系统,一个是健康检查,每天定时发送系统运行日志;另外一个是issuetrace,用于缺陷跟踪。

现在,我希望查看系统运行日志时有个超级链接,点击之后自动把当前日志记录加入缺陷跟踪中。这样,我就能够很方便的把最新的bug添加到了issuetrace。 

而且,将来,可以在工作流中使用这一技术,实现松散组织下的工作流扭转,例如点击一下email的link就实现了文档审批。

--------------

效果展示 

-------------- 

整个演示系统的拓扑结构包括:

1. 服务商A,即健康检查系统。

2. Rewrite框架。

3. 客户B,使用Rewrite框架,获取健康检查系统的报告记录,插入缺陷跟踪系统。

三者之间的关系是:

  • A引用了Rewrite
  • B引用了A,Rewrite。


健康检查系统的配置
-------------------- 

首先,健康检查系统需要暴露出自己的服务引用,使用以下代码:

代码
        string module = "健康检查系统";
        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

        string code = SoaManager.GetSoaParameter("recordcode");

        TextBox1.Text 
= code;

效果如下:

 

这样,当点击了这个link之后,就跳转到了hello.aspx,处理。

当然,如果这个link被重复点击,会提示:

 

后记

---------------------

看似多此一举的架构,如果直接在健康检查系统嵌入hello.aspx的链接,不就完事了。

的确如此。但是问题是,我在开发健康检查系统的时候,缺陷跟踪还没有出生,因此这个需求还没有出现。我不希望将来每添加一个新功能,都要修改原代码,这样耦合度就太紧了。

所以,我使用了一个中间的映射层,Rewrite框架。由于Rewrite框架提供了全局唯一的访问入口,因此旧的经典系统是不需要修改代码,只需要集成了这个Rewrite框架。

这样,系统开发,可以按照模块一个个叠加。

如果各位有更好的想法,欢迎提出来。如果觉得我这个东西就是废物,也欢迎留下建议。

原文地址:https://www.cnblogs.com/zc22/p/1700186.html