代码之家  ›  专栏  ›  技术社区  ›  MatthewMartin muthu

如何为ASP.NET基页模拟多重继承?

  •  0
  • MatthewMartin muthu  · 技术社区  · 15 年前

    我的项目一直使用基本页来保存公共页功能。它一直工作到基本页变得很大,所以我尝试将基本页分解成几个类。然后我意识到我不会写字

    public MyPage : SecurePage, PageWithGridViewSorting, PageWithSessionWarning
    

    给出如下信息:

    public class SecurePage : RadAjaxPage
    {
        // Add session id to ViewStateUserKey
    }
    
    public class PageWithGridViewSorting : RadAjaxPage
    {
        // add sorting to all grids on page
    }
    
    public class PageWithSessionWarning : RadAjaxPage
    {
        // inject javascript to warn user of impending session end
    }
    

    我该往哪走?我认为这是ASP.NET页面的事实是相关的,因为它是一个由框架构建的类,而不是我。我的第一个想法是对构造函数进行重写并传递特性,而这不适用于system.web.ui.page。

    3 回复  |  直到 15 年前
        1
  •  4
  •   Welbog    15 年前

    执行提供的功能 SecurePage , PageWithGridViewSorting PageWithSessionWarning 实际上需要被它们的派生类重载或重写?

    如果您所做的只是使用继承来对函数进行分组,那么您应该考虑使用不同的方法将函数组织到类中。例如, Strategy pattern . 有排序功能的页面就是有排序功能的页面。这是一页 排序。使用继承并不是解决这个问题的正确方法。

    如果他们 需要在派生类中有所不同,您可能希望使用接口而不是继承来处理问题。因为您无论如何都要重新定义函数,这不应该增加复杂性,也不应该让您自己重复。

    编辑:考虑到你的问题,我觉得你应该调查一下 aspect-oriented programming 你怎么能 fit it into your language .

        2
  •  3
  •   Mathias F    15 年前

    我会尝试将一些内容从basepage移到usercontrols。 让我们说pagewithsessionwarning。这可能是您在母版页上放置的控件。

        3
  •  2
  •   LBushkin    15 年前

    我认为ASP.NET是一个您应该更喜欢组合而不是继承的环境。您应该考虑重新构造代码以“注入”必要的功能,方法是从链接到页面事件并提供功能的帮助器类组成页面。 其他页面可以使用的共享结构。

    这在ASP.NET中做得很好可能是一件棘手的事情,因为页面生命周期很复杂,在试图编写通用代码时,常常会“阻碍您的方向”。

    如果功能是以用户界面为中心的,您还可以尝试将功能移到自定义或用户控件中。

    此外,母版页是一种有效的将通用功能从页面中分解出来的方法,并且