将对象与其他对象和这些对象的属性相关联

时间:2010-03-10 13:00:30

标签: language-agnostic design-patterns database-design

我正在寻找一些帮助,在我的应用程序中设计一些功能。我已经设计了类似的东西,但这个问题有点不同。

背景

在我的应用程序中,我们有不同的模块。每个模块中的数据可以与其他模块相关联。每个模块在我们的应用程序中由一个Object表示。

模块1可以与模块2和模块3相关联。目前我使用工厂提供适当的DAO来获取和保存这些数据。

它看起来像这样:

class Module1Factory {

    public static Module1BridgeDAO createModule1BridgeDAO(int moduleid) {

     switch (moduleId)
            {
                case Module.Module2Id:        return new Module1_Module2DAO();
                case Module.Module3Id:        return new Module1_Module3DAO();
                default:                    return null;
            }


    }

}

Module1_Module2和Module1_Module3实现相同的BridgeModule接口。在数据库中,我有一个表用于每个模块(Module1,Module2,Module3)。我还有每个模块的桥接表(它们是多对多的)Module1_Module2,Module1_Module3等。 DAO基本上处理管理关联所需的所有代码,并为调用模块检索自己的实例数据。现在,当我们添加与Module1关联的新模块时,我们只需实现ModuleBridge接口并提供通用功能。

新发展

我们正在添加一个新模块,该模块能够与其他模块以及该模块的特定属性相关联。该模块基本上为用户提供了将自定义表单添加到其他模块的功能。这样他们就可以收集更多信息以及我们提供的信息。

我想开始将我的Form模块与其他模块及其属性相关联。即如果Module1具有属性类别,我想将实例从数据与该属性相关联。

有很多表格。如果用户创建Module2的实例,他们可能总是希望还将某些表单附加到该Module2实例。如果他们创建了Module2的实例并选择了Category 1,那么我可能想要创建其他Form。

我做了这样的原型:

表 FormLayout(包含标签和gui控件) FormModule(将表单与模块的所有实例相关联) 表单实例(创建要填写的表单的实例)

正如我想的那样,我正在考虑为我添加的每个模块和属性创建一个新的FormModule表/ class / dao。所以我可能会:

FormModule1 FormModule1Property1 FormModule1Property2 FormModule1Property3 FormModule1Property4 FormModule2 FormModule3 FormModule3Property1

然后正如我之前所做的那样,我会使用工厂来获得适当的DAO以处理所有这些问题。我会给它一个代表不同模块和属性的id数组,它会返回我需要调用getForms()的所有DAO。反过来,它将返回该特定桥的所有形式。

一些要点

  • 这将是一个新模块,所以我不需要扩展我提供的工厂代码。我只想展示一下我过去做过的一个例子。
  • 新模块可以与:其他模块(即全局用于该模块数据的任何实例),其他模块属性(即仅当模块实例在其中一个属性中具有certian值)时
  • 我想让开发人员轻松添加与其他模块和属性的关联

任何人都可以建议任何设计模式或策略来实现这一目标吗?

如果有任何不清楚的地方,请告诉我。

谢谢,

Al

1 个答案:

答案 0 :(得分:1)

您可以使用弹簧依赖注入功能。这将有助于您实现使用xml配置文件实例化对象的灵活性。

所以,我的建议是和Springs一起去。