我一直坚持设计的这个特定部分,我想要了解如何处理它。我的计划包括课程LeerTrajecten
和元素Elementen
。这两个对象都可以独立存在,但也可以将元素添加到课程中。
Element
本身就是Document
,Casus
等对象的抽象超类。
(1)
将一个元素添加到课程时,会创建一个课程元素LeerTrajectenElement
,其中包含TrajectCode
,ElementCode
,一个由前两个字段和一些其他数据组成的自己的唯一代码( DisplayNaam
,DisplayOmschrijving
)。
在GUI(Spring)中,有一些专门用于管理这些课程和元素的标签(JTabbedPane
)。每个选项卡都有一个概述和一个详细信息面板。在此概述中,JTable
可显示每个现有Element
或Traject
。
这仅仅是为了将程序放入透视图(LeerTrajectElement
)并显示可能同时激活多个JTable
但在不同选项卡上的方式。
(2)
我还有经理人,他们的唯一目的是管理他们各自的对象(LeerTrajectManager
管理LeerTraject
,ElementManager
管理Element
等等。 Domeincontroller
知道这些管理者,它们是整个域的一般外观。来自GUI的请求将发送到此DomeinController
,该请求会将请求发送给正确的请求。
这是我的程序的基本概要,我将包括一些图表作为视觉辅助。
(1)
(2)
我希望我提供了有关项目当前设置的充分信息。
由于某种原因,我的模型没有正确显示,但DomeinController
拥有3个管理员(它没有显示在概述中,但关联就在那里)。
如图2所示,每位经理都持有一个tableModel。 TableModels定义如下:
MyAbstractTableModel
扩展AbstractTableModel
并提供基本实现,因此特定实现可以从此类派生,同时仅提供非常基本的需求。
这是我们要点到的地方: 目前,每个经理都拥有自己的tableModel,而我们(老师)决定我们应该将其抽象为经理。我一直在为此实现一个实现,但我觉得我有一些有趣的错误:这些tableModel可以为几个不同的目的生成:要么你想要所有元素,要么你想要所有的元素链接到课程,或者您希望所有元素都链接到特定课程等等。
为了获得这样的东西,我尝试创建两个getTableModel
方法。第一个只使用枚举{LEERTRAJECT
,ELEMENT
,LEERTRAJECTELEMENT
}作为参数,而第二个则使用额外的List<E>
作为参数。这样做可以让我一般性地向请求添加数据,这些数据可以由相应的管理器先前收集(因此只将结果集数据发送到TableModelManager
。
这种方法最终为我的Switch
中的每个方法提供了大量TableModelManager
语句,以确定它应该发生什么以及应该使用什么tableModel。代码变得非常不洁净,所以我认为这可能不是我想要的方式。
至于为什么我们应该首先介绍一位经理:看起来我们的tableModels现在很难与我们各自的经理联系起来,我们应该尽量避免这种情况。
因此,总而言之:我有几位经理,他们都持有TableModel
来显示他们各自的数据。我想通过将当前TableModel
保存在TableModelManager
中并通过此对象生成表模型来集中这一点。其他管理人员只需提及TableModelManager
并告诉他数据已被更改或要求相应的模型。
我该如何处理?
PS:我意识到这更像是一个设计问题,所以如果我把它放在stackexchange网络上的另一个站点,请告诉我,我会删除它。 PPS:对于非英语部分我很抱歉,我的队友拒绝仅使用英语。答案 0 :(得分:1)
缺席详细分析,
您可以通过让每个元素实现一个公共界面来实现strategy pattern,作为oul here来挽救您的enum
方法。
作为使用管理员的具体示例,此TestTable使用MyObjectManager
的实例管理JTable
中每行的一个单选按钮。