首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模块化企业应用的设计模式

模块化企业应用的设计模式
EN

Stack Overflow用户
提问于 2013-04-18 16:04:06
回答 1查看 1.8K关注 0票数 1

我们正在开发一个基于Java的系统,我们正在寻找最佳的设计模式,它将随着应用程序的发展而增长,即使随着时间的推移将增加更多的模块。

目标是:

  • 模块中有核心模块和其他模块将继承基本功能。
  • 然后,其他模块是单独的组件,但在其他模块之间共享数据。
  • 在管理端,模块可以分配给某个用户。

例如,学生将被分配,支付,论坛,课程,如果是一般的客户付款,购物等。如果一个学生想购物,你升级他的帐户和添加购物模块到他和他的帐户,更新课程,以显示他购买了一本书,例如,“在Java的Concurreny”。

  • 模块可以打开或关闭,而不影响应用程序的稳定性。
  • 我也在想,由于管理的内容,所以也要用野兔。我说错了吗?正反两方面的参考资料?

哪一种最好的设计模式将与我们一起工作?您推荐的任何建议或我可以查看的材料

我们如何实现几乎完美的数据库设计?您可能拥有的引用?

任何更多的建议都将被接受并受到欢迎。

EN

回答 1

Stack Overflow用户

发布于 2013-04-19 05:29:48

我过去成功使用过的一个模块化模式是消息总线。本质上,学生(或教授或管理员等)不直接与支付、论坛或课程等模块交谈,而是通过消息总线进行所有通信(例如,学生向总线发送消息,后者将消息发送给论坛)。这条消息总线可以是ConcurrentLinkedQueueLinkedBlockingQueue,也可以是第三方软件的一部分,比如RabbitMQActiveMQAmazon;每个消息总线都有其优点和缺点,您需要权衡一下,但您并没有完全陷入您的决定--我做过一个项目,我们从Amazon切换到RabbitMQ,重写消息格式的工作也没有那么复杂。

消息传递的好处是:

  1. 健壮性如果使用持久队列(意味着将消息保存到数据库),则可以在数据损失最小的情况下抵御程序崩溃。此外,客户端模块(学生/教授/管理员)、服务模块(支付、论坛、课程)和消息总线通常在单独的内存空间中运行(它们都有自己的线程池,数据在它们之间被复制,而不是直接在它们之间共享),所以如果一个模块崩溃了,它将不会将其他模块崩溃(除非崩溃的是消息总线,在这种情况下,其他模块仍然完好无损,但它们必须旋转/休眠直到总线恢复运行)。
  2. 可伸缩性。并发和分布式系统通常建立在消息传递模型上;例如,消息传递是并发语言和库(如Erlang和Akka )的固有部分。但是,如果您不小心,消息总线将成为瓶颈,但是如果您不相信自己能够很好地实现它,那么就有几个好的第三方库可供选择。
  3. 模块化。如果您想要添加一个新模块,那么您只需要编写它来与您的消息总线进行互操作--您不需要为它编写单独的接口来与所有其他模块对话。移除模块也同样容易--只需让消息总线将其消息路由到死信存储。访问控制之类的东西很容易通过消息总线实现--如果一个学生无法访问Admin模块,那么消息总线只需将错误消息路由到死信存储或异常队列。

消息传递的主要缺点是其效率-模块通过复制数据而不是授予直接访问的方式进行通信。但是,从长远来看,您会发现这将使使用多线程实现模块变得更加容易,这可能会带来净效率的提高。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16087855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档