问题标签 [modular-design]

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 投票
0 回答
127 浏览

asp.net-mvc - 在 MVC 中使用 Unity,同时维护 SoC

我将给出我的项目解决方案的简化版本。我的解决方案中有以下项目。MVC,核心,数据,通用。Common 包含枚举、静态类、数据传输对象等。没有逻辑,没有程序集。MVC 层可以访问 Core 和 Common。Core 可以访问 Data 和 Common。数据可以访问Common。

我已经让我的类使用接口消耗依赖项。我想为 IoC 实施 Microsoft Unity。我在 MVC、Core 和 Data 项目中添加了 UnityConfig。然后我可以让 Unity 注册每个项目类。这很好用,我认为我的包里有问题。

我团队中的一位开发人员告诉我,我不应该那样做。我正在为所有三层添加一个依赖项。我可以理解他的观点,我想知道在这种环境中实施 Microsoft Unity 的最佳实践是什么。

另一个开发人员希望我将数据层引用添加到 MVC 项目。然后 Unity 可以包含在 MVC 项目中。我真的不喜欢将数据层置于 MVC 项目范围内的想法。我在开发人员使用 Entity 直接调用时遇到过不好的经历,我宁愿强迫他们使用核心层(业务层)并让核心层进行数据库调用。

我还在考虑添加一个单独的项目,以便 Unity 能够看到所有 3 层。有人指出,这可能会产生一个问题,因为它只有一个组合根。不是我之前真正想过的事情。

我真的希望有一个不包括将 MVC 引用添加到数据层的切割器解决方案。

非常感谢您提前。

0 投票
1 回答
382 浏览

javascript - 为什么我们需要 IIFE 在 Javascript 中具有模块范围?

假设我有 core.js

如果我将其包含在我的文件中<script src="core.js">

1)我污染了全局命名空间

2)可能[替换/被替换]另一个变量。

但是不会让它成为一个对象解决问题吗?即我像这样制作core.js

这种方法的根本问题是什么?是因为在创建完整对象之前您无法访问其他项目吗?像例如core = {a:"Foo" , b:a}不会工作?但是我可以通过

如果我们对闭包不感兴趣,为什么还要进入 IIFE(立即调用函数表达式)?对于 Javascript 中的“模块命名空间”,不介意在不同的命名空间中公开所有内容,这种方法不会工作并在 Javascript 中创建模块效果吗?

是否有任何指针可以阅读更多内容?我知道它有点含糊,但我对 IIFE requirejs 等这个概念很陌生。所以试着从新手的角度去理解。

0 投票
2 回答
2820 浏览

c# - 使用带有 ServiceLocater 模式的 Ninject - 好或坏

我快要习惯 Ninject 了。我了解依赖注入的原理,并且知道如何使用 Ninject。但我现在有点困惑。当涉及到服务定位器模式时,意见分歧。

我的应用程序建立在严格的模块化基础上。我尝试尽可能多地使用构造函数注入,并且效果很好,尽管它有点混乱(在我看来)。

现在,当一个扩展(外部代码)想要从这个系统中受益时,是否不需要访问内核?我的意思是现在我有一个静态类,它可以访问我的应用程序的所有子系统。另一种方法是访问内核(服务定位器模式)并从中获取子系统依赖项。在这里,我可以很容易地避免授予对内核的访问权限,或者更明确地说,不允许对内核的依赖。

但是,如果一个扩展现在想要从任何子系统使用我的应用程序的任何组件(接口),则需要访问内核才能解析它们,因为只要您不使用 Ninject 就不会自动解析“kernel.Get()”,对吧?

Peww,很难以一种可以理解的方式解释这一点。我希望你们能得到我的目标。

为什么对内核或其包装器的依赖如此“糟糕”?我的意思是,你不能避免所有的依赖。例如,我的“核心”类仍然有一个,它可以访问所有子系统。如果扩展想要注册它自己的模块以供进一步使用怎么办?

对于为什么这应该是一种不好的方法,我找不到任何好的答案,但我经常阅读它。此外,据说 Ninject 不像 Unity 或类似框架那样使用这种方法。

谢谢 :)

0 投票
1 回答
893 浏览

javascript - 使用 jQuery 构建应用程序

我将构建一个应用程序,因为它不是太丰富,否则我可以为此目的使用 angularjs。我想将我的 JS 代码组织成适当的模块化编程方法。

例如

现在请看一下我已经用实际代码更新了我的问题

0 投票
2 回答
73 浏览

javascript - 设计门户容器

我处于必须使用 HTML5 和 Javascript 构建门户容器的情况下。该容器将提供“n”个小部件 URL,并且容器负责通过 DIV(而不是 iFrame)中的 Ajax 加载它们。

现在的问题是如何将每个小部件的 JavaScript 函数定义分开?比如我在容器页面上有两个DIV,Widget1_DIV和Widget2_DIV。Widget1 的 HTML、JS 和 CSS 将被放置在 Widget1_DIV 中,对于 Widget2 也是如此。

现在假设两个小部件都有一个同名 'foo' 的 JS 函数,一旦它们嵌入到同一个 DOM 中就会发生冲突。我想知道 RequireJS 是否有助于避免冲突或使两个小部件的 DIV 模块化的正确解决方案?

谢谢

0 投票
2 回答
50 浏览

c# - 在“key:value;key:value;key:value;key:value;”中处理序列化的框架 格式

当然,很容易编写代码从这种格式反序列化。我已经做了,但我不喜欢。

单一职责原则表明我应该有一个只关心这种序列化的泛型类。并且该任务足够通用,可以由框架来处理。

0 投票
1 回答
229 浏览

java - How to do modularity in the existing Java application?

I have a very large java application with interdepent classes, it is being decided to convert our big application into modules. To start with this task, I would like to gather ideas.

My questions is almost same as asked here : How to modularize a (large) Java App?

Re-asking this question mainly because it was answered 5 years ago. Any new ideas are welcomed.

0 投票
1 回答
394 浏览

asp.net-mvc-5 - MVC Ninject:如何从 MVC 区域项目添加 NinJect 绑定

我一直在使用这个博客示例:

http://blog.longle.net/2012/03/29/building-a-composite-mvc3-application-with-pluggable-areas/

我的解决方案中有一些概念。但是,我正在尝试找出一种仅在用户有权访问模块/区域时才将绑定添加到内核的好方法。

我已经阅读了一些关于 ServiceLocator 的内容,但我试图远离它。

我试图让事情正常工作的一件事是在模块的默认构造函数中注入用户构造函数。它正在工作,但它是一个黑客。

我正在使用的模式,您创建的每个模块项目都创建一个继承自 AreaRegistion 的类。每个模块项目构建时,相关文件都会复制到主 Web 项目的 Areas 文件夹中。然后在加载主项目时,使用反射来加载所有模块程序集。然后当调用AreaRegistration.RegisterAllAreas() 时,它会检测并加载所有具有继承AreaRegistration 的类的模块。

我想找到一种访问 Ninject 内核并在继承自 AreaRegistration 的模块类中添加绑定的好方法。我会想象启动代码以从 RegisterArea() 覆盖添加绑定。

我正在寻找有关如何在不求助于 ServiceLocator 的情况下执行此操作的任何建议。

任何想法将不胜感激。

0 投票
2 回答
473 浏览

java - 如何制作一个在运行时更新的“模块化”Java 程序?

我一直在玩弄创建一个程序的想法,该程序可以执行多个不同的任务,同时受到中央线程的监控。这个想法是创建一个核心程序,该程序将在运行时/运行时查找并加载单独的模块。这些模块将执行自己的任务,然后将完成的对象传递给另一个模块,该模块将处理诸如将成品上传到 Web 服务器或将结果数据组织到预定的文件/文件夹结构(见图基本概念)。 在此处输入图像描述 我以前从未真正使用过 Java 中的模块化设计。我过去的所有程序都是完全独立的,所以我几乎不知道从哪里开始。

我的目标是将外部库存储在核心程序中(例如,AWS SDK for Java,它本身可以将 .jar 拍摄到大约 18MB),以便在进行更新时几乎可以立即分发单独的模块,而不是必须重新分发整个 18MB+ 的独立程序来修复一个 1 行错误。此外,我希望能够在必要时更新单个模块,而不必重新启动整个程序,允许其他模块在更新一个模块时继续工作,减少整体停机时间,以便程序只需要一次完全关闭是对核心进行更新时。

我想知道的是,这可能吗(我假设是这样),如果是的话;我应该研究什么/我将如何进行设置?(我是在尝试重新发明轮子吗?如果是这样,我在哪里可以找到所说的轮子?)

我研究了使用 aServiceLoader并玩弄了这里的示例,但是我不确定如何使用它将一个模块指向另一个模块,或者它是否可以从核心检索库类,也不确定它是否可以执行“主动更新”提到。到目前为止,我所看到的是(在我的示例中)核心可以访问模块,但我不确定模块是否/如何访问核心。

不确定它是否与帖子相关,但我在 Eclipse 中完成了所有工作(如果有可用的 IDE 特定工具,值得一提)。

0 投票
1 回答
28 浏览

angularjs - 每个用户动态加载的功能

我正在构建一个相当复杂的 AngularJS 应用程序。它需要能够在每个用户的基础上轻松整合新功能。例如,应用程序已完成,6 个月后我需要在用户设置中为模式添加功能。此按钮应仅对这些用户可用。一个月后,需要更多功能等等。

我想知道最好的方法是什么。

我计划尝试手动引导角度。新功能将位于动态加载的独立模块中。每个用户都会有一个相似的登录屏幕。登录后会有一个 api 调用来获取该用户的角度模块,然后将被引导并加载角度。

我正在考虑的另一个选择是使用该$inject服务,但这需要将所有模块引导到主应用程序中。并且可能有无限数量的模块,这似乎不太可行。

任何建议将不胜感激!