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

asp.net-mvc - 如何管理多个(不同的)视图层

我有一个网站(ASP.NET MVC),我想将其扩展到另一个类似的主题(如 stackoverflow-serverfault-superuser)。

两个网站的数据库层和控制器层是相同的。不同之处仅在于视图层,仅在于一些细节:徽标、母版页和一些资源文件(部分)和 CSS。

处理这种情况的最佳方法是什么?Jeff 和他的团队是如何做到的?

我的理想目标是拥有一个解决方案(Visual Studio 解决方案)、一个带有控制器和模型的项目,以及 n 个不同的项目:每个项目都适用于每个视图。(添加此行以澄清

我只需将这两个解决方案(使用 SVN 或 Mercurial)分支,然后在发布时合并?

多谢你们!

0 投票
8 回答
587 浏览

c++ - 克服“稍后修复”的坏习惯

当我从头开始编写代码时,我养成了在一个函数中快速编写所有内容的坏习惯,一直在想“我以后会使其更加模块化”。然后当后来出现时,我有一个工作产品,任何修复它的尝试都意味着创建函数并且必须弄清楚我需要通过什么。

它变得最糟糕,因为当您的项目几乎完成时重新设计类变得非常困难。例如,我通常在开始编写代码之前做一些计划,然后当我的项目完成后,我意识到我可以让类更加模块化和/或我可以使用继承。基本上,我认为我没有做足够的计划,而且我没有得到超过一级的抽象。

所以最后,我被一个具有大型 main 函数、一个类和一些辅助函数的程序所困。不用说,它不是很可重用。

有没有人遇到过同样的问题并且有什么技巧可以解决这个问题?我想到的一件事是用伪代码编写主函数(没有太多细节,但足以看到他们需要什么对象和函数)。本质上是一种自上而下的方法。

这是一个好主意吗?还有其他建议吗?

0 投票
1 回答
89 浏览

frameworks - 我是否必须为每个不同的模块设计单独的数据库和服务器运行时?

在设计一个新的基于 J2EE 的企业框架时,我是否必须为单独的业务模块必须使用不同的数据库并且必须在不同的应用服务器实例上运行的情况做好准备?

从另一个角度来看:有没有人经历过每个模块对不同数据库和服务器的实际需求?如果是,那家企业的规模是多少?

因为(据我所知)这使事情变得更加复杂,并且使用该框架的先前版本(以及在较小的银行中),上述情况从未发生过。

感谢您的回复!

0 投票
3 回答
678 浏览

python - 如何保护我的 Python 代码库,让访客看不到某些模块,但它仍然可以工作?

我们正在 Python 中启动一个新项目,其中包含一些我们希望保密的专有算法和敏感逻辑。我们还将有一些局外人(选定的公众成员)来编写代码。我们不能授予外部人员访问小型私有代码的权限,但我们希望公共版本能够为他们提供足够好的工作。

假设我们的项目 Foo 有一个模块 ,bar具有一个功能,get_sauce()。真正发生的事情get_sauce()是秘密的,但我们想要一个公共版本的get_sauce()返回一个可接受的,尽管不正确的结果。

我们还运行我们自己的 Subversion 服务器,因此我们可以完全控制谁可以访问什么。

符号链接

我的第一个想法是符号链接——而不是bar.py,只提供bar_public.py给所有人和bar_private.py内部开发人员。不幸的是,创建符号链接是一项繁琐的手动工作——尤其是当这些私有模块确实有大约两打时。

更重要的是,它使 Subversion authz 文件的管理变得困难,因为对于我们想要保护的每个模块,都必须在服务器上添加一个异常。有人可能会忘记这样做并且不小心签入了秘密......然后模块在 repo 中,我们必须在没有它的情况下重建存储库,并希望外人在此期间没有下载它。

多个存储库

下一个想法是拥有两个存储库:

这个想法是只有内部开发人员才能同时签出private/public/. 内部开发人员会设置他们的PYTHONPATH=private/trunk:public/trunk,但其他人只会设置PYTHONPATH=public/trunk。那么,内部人员和外部人员都from foo import bar可以获得正确的模块,对吗?

让我们试试这个:

我不是 Python 专家,但似乎 Python 已经决定了模块foo和与之相关的搜索:

甚至删除都没有foo帮助:

你能给我一个更好的解决方案或建议吗?

0 投票
10 回答
41840 浏览

java - 如何让代码模块化?

我有一些 Java 程序,现在我想知道它是否是模块化的,如果它是模块化的,那么到什么程度,因为模块化永远不能是二进制项,即 0 或 1。我如何确定特定代码是模块化的到这个程度。我想知道如何使代码更加模块化?

0 投票
2 回答
4802 浏览

communication - EventAggregator vs CompositeCommand

我通过 Prism 指导工作,并认为我掌握了他们的大多数通信工具。

命令非常简单,因此很明显,DelegateCommand 将仅用于将 View 与其 Model 连接起来。

当涉及到跨模块通信时,特别是何时使用 EventAggregation 而不是复合命令时,这有点不太清楚。

实际效果是一样的,例如

  • 您发布一个事件 -> 所有订阅者都会收到通知并执行代码作为响应
  • 您执行一个复合命令->所有已注册的命令都被执行并附带它们的代码

两者都按照“触发并忘记”的方式工作,即他们不关心触发事件/执行命令后订阅者的任何响应。

尽管我知道两者的实现(在引擎盖下)非常不同,但我很难看到使用上的实际差异。

那么我们是否应该考虑一下它的实际含义——事件?那是当事情发生(事件发生)时吗?用户没有直接请求的东西,比如“网络请求已完成”?

指挥部呢?这是否意味着用户点击了某些东西,从而向我们的应用程序发出命令,直接请求服务?

是这样吗?或者是否有其他方法可以确定何时使用其中一种通信工具而不是另一种。该指南虽然是我读过的最好的文档之一,但没有给出具体解释。

所以我希望参与/使用 Prism 的人可以帮助阐明这一点。

0 投票
2 回答
1247 浏览

wpf - 在 Prism aka CompositeWpf 中将模块与应用程序集成

来自MSDN

您的模块中的大多数视图很可能不必直接显示,而只有在用户执行某些操作后才能显示。根据应用程序的风格,您可能希望为用户使用菜单、工具栏或其他导航策略来访问视图。在模块的初始化方法中,还可以注册到应用程序的导航结构中。在导航结构的事件处理程序中(即,当用户单击菜单项时),您可以使用视图注入技术将视图添加到适当的区域。

我有一个类似的场景,我正在使用 RegisterViewWithRegion 在模块的初始化方法中将视图添加到区域。我很想用一个菜单(这是一个不同的模块)显示一个基于视图的用户交互。

如何在不破坏 Prism 中模块的解耦行为的情况下实现此行为?

是否可以激活/显示已添加到区域的视图,例如来自 ModuleB 的 ModuleA?

0 投票
1 回答
1722 浏览

ruby-on-rails - 模块化 Rails 应用程序

我正在寻找一种模块化 Rails 应用程序的方法。正如我所见,没有内置的方法可以实现它。我发现了不同的插件/核心黑客,但我对它们的工作方式和成熟度感到不信任。

你有这方面的经验吗?

到目前为止,我发现了这个:

0 投票
2 回答
472 浏览

model-view-controller - web2py:如何在调用控制器之前执行代码?

在 web2py 中,有没有办法在调用所有控制器之前执行一段通用代码?

例如,我想添加一些代码,将客户端 IP 记录到请求日志中以启用分析。我可以简单地使我所有控制器的第一行类似于response = RequestBase(request)但我很想知道这是否是已经通过其他一些机制解决的问题。

0 投票
1 回答
219 浏览

linq - 对其他 DataContext 中的实体的 LINQ-to-SQL 引用

在我的数据库设计中,我倾向于使用表的“集群”。这些集群通常会支持一个应用程序或一组功能紧密相关的应用程序。通常,这些集群还通过相对较少数量的外键相互关联;这有助于业务中原本独立的应用程序相互集成。

因此,例如:假设我有应用程序“Foo”、“Bar”和“Baz”,每个应用程序都有几个表。这是表及其外键引用的列表:

  • FooTableOne
  • FooTableTwo -> FooTableOne
  • BarTableOne -> FooTableTwo
  • BarTableTwo -> BarTableone
  • BazTableOne
  • BazTableTwo -> FooTableTwo,BazTableOne

目前,我正在使用 LINQ-to-SQL 来访问这些表。我为每个集群(Foo、Bar 和 Baz)都有一个单独的项目,并且每个项目都有一个用于集群中所有表的 .dbml。这里的想法是,使用集群的每个(一个或多个)应用程序都可以导入一个包含它需要的 LINQ 类的共享库。

这可能是一个好主意,也可能不是一个好主意;看起来陪审团 没有 出来。我真正想知道的是,我是否可以拥有由另一个集群中的类表示的集群之间的引用,即使它们存在于不同的上下文类中。(更具体地说,如何在 Visual Studio 中创建这种关系)。

回到这个例子,我想要:

  • 富项目
    • Foo.dbml
    • FooDataContext
    • FooTableOne
      • FooTableOne.FooTableTwos
    • FooTableTwo
      • FooTableTwo.FooTableOne
      • FooTableTwo.BarTableOnes(这个没那么重要)
      • FooTableTwo.BazTableTwos(这个没那么重要)
  • 项目栏
    • 条形图.dbml
    • 条形数据上下文
    • 吧台一号
      • BarTableOne.FooTableTwo
      • BarTableOne.BarTableTwos
    • 酒吧桌二
      • BarTableTwo.BarTableOne
  • 巴兹计划
    • Baz.dbml
    • BazDataContext
    • BazTableOne
      • BazTableOne.BazTableTwos
    • BazTableTwo
      • BazTableTwo.FooTableTwo
      • BazTableTwo.BazTableOne

在门外,对上下文外实体的所有引用都是简单的 ID(整数),而不是对象,而且对上下文外实体的集合根本不存在。我知道我可以将自己的方法添加到这些类中以进行适当的查找(给定上下文的实例),但我想让事情变得更加精简和一致。

请注意,通过上下文/集群的这种分离,我获得了应用程序之间的模块化。因此,例如,Baz 应用程序只需导入 Baz 和 Foo 上下文(因为 Baz 依赖于 Foo),而不是 Bar。(这假设我在 Foo 中没有 Bar 实体的集合,这对我来说很好)。这是一件好事,但并不重要:如果 LINQ/VS 不能让这变得容易,那么我将考虑放弃模块化并使用单一上下文。