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

language-agnostic - 如何将数据验证与我的简单域对象 (POCO) 分开?

这个问题与语言无关,但我是 C# 人,所以我使用 POCO 一词来表示仅执行数据存储的对象,通常使用 getter 和 setter 字段。

我刚刚将我的域模型重新设计为超级骗子 POCO,并且对如何确保属性值在域中有意义存在一些担忧。

例如,服务的结束日期不应超过该服务所依据的合同的结束日期。但是,将检查放入 Service.EndDate 设置器似乎违反了 SOLID,更不用说随着需要完成的验证数量的增加,我的 POCO 类将变得混乱。

我有一些解决方案(将在答案中发布),但它们有其缺点,我想知道解决这个困境的一些最喜欢的方法是什么?

0 投票
4 回答
310 浏览

asp.net-mvc - 如何在 ASP.NET MVC 中强制执行关注点分离?

自 2007 年(12 月)的 Preview 1 以来,我一直在学习、使用和使用 ASP.NET MVC。自 2008 年以来,我一直是它的粉丝,我一直支持它。

然而,我不断听到并阅读“ASP.NET MVC 强制执行严格的关注点分离”,包括在 Rob Conery、Scott Hanselman、Phil Haack 和 Scott Guthrie 的 Professional ASP.NET MVC 1.0 中阅读它。

我不明白的是执法。如果我用动作来定义我的控制器怎么办?

并在视图(aspx 视图引擎)中做所有事情?(数据获取、业务逻辑、决策制定、渲染等)

它(ASP.NET MVC)如何强制我分离关注点?

我认为这是一种公然的夸大其词,它应该读作“建议分离关注点”。

你能说服我它强制执行吗?

0 投票
2 回答
481 浏览

c# - 显示松散耦合类和接口之间关系的好方法是什么?

我已经向我的团队介绍了 SOLID 原则,他们理解并且对使用这些原则感到兴奋。

我给了他们几个已经被重构以使用这些原则的项目。我看到的最大问题是他们是否很难看到项目中非常松散耦合的类之间的联系。即使我创建了一个类图,它也不会显示任何连接。我所指的一个特定项目也使用依赖注入和 XML 配置来实现。虽然这样做的目的是让他们更难找出正在使用的类。

直观地显示类之间的关系以及它们在项目中的使用方式的最佳方式是什么?!

编辑:2008/10/24 8:40 PM

根据 UML 注释,我尝试使用内置的 Visual Studio 类图来构建应用程序模型。我可以给出每个接口的描述,但仍然不确定它们是否明确连接。

0 投票
1 回答
231 浏览

asp.net - SoC 还是单片代码?

关注点分离 (SoC) 建议将您的应用程序分解为特定的功能单元,以便每个单元仅解决一个关注点的需求。

我有一个实践场景,其中 SoC 通常需要更多时间来处理用户请求。例如,假设我在社交媒体网站上工作。当用户接受来自另一个人的邀请时,我们通常会做一些如下的处理,例如。

  1. 邀请将被验证。(InvitationRepository 会这样做)
  2. 朋友将被添加到我的网络列表中。(FriendRepository 会这样做)
  3. 电子邮件将被跟踪并将电子邮件发送给朋友。(EmailRepository 会这样做)

在这种情况下,我们需要等到我们完成对数据库的三个请求(数据库位于某个地方),并且在比较其他使用单体代码在一个数据库调用中所有内容都存在的场景时,需要很长时间才能完成。

你能建议在这种情况下哪一个会好?

0 投票
1 回答
580 浏览

web-applications - Struts 2 模块化 Web 应用程序

我正在使用 Struts 2 Web 应用程序。它有很多模块和功能。我想根据客户要求启用或禁用(或删除)某些模块。但是在单个 WAR 文件部署下的 Struts 2 中,我怎样才能使其成为模块化?是否可以在部署时取出一些模块?

提前致谢。

0 投票
1 回答
1549 浏览

delphi - 如何为 Delphi 创建模块化插件

使用 Delphi 2010,我需要编写一个程序来支持模块或插件。虽然有点做作,但假设我有一个转换数据文件/文本文件的应用程序。它将支持 30 种输入格式和与输出相同的 30 种格式。第一个版本可能只会实现其中一些格式。我的挑战是我想要一个数据驱动的流程。

