C#中的类设计问题。寻呼机用于控制

时间:2011-09-12 03:09:34

标签: c# pager

我已经实现了一个自定义控件,它将一些自定义类作为项目并绘制它们。我想实现一个分页类,以便翻页,但是可以自定义。到目前为止我已经定义了一个接口。

public interface IPager
{
    void NextPage(....);
    int CurrentPage(.....);
    void PreviousPage(...);
    int PageCount(.....);
}

我的自定义控件采用IPager的实现。问题是实例不是从控件内创建的。这不是问题,但如果我添加像currentPage这样的实例参数而不必计算复杂的东西..问题是IPager实现在自定义控件对象之外但应该只在一个控件中使用..

除了拥有无状态的IPager实现并在自定义控件中保留实例值之外,我无法解决其他问题。 扩展自定义控件类也不是解决方案,因为寻呼机可能会动态变化... 还有其他解决办法吗?

1 个答案:

答案 0 :(得分:1)

您的自定义控件应该只显示一个页面而不关心维护寻呼机状态。在MVC的说法中,它是一种观点。您将分页和维护状态的逻辑与实际显示页面的过程分开。做这样的事情:

interface IPageView {
    IPager Pager {get;set;}
    void ShowPage(PageData pageData);
}
// This is your custom control:
class PageViewControl : Control, IPageView {
    public IPager Pager { get; set; }
    public void ShowPage(PageData pageData) {
        // show the page data
    }
}
// You've already defined the IPager interface:
interface IPager {
    ... 
}
class Pager : IPager {
    IPageView _view;
    public void SetView(IPageView view) { _view = view; }
    ... // state members, etc
    public void NextPage() {
        // update state, find page data
        _view.ShowPage(pageData);
    }
}

然后实例化它,就像包含表单的构造函数一样:

var pager = new Pager(...);
pager.SetView(pageViewControl1);
pageViewControl1.Pager = pager;