将数据连接到GUI-OOP

将数据连接到GUI-OOP,oop,user-interface,design-patterns,Oop,User Interface,Design Patterns,我有一个应用程序,上面有几个图表 我工作得很快,只创建了像Graph和Table这样的类,每个类都包含一个请求对象(伪代码): 一旦发生GUI事件(例如,有人更改了日期范围下拉列表),我只需调用图形实例上的setter,然后刷新它。好的,当我添加其他GUI元素时,比如tables等等,它们基本上都有类似的方法(setDateRange和请求中常见的其他东西) 有哪些更优雅的OOP方法可以做到这一点 这个应用程序非常简单,我不想过度构建它,但我也不想有一堆类,它们的方法基本上与路由到请求对象的方法

我有一个应用程序,上面有几个图表

我工作得很快,只创建了像
Graph
Table
这样的类,每个类都包含一个请求对象(伪代码):

一旦发生GUI事件(例如,有人更改了日期范围下拉列表),我只需调用
图形
实例上的setter,然后刷新它。好的,当我添加其他GUI元素时,比如tables等等,它们基本上都有类似的方法(
setDateRange
和请求中常见的其他东西)

有哪些更优雅的OOP方法可以做到这一点


这个应用程序非常简单,我不想过度构建它,但我也不想有一堆类,它们的方法基本上与路由到请求对象的方法相同。我也不想将每个GUI类设置为从请求类继承,但我真的愿意接受任何想法。

正如您所评论的,方法是相同的。在这种情况下,我建议采用以下方法

abstract class AbstractGUIElement {

    protected request;

    public function setDateRange(dateRange) {
        request.setDateRange(dateRange);
    }

    abstract function refresh();
}
刷新可能是特定于元素的,因此我将其添加为继承类型必须实现的抽象方法

class Graph extends AbstractGUIElement {

    public function refresh() {
        // Graph specific refreshing
    }
}

你是说他们基本上有相似的方法。这些方法是相似的还是相同的?您是否考虑过使用实现相同方法的抽象类?比如:AbstractGuilement这些方法是相同的(它们只是调用请求对象上的方法)。尽管每个gui对象都有一个不同的请求类实例,但它们用于更改请求对象状态的目的是相同的。我已经考虑过了,但是我现在正在避免继承,因为我不喜欢请求对象作为gui元素的一部分的想法,但实际上我认为这是一个更好的想法。在过去的15-30分钟里,我确信使用抽象基类是最好的解决方案。我最初的想法是不要像那样连接gui和请求,但它提供了我需要的所有好处,并且没有可预见的缺点。谢谢
class Graph extends AbstractGUIElement {

    public function refresh() {
        // Graph specific refreshing
    }
}