例如,假设我有一个 PARSE_FILE 例程。如果我的输入数据文件格式是“Format_A”,那么当我调用 PARSE_FILE 时,它应该知道使用 PARSE_FILE_Format_A,而不是其他 29 个不同版本的 PARSE_FILE 例程。

PARSE_FILE 只是一个例子。我可能会有 60 种不同的常用函数,LOAD_FILE、GET_DELIMITER、PARSE_FILE 等,但是对于 30 种不同格式中的每一种,这些函数中的每一种都会略有不同。如果我使用 FORMAT_A 加载文件,我可以使用什么技术,这 60 个不同的常用例程中的每一个都使用这 60 个例程的正确“版本”?

请记住,我从 5 种输入格式开始,稍后会添加其他格式,因此我需要一种集中定义此“映射”的方法,因此在我的代码中使用这些例程的任何地方,例程的正确版本都会即使我称其为通用版本,也可以使用。

0 投票
1 回答
391 浏览

php - Symfony 形式的关注点分离

我最近一直在尝试使用 Symfony 2 表单,这对于简单的表单非常有用。

但是 - 用于选择框或类似的东西 - 我经常想要表单中的关联实体列表。在几篇博文和 Symfony 文档中,他们提出了这样的建议……

由于我非常关注域驱动设计,尤其是关注点分离,我发现很难相信在 Symfony 中将关联实体绑定到自定义表单类型的唯一选择是在自定义表单中查询它表格类型。

在我看来,这违反了 SoC,因为不应该查询表单。这样,表单总是采用相同的实体,但不是表单应该选择显示哪些实体......

要求表单构建器构建表单的控制器应该将关联的对象注入到自定义表单类型构造函数中......

有谁知道如何做到这一点?

0 投票
2 回答
1548 浏览

ruby - Sinatra 中的模块化是什么意思?

我想知道是否有人可以简化对 Sinatra 应用程序中 Modular 的解释。我看到 sinatra 中有经典设置和模块化设置,但是通过阅读文档,我不太了解 Modular 在做什么。

如果可能的话,我真的很想在其基本层面上进行解释,以及为什么将其放入profile.rb会改变应用程序的设置(如果是这样的话)。请记住,我是一个新手,所以简单而透彻的解释是最好的!

0 投票
2 回答
3274 浏览

javascript - 如何编写简单、可扩展、模块化的 Javascript

我需要一种机制,人们可以用他们自己的模块来扩展我的基本代码——但我正在努力想出一个简单的机制来做到这一点。

示例:用户可以扩展名为“test”的函数。每个用户模块都在原始模块之后加载 - 因此每个用户模块都需要在最后一个模块上构建(它们加载的顺序无关紧要,或者可以通过命名来控制)

我开始玩这样的东西

然后,当调用 'test' 时,它将运行每个人的代码(假设没有人忘记他们的回调!!)

这可行,但它依赖于每个模块声明它自己的唯一“回调”变量(ltest,ltest2) - 如果有人使用相同的变量,我们将得到一个“超出调用堆栈”,因为这些变量在范围内是全局的。 .

任何人都可以提出一个更聪明/更好的系统 - 或者指出一些相同的例子吗?

有很多关于继承的材料,但我不想创造新的东西来扩展旧的东西——我只想扩展旧的东西!!

ps 从模块模式中获取匿名函数的东西 - 我得到了这个

这可能是我的问题最简单的解决方案 - 但不一定是最好的系统(因为它取决于作者记得回调代码 - 一个狡猾的模块会破坏一切)

0 投票
0 回答
401 浏览

c++ - 使用插件之间的通信开发模块化 C++ 程序

我试图弄清楚一些 C++ 编程和 OO 概念。

我想要的是我想要一个核心 exe,它扫描文件夹中的 dll,然后加载它的启动功能并启动插件。这已经开发并且运行良好。

我现在处于一个前所未有的位置,而且我是 C++ 和 winapi 编程的新手。

我想要做的只是在插件文件夹中放置一个 dll,核心添加的功能。

这现在可以正常工作,但是插件像单独的 exe 一样运行。现在我想在插件之间进行通信(如果它们可用)。

我尝试将 dll 设置为对象工厂,但后来我在我的代码中使用这个对象,期望 dll 在那里。

有没有人知道我可以使用任何好的设计模式,而无需反复试验和重新发明轮子?谷歌没有向我展示我搜索的内容,而且我对此太陌生,不知道任何好的知识库。