当前位置:  开发笔记 > 后端 > 正文

ASP.NET - 关注点分离

如何解决《ASP.NET-关注点分离》经验,为你挑选了1个好方法。

想象一下以下场景 - 我们有Page1包含控件A和控件B.

说控制A有一个按钮,单击此按钮我们希望控制B做出反应.但我们希望以抽象的方式做到这一点,即我们不能让Control B知道有关Control A的任何信息,反之亦然.

这样我们就可以孤立地开发这些控件,并通过单元测试来驱动它们.

现在,我以为我有解决方案,只想知道你们对它的看法.

在Control A的按钮上单击,我在Session上放了一条"消息",即Session ["MESSAGES"] ="ControlA_Click".

在Page1中,在Page_LoadComplete()上,我调用了ProcessMessages,如下所示:

            List messages = SessionMessages.GetMessageList(Page);
        foreach(Message m in messages)
        {
            //Get Controls
            ControlA controlA = FindControl("controlA") as ControlA;
            controlA .ProcessMessage(m);

            ControlB controlB = FindControl("controlB") as ControlB;
            controlB.ProcessMessage(m);
      }

在ControlB的ProcessMessage()方法中,我们可以对ControlB感兴趣的消息做出反应,如下所示:

    if (m.MessageName == SessionMessages.C_MESSAGE_SEARCH)
{
    this.Visible = true;
}

对我而言,这似乎有效.它允许我们完全独立地开发这些控件,同时仍允许在抽象级别进行控制间通信.

我能想到的唯一的事情可能会带来这样轰然倒下的也许 ASP.NET生命周期有关页面和用户控件.我的方法是,在拥有页面上调用Page_LoadComplete()之前,应该在控件上处理所有事件.

思考?



1> 小智..:

    控制A应该引发一个事件

    容纳控件的页面订阅事件,然后在另一个控件中调用适当的方法

    控件B应该处理消息()

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有