从其他类访问页面上的页面/控件的最佳实践?

时间:2011-05-18 21:37:06

标签: c# refactoring

我正在重构一些代码,我已经开始这样做:

protected void Page_Init(object sender, EventArgs e)
{
    Logger.Info("Page Initialization.");
    //Provides highlighting/docking functionality at the start, but overshadows controls in more complex scenarios.
    RadDockZone1.Visible = (RadControlStates.SplitterStates.Count == 0);

    ControlRegeneration.RegenerateReportMenu(lstBxHistorical, lstBxCustom);
    ControlRegeneration.RegeneratePaneChildren(RadPane2);
    ControlRegeneration.RegenerateDockZones(Page);
    ControlRegeneration.RegenerateDocks(RadDockLayout1, RadDock_Command, UpdatePanel1);
}

我想知道将Page和Page控件传递给其他类似的函数是否是一种好习惯。

我正在考虑创建一个单例,它将保存对相关页面控件的引用,然后通过该实例访问控件。

像...一样的东西。

public class DashboardPageControlsRepository
{
    private static readonly DashboardPageControlsRepository instance = new      DashboardPageControlsRepository();

    private DashboardPageControlsRepository() { }

    private Control myPanel;

    public static DashboardPageControlsRepository Instance
    {
        get { return instance; }
    }

    public void SetPageState(Page page)
    {
        myPanel = Utilities.FindControlRecursive(page, "UpdatePanel1")
    }

    public Control Panel
    {
        get { return myPanel; }
    }
}

然后,在发生任何事情之前的页面初始化期间,我会去抓取所有控件 - 允许我通过这里访问它们而不是传递它们。

有关如何处理此问题的任何想法?

1 个答案:

答案 0 :(得分:2)

以这种方式创建单例的问题在于静态实例将在AppDomain的生命周期中存在(直到它被回收)。最重要的是,访问单例的多个请求将试图独立地改变单例的状态。

此存储库除了作为控件引用的容器外,还提供哪些服务?

我要提到的另一件事是,不要太过专门化你的方法,你应该考虑方法设计的最不需要的类型方法,例如:你现在有:

public void SetPageSize(Page page)

该方法仅对访问Controls类型的System.Web.UI.Control集合非常感兴趣。您可以将方法重新定义为:

public void SetPageSize(Control control)