介绍一下我利用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框架。

 

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

 

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

posted @     阅读(415)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
IT民工
点击右上角即可分享
微信分享提示