问题标签 [modularity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
214 浏览

java - 允许模块化开发,同时仍然在同一个 JVM 中运行?

我们当前的应用程序在单个 JVM 中运行。

我们现在将应用程序拆分为单独的逻辑服务,每个服务在其自己的 JVM 中运行。

进行拆分是为了允许修改和部署单个服务,而不会影响整个系统。这减少了对整个系统进行 QA 的需要——只需要对与正在更改的服务的交互进行 QA。

对于服务间通信,我们使用 REST、MQ 系统总线和数据库视图的组合。

我不喜欢这个:

  • REST 意味着我们必须将数据编组到/从 XML
  • DB 视图将系统耦合在一起,这破坏了单独服务的整个概念
  • MQ/系统总线增加了复杂性
  • 服务之间不可避免地存在一些代码重复
  • 您已经设置了 n 个 JBoss 服务器配置,我们必须进行 n 次部署、n 次设置脚本等,等等。

是否有更好的方法来构建内部应用程序以允许模块化开发和部署,同时允许应用程序在单个 JVM 中运行(并获得相关的好处)?

0 投票
1 回答
837 浏览

silverlight-4.0 - Shell 布局和切换视图的最佳实践 - Prism、SL4、按需加载模块

我正在学习 Prism,我对主 Shell 的最佳方法有疑问。

假设 Shell 有 2 个区域:Toolbar、Main。工具栏有 3 个主要按钮,每个按钮代表一个不同的按需加载模块。这些模块中的每一个当前都将自己注册为适合主要区域。

当我单击其中一个按钮时,我想要执行以下操作:

通知任何活动视图其切换,如果仍然需要未决操作,则可以选择取消。这可能会级联到子视图。

如果动作没有被取消,那么如果它还没有被加载,则加载按需模块,否则在区域内激活它。

这三个模块应该都适合同一个区域,还是我的外壳应该在内容呈现器中定义 3 个区域?

我遇到的一个问题是,当您从 Module Initialize 注册视图时,它不会添加强类型名称,因此当我尝试确定我的视图是否已使用 GetView( viewname) 它总是返回 null,所以我最终向该区域添加了另一个视图。

0 投票
1 回答
529 浏览

.net - 从模块/插件配置 IoC 容器?

我陷入了两难境地。我正在 ASP.NET MVC 2 中开发高度模块化的 Web 应用程序(事实上,核心将是超级轻量级​​的,所有模块/插件都可以工作)。我发现 MEF 对于模块发现非常有用,但我不想将它用作 IoC 容器。我很有可能需要“真正的”IoC 容器的高级功能,所以我想使用 Unity。

这就是问题所在:如何允许模块(以编程方式)配置容器=在应用程序启动时注册自己的类型(mvc 控制器、服务的自定义实现......)而不在所有模块中对 Unity 产生硬依赖?我知道 Common Service Locator 项目,看起来还不错,但是这个接口 co 容器只允许解析类型,而不是注册它们(afaik)。

我真的希望你能理解我的观点,我知道我的英语很糟糕(我来自非英语国家:) 非常感谢!

0 投票
3 回答
5949 浏览

maven-2 - 如何在 Maven 多项目中找到不必要的依赖项?

如果您正在开发一个大型不断发展的多模块 maven 项目,似乎不可避免地会在 pom 中给出一些不必要的依赖项,因为它们被其他依赖项传递包含。例如,如果您有一个最初包含 C 的模块 A,则会发生这种情况。后来您重构并让 A 依赖于模块 B,而该模块 B 又依赖于 C。如果您不够小心,您最终会同时包含 B 和 C A 的依赖列表。但是当然你不需要将 C 放入 A 的 pom 中,因为无论如何它都被传递地包含在内。是否有工具可以找到这种不必要的依赖项?

(这些依赖项实际上并没有受到伤害,但它们可能会掩盖您的实际模块结构,并且在 pom 中包含更少的东西通常会更好。:-)

0 投票
2 回答
475 浏览

c++ - 保持大型 C++ 项目模块化的建议?

我们的团队正在进入规模更大的项目,其中许多项目使用了多个开源项目。

有什么建议或最佳实践来保持库和依赖项相对模块化并在新版本发布时易于升级?

换句话说,假设您制作了一个作为开源项目分支的程序。随着这两个项目的发展,维护和共享核心更新的最简单方法是什么?

请就我所问的问题提供建议……我不需要“你应该这样做”或“你为什么”……谢谢。

0 投票
1 回答
801 浏览

design-patterns - Zend 框架应用程序:模块依赖项

您如何处理 Zend Framework 中模块之间的依赖关系以创建可重用的插入式模块?

例如,我有Newsletter 模块,它允许用户订阅,提供电子邮件地址。

接下来,我计划添加Blog 模块,它允许通过电子邮件订阅帖子(它显然复制了时事通讯的某些功能,但电子邮件地址存储在 User 模型中)。下一个是论坛模块,具有相同的订阅帖子功能。

但我希望能够独立使用这些模块,即单独使用时事通讯的应用程序、带有博客的时事通讯、同时组合两个或三个模块。

这很常见,例如具有搜索功能的相同故事。我想要一个搜索模块,如果可用,可以选择在所有数据、博客数据或论坛数据中进行搜索。

这有什么设计模式吗?
我是否必须moduleExists($moduleMame)为每个模块添加一些类似的,或者提供一些接口或抽象类,一些基本控制器模式?

0 投票
3 回答
3481 浏览

c++ - Lua 和 C++:职责分离

请帮助对组织 C++/Lua 游戏代码的方式进行分类并区分它们的职责。最方便的方法是什么,你用哪一种?

例如,Lua 可以仅用于初始化 C++ 对象,也可以在每次游戏循环迭代时使用。它可以仅用于游戏逻辑,也可以用于图形。一些游戏引擎可以完全控制脚本中的所有子系统!我真的不喜欢这种方法(根本没有分离)。

将所有游戏对象(npc、位置)实现为没有 C++ 对象的 Lua 表是一个好主意吗?或者最好是镜像它们(控制 C++ 对象的 Lua 表)?或者是其他东西?

谢谢你。

编辑。我的分类:Lua 和 C++:职责分离

话题继续:Lua、游戏状态和游戏循环

0 投票
3 回答
3926 浏览

java - JDBC/OSGi 以及如何动态加载驱动程序而不在包中明确说明依赖关系?

这是一个大问题。

我有一个结构良好但单一的代码库,它具有原始的模块化架构(所有模块都实现接口但共享相同的类路径)。我意识到这种方法的愚蠢以及当我在可能具有我的库的不同冲突版本的应用程序服务器上部署时它所代表的问题。

我现在依赖大约 30 个罐子,并且正在将它们捆绑起来。现在我的一些模块很容易声明版本依赖,例如我的网络组件。它们静态引用 JRE 和其他 BNDded 库中的类,但我的 JDBC 相关组件通过 Class.forName(...) 实例化,并且可以使用任意数量的驱动程序之一。

我按服务区将所有内容分解为 OSGi 包。

  • 我的核心类/接口。
  • 报告相关组件。
  • 数据库访问相关组件(通过 JDBC)。
  • ETC....

我希望我的代码仍然能够在没有 OSGi 的情况下通过具有我所有依赖项的单个 jar 文件使用,并且完全没有 OSGi(通过 JARJAR),并且还能够通过 OSGi 元数据和具有依赖项信息的粒度包实现模块化。

  • 如何配置我的包和我的代码,以便它可以动态地利用类路径上和/或 OSGi 容器环境(Felix/Equinox/等)中的任何驱动程序?

  • 是否有运行时方法来检测我是否在跨容器(Felix/Equinox/等)兼容的 OSGi 容器中运行?

  • 如果我在 OSGi 容器中,是否需要使用不同的类加载机制?

  • 我是否需要将 OSGi 类导入我的项目才能通过我的数据库模块加载一个在捆绑时间未知的 JDBC 驱动程序?

  • 我还有第二种获取驱动程序的方法(通过 JNDI,仅在应用服务器中运行时才真正适用),我是否需要更改我的 OSGi 感知应用服务器的 JNDI 访问代码?

0 投票
1 回答
132 浏览

java - 如何模块化 B2b Web 服务转换应用程序

您将如何模块化一个大型应用程序,该应用程序具有一些传入 (SOAP) Web 服务、一些传出 Web 服务、它们与内部格式之间的转换、内部日志服务、访问外部归档 Web 服务、延迟内容以及异步处理等等?

一种方法是将功能拆分为 WAR 集合,将它们全部部署在一个应用程序服务器上,并让它们与内部 Web 服务进行通信。这会产生一些开销,尤其是在消息很大的情况下,并且由于线程数限制等原因,您可能会遇到性能问题。

另一种方法是将所有内容放入一个巨大的 WAR 中,这样您就可以直接进行交流。不完全是模块化。你会怎么做?

0 投票
2 回答
2154 浏览

architecture - 将管理功能与公共站点分开的最佳方法是什么?

我正在开发一个网站,该网站在用户群和功能方面都在增长,以至于很明显一些管理任务应该与公共网站分开。我想知道最好的方法是什么。

例如,该网站有一个很大的社交组件,以及一个公共销售界面。但与此同时,管理部分中有后台任务、批量上传处理、仪表板(带有长时间运行的查询)和客户关系工具,我不想受到公共交通高峰的影响(或影响公众-面临响应时间)。

该站点运行在一个相当标准的 Rails/MySQL/Linux 堆栈上,但我认为这更多是架构问题而不是实现问题:主要是,如何在这些不同的应用程序之间保持数据和业务逻辑的同步?

我正在评估的一些策略:

1)在另一台机器上创建面向公众的数据库的从数据库。 提取所有模型和库代码,以便在应用程序之间共享。为管理界面创建新的控制器和视图。

我在复制方面的经验有限,甚至不确定应该以这种方式使用它(我看到的大部分时间都是为了扩展同一个应用程序的读取能力,而不是拥有多个不同的应用程序) . 如果从站不在同一个网络上,我也担心潜在的延迟问题。

2)创建新的更多特定于任务/部门的应用程序,并使用面向消息的中间件来集成它们。 不久前我阅读了 Enterprise Integration Patterns,他们似乎提倡将这一点用于分布式系统。(或者,在某些情况下,基本的 Rails 风格的 RESTful API 功能可能就足够了。)但是,我对数据同步问题以及这将需要进行的大规模重新架构做噩梦。

3)两者的某种混合。 例如,某些后台任务所需的唯一公共信息是只读的完成时间或状态。将它放在一个完全独立的系统上并将数据发送给公众是否有意义?同时,用户/组管理功能将在共享数据库的单独系统上运行?不利的一面是,这似乎保留了我对前两个问题的许多担忧,尤其是重新架构。

我确信答案将高度依赖于网站的特定需求,但我很想听听成功(或失败)的故事。