【发布时间】:2010-03-10 13:00:29
【问题描述】:
我正在寻求有关在我的应用程序中设计某些功能的帮助。我已经设计了类似的东西,但这个问题有点不同。
背景:
在我的应用程序中,我们有不同的模块。每个模块中的数据可以与其他模块相关联。在我们的应用程序中,每个模块都由一个对象表示。
模块 1 可以与模块 2 和模块 3 相关联。目前我使用工厂来提供适当的 DAO 来获取和保存这些数据。
看起来像这样:
类 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 接口并提供通用功能。
新发展
我们正在添加一个新模块,该模块能够与其他模块以及该模块的特定属性相关联。该模块基本上为用户提供了将他们的自定义表单添加到我们其他模块的能力。这样他们就可以收集其他信息以及我们提供的信息。
我想开始将我的表单模块与其他模块及其属性相关联。即如果Module1 有一个属性Category,我想将来自数据的实例与该属性相关联。
有很多形式。如果用户创建了 Module2 的实例,他们可能总是希望将某些表单附加到该 Module2 实例。如果他们创建 Module2 的实例并选择类别 1,那么我可能希望创建其他表单。
我做了这样的原型:
表格 FormLayout(包含标签和 gui 控件) FormModule(将表单与模块的所有实例相关联) 表单实例(创建要填写的表单实例)
当我想到它时,我正在考虑为我添加的每个模块和属性创建一个新的 FormModule 表/类/dao。所以我可能有:
FormModule1 FormModule1Property1 FormModule1Property2 FormModule1Property3 FormModule1Property4 表单模块2 表单模块3 FormModule3Property1
然后就像我之前做的那样,我会使用工厂来获得适当的 DAO 来处理所有这些问题。我会给它一个代表不同模块和属性的 id 数组,它会返回我需要调用 getForms() 的所有 DAO。这反过来将返回该特定桥梁的所有表格。
几点
- 这将是一个新模块,所以我不需要扩展我提供的工厂代码。我只是想展示一个我过去做过的事情的例子。
- 新模块可以与:其他模块(即该模块数据的任何实例的全局)、其他模块属性(即仅当模块实例在其属性之一中具有特定值时)相关联
- 我想让开发人员轻松添加与其他模块和属性的关联
任何人都可以提出任何设计模式或策略来实现这一目标吗?
如果有什么不清楚的地方请告诉我。
谢谢,
阿尔
【问题讨论】:
-
我很困惑。如果一个模块与另一个模块的某些属性相关联,这意味着什么?
-
Module1 有与之关联的类别。我想根据所选类别将 NewModule 的不同实例与 Module 相关联。或者有时我可能想在 NewModule 以任何方式与模块 1 关联时创建一个实例。
标签: language-agnostic design-patterns database-design