【发布时间】:2016-10-09 12:06:09
【问题描述】:
Microservices 和Modular Programming 已被证明是设计软件系统时的正确选择。它的好处包括可重用性、可分发性、可读性等。
我们是一个使用 OSGI 作为模块化实现的 MOOC 网站:
- 每个功能都有自己的数据库、服务和独立的 Web 应用程序
- 禁止直接访问其他功能的数据库
以3个特征为例:
course project Q&A(question&answer)
+---------------+ +---------------+ +---------------+
| web | | web | | web |
| | | | | |
+---------------+ +---------------+ +---------------+
| service | | service | | service |
| | | | | |
+---------------+ +---------------+ +---------------+
| dao | | dao | | dao |
| | | | | |
+---------------+ +---------------+ +---------------+
| Database | | Database | | Database |
| | | | | |
+---------------+ +---------------+ +---------------+
要求:
- 每个课程/项目都有问答模块,参与的用户可以在这里提问有关该课程/项目的问题。
- 一个独立的全局(或通用)问答条目,列出了从所有课程/项目中汇总的问题,用户可以在此处提出与上下文无关(即与任何课程/项目无关)的问题。
我不知道这种设计或架构(每个功能从上到下完全隔离)好不好,但我确实面临一些不便:
-
模块化网络应用程序
问答功能既是独立功能,也是课程/项目的一部分。目前我认为将 Q&A 模块嵌入为独立 course-webapp/project-webapp 的 web 组件和独立 qa-webapp 本身,但我不知道重用控制器以避免 web 层上重复代码的最佳方法是什么
-
理性数据库Polymorphic Association问题
一个问题可能属于课程/项目,或者与上下文无关,并且课程/项目的 id 来自另一个数据库,多态关联是不可避免的。目前我在表格问题上使用额外的列 post_to_type 来解决这个问题。
让我说课程/项目可以是私人的或公共的。全球问答条目下列出的问题仅包括属于公共课程/项目的问题,不包括私人问题。但是同样,由于每个功能都有自己的数据库,并且禁止直接访问其他功能的数据库,我不知道处理这个问题的优雅和有效的方法是什么。
在使用 OSGI 时,我们的模块化设计是否有问题,或者只是我认为对此感到不舒服?以及设计微服务/模块化架构的最佳实践是什么,特别是在 Java 等面向对象的语言中?
谢谢!
【问题讨论】:
-
这是个好问题。但是我觉得提供有用的答案有点太抽象了。您可能会询问适当的设计模式、第三方库或如何进行设计权衡。了解您是否有固定的关系模型或者您是否正在围绕您的 OO 设计设计数据模型也很重要。我建议您提供一个具体的问题示例,以便响应者提供更有用的答案。
-
我和 sprinter 一起在这里,很好的一部分:我想你问了一个 有趣 的问题;但我认为从“它适合 stackoverflow”的角度来看,这并不是一个真正的好问题。
-
嗨@sprinter & Jägermeister,抱歉回复晚了。我的英语不是很好,我需要一些时间来考虑并为这个问题添加更多细节,如果有任何问题,请随时纠正我并编辑这个问题。谢谢!
标签: osgi polymorphic-associations microservices modularity