问题标签 [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 投票
2 回答
827 浏览

angularjs - 企业架构指导

我们公司希望在 .net 堆栈上对整个企业的应用程序进行标准化。我们正在构建企业风格指南。我们有一位解决方案架构师帮助我们设计企业架构。他的建议包括企业服务层和具有可重用组件的企业 UI 层。

我完全同意拥有一个企业服务层,大多数(如果不是所有)网络应用程序都将使用它来获取数据。但是,我不相信企业 UI 层。

我们现有的许多应用程序都显示相同的信息,例如订单详细信息。他的论点是,我们公司已经花钱为每个应用程序多次构建订单详细信息 UI,而它显示已构建一次并在其他应用程序中重用。他希望在 angular 和 bootstrap 上构建可重用的 UI 组件,这些组件可以放入未来在同一堆栈上构建或重写的应用程序中。

我喜欢拥有可重用组件的想法,但我认为它应该仅限于结构和样式,而不包括 UI 框架。添加 UI 框架会增加每个控件的复杂性,而且成本也会更高,我们实际上是在构建一个 cms。除此之外,我觉得我们会被 angular 锁定,这不一定是坏事,但是如果像 react 这样的另一个框架更适合未来的应用程序呢?

我的问题是 -
1. 是否有人在具有类似架构的环境中构建或工作?你的经历是什么?
2. 您认为这种架构的优缺点是什么?

在此先感谢您的帮助。

0 投票
1 回答
125 浏览

javascript - 将依赖注入限制为模块内依赖

tl;博士:

有没有办法限制/lint Angular JS 依赖注入到只存在于模块中的组件?

我继承了一个 Angular JS 代码库,它显然是意大利面条代码。此外,即使应用程序很大,大多数应用程序功能也会在三个或四个模块之间共享。

由于 Angular 没有在模块级别限制命名空间,因此团队实际上忽略了模块边界。这本身不是问题(Angular 允许)。问题是应用程序只有基本结构,组件很少可重用,难以扩展,我什至不会考虑替换模块。

现在,客户要求我们将应用程序扩展到可以轻松替换某些模块的地步,我需要开发一个解决方案。

我想知道策略,我想通过引入基本上实现外观模式接口模式的模块到模块接口来重构应用程序。

换句话说,我想要对外界隐藏模块实现的服务,以便模块不知道数据的去向和来自哪里。同时我想使用接口模式来确保传递给模块的数据满足一定的期望。

我想让过渡过程更容易,并确保每个人都遵守规则。Angular 无法强制执行依赖注入的任何规则,并且eslint 的 Angular 插件不包含这些方面的任何内容。有没有人试过这个?我用谷歌搜索但什么也没找到。

0 投票
1 回答
583 浏览

c# - 编写模块化程序

我想让我的程序“模块化”,我想知道我是否采取了正确的方法。

我的意思是我希望在它自己的 c# 文件中包含一些可重用的“处理”内容。通过这种方式,我可以简单地在项目之间复制文件,以便能够重用我的代码。由于这可能没有意义,让我用一个例子来解释。

程序.cs

B类.cs

现在,这工作正常,我得到了我期望的输出,但感觉不对,我猜?除了我的直觉之外,我还收到了警告(正如我所料),因为该BClass对象未使用。最终,我的问题是使程序模块化的最佳方法是什么?使用类感觉不对,因为我最终引用了一个永远不会使用的对象。也许我使用错误的类?

0 投票
0 回答
65 浏览

java - java中的泛型和服务

我的应用程序使用 ServiceLoader,我有两种类型的服务:算法和导出器。编码 :

我有另一个类,Executor,它将算法和导出器“连接”在一起:

团队成员为多种类型的事物独立编码算法和导出器。他们把它放在一个罐子里,注册算法或导出器的服务提供者,应用程序的核心在于组合这些模块。

我写了那个小测试:

但我预见到了未来的问题。由于加载器不知道算法或导出器的具体类型,我如何确定两者的组合是兼容的?或者有没有办法根据算法/导出的工作类型来过滤服务加载器中的服务?谢谢

编辑:为了更清楚:假设有人编写了一个模块算法,另一个编写了一个导出器。它们将在 ServiceLoader 中以相同的方式加载。有没有办法区分它们?

0 投票
0 回答
346 浏览

java - 具有分离的前端和后端的 angularJS 应用程序的站点地图生成

我有一个具有独立前端和后端的应用程序。前端是用 angularJS 制作的,后端是用 Java 制作的。

我的应用程序非常频繁地生成动态数据,我想将 SEO 引入我的应用程序,因为我想创建站点地图。

因为我的 angularJS 应用程序是单页应用程序。我面临如何创建动态站点地图的问题,该站点地图会在添加新页面/数据后立即更新。就像在添加新问题后立即更新站点地图的stackoverflow。

我认为的一种解决方案是在后端创建一个站点地图并创建一个返回站点地图的 api 调用。我创建了一个调用该 api 的 cron 作业,并获取了一个更新的站点地图,我将它放在我的服务器上,以便谷歌查看该文件。

我想知道我的方法是否正确,以及是否有其他更好的方法来解决我的问题。谢谢你。

0 投票
0 回答
108 浏览

php - 从多个文件创建一个 php 类

我想从不同的php文件中的函数伪造一个类。这样的事情可能吗?

目标是创建一个模块化类,然后可用于升级现有系统的管理界面。

特征可能是答案。我怎样才能动态地寻找它们?我知道他们会在哪里找到,但就是这样。

现在我跳回绘图板,get_declared_traits() 可能会为我解决它。

0 投票
3 回答
9093 浏览

laravel - 使用 Laravel / PHP 创建像 Wordpress 这样的基于插件的系统

这个问题困扰了我很长一段时间,我想创建一个 cms,一个更具体的学校管理系统,对我来说最重要的是使这个系统插件基于管理员可以下载的方式并直接通过他们的管理面板安装插件,就像 wordpress 一样。

现在我已经阅读了关于 wordpress HooksActionsFilters的内容,老实说,我可以说我只是对它们的功能有点熟悉,但是要将相同的功能应用于Laravel 应用程序......,这有点难以想象出去,至少对我来说。

我也搜索过这个问题,发现几乎每个人都在建议包,但是虽然包对于其他想要使用包功能的开发人员来说非常有用,但它们不能被不熟悉的用户轻松安装编程语言,这正是我在我的应用程序中想要的。

现在我的想法到目前为止,就像在Wordpress 操作过滤器中一样,几乎所有想要在 Wordpress 主题文件中使用的东西(使那段代码灵活地添加插件功能)都应该被称为函数,并调用它Wordpress do_action() 的函数是一种必经之路,这当然是有道理的。

这样,插件开发人员可以在他们的文件中调用 add_action() / add_filter() 并将他们的插件放入应用程序的流程中。所以...

基本上我在这里问的是:

  • 如何将此类功能应用于 laravel 应用程序?
  • 有没有比通过 do_action() 之类的函数调用所有内容更简单的方法?
  • 我应该编写某种文件管理模块来下载和更新插件吗?

再说一次,我必须说我对实现这种功能的 wordpress 方法不是很熟悉,所以我上面提到的一些描述可能是错误的,但是如果可以的话,我很感激关于这个主题的任何澄清。

提前感谢您的任何见解。

*PS 我试图尽可能地清楚这个问题,而且我没有为我正在开发的系统寻找任何特定的方法。我想知道实现这种功能的常用/最佳方法(如果有最好的方法),最好是在 Laravel 中,但仍然非常感谢通用算法。

我知道很多人有同样的问题并且正在解决同样的问题,所以如果你只提供一个有用的文章的链接,那就太好了。*

0 投票
1 回答
29 浏览

javascript - 从 DOM 中读取大量元素

我知道 JS 基础知识,但我想更进一步。

我想在很多元素的 JS 的帮助下更改 CSS。问题是我知道选择元素的唯一方法是

所以我稍后可以通过它的名称引用该元素并通过以下方式更改其样式:

这没关系,但是当我已经有 10 个元素时,我觉得这样做效率很低。

所以我的问题是,有没有更好的方法来更有效地动态更改 CSS,所以我的代码开头看起来不像这样:

还是有这么多变量是正常的?

我希望我的问题能被理解。

PS:

我刚开始学习模块化 JavaScript!这对我的问题有什么帮助吗?

0 投票
2 回答
778 浏览

javascript - Webpack 在 JS 文件中抛出一个奇怪的语法错误

我的 JS 文件有一个简单的文件结构:

我的 main.js 文件如下所示:

forms.js 文件如下所示:

这会引发以下错误:

它给出了关于定义 test() 方法的行的语法错误。我已经添加了 babel-loader 并且在 main.js 文件中,ES6 代码被正确地转译和执行。

我的 webpack.config.js 文件如下所示:

babel-loader 不能在 forms.js 文件上正确工作吗?我没有在配置文件或任何内容中排除该文件或其文件夹,那么为什么会出现语法错误?我知道这是有效的 JS,因为我已经在另一个项目中编写了它并且它运行良好。

顺便说一句,import在 main.js 文件中也不起作用,而其他 ES6 功能是否起作用?这和这个有关系吗?

0 投票
1 回答
49 浏览

npm - 模块化跨项目设计/创建可重复使用的可扩展基础

语境:

我们正在创建一个由多个应用程序门户组成的新解决方案(因为没有更好的术语),每个门户都需要利用一个基础项目,该基础项目已经包含我使用的一些专有代码,以及与此相关的任何新功能到那个门户。我们当前的应用程序还有很多不足之处,并且随着我们重新开始,我们希望以正确的方式进行。(因此我想稍微掩饰一下我的想法)

在此处输入图像描述

在此处输入图像描述

我想了一些可能的方法来解决这个问题。每个都有它的优点和缺点。

1. GIT Fork A 基础项目:

这似乎是最直接的方式。拥有一个 PortalCore 项目,然后让每个项目以仅下游的方式对其进行分叉。

  • 缺点:如果基础发生变化,我们需要手动更新所有依赖项目。
  • Pro:最初更容易实施,我相信会减少一些其他更“费力”的任务。(例如,单个构建文件将随我们的构建要求随每个新门户一起传播。)

流程将是:

Fork PortalCore > Core 将通过 GIT master 更新保持最新

2.基础项目NPM包:

这似乎是一条理想的路线,因为每次部署时,我们的基础包/项目的最新版本都将随每个门户一起安装。

  • 缺点:根据我的研究,我们似乎无法npm在 npm 文件夹之外安装软件包(这与我的问题有关)。如果我们希望它位于项目根目录中,我们需要通过其他方式共享构建文件。
  • Pro:更新会随着构建过程自动推出

流程将是:

新项目 > 添加 Portal Core npm > 制作自定义构建任务,或从某个中央仓库获取 > 将通过 npm install > Gulp Build 保持最新

3.以上结合

有一个仅包含我们的基本npm模块的 git 项目,并构建配置。然后,构建可以处理诸如将文件移动到正确位置(例如 node_models -> root)之类的事情

流程将是:

Fork PortalCore > Core 将通过npminstall > Gulp Build保持最新


问题:

  1. 有没有办法让一个npm包(或另一个包管理器)将文件安装到特定位置?(我已经检查了npm论坛,这似乎是一个死胡同。但我想我会在这里碰碰运气)
  2. 我们是在对它进行弗兰肯斯坦吗?我们不想创造一个新的怪物。这种逻辑是否有意义 ITO 创建的东西在设计上应该是模块化的,但更容易维护。大男孩是怎么做到的……如果他们这样做了?