问题标签 [design-principles]

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 投票
1 回答
198 浏览

dry - 正交性是否与 DRY 原则成反比?

根据 The Pragmatic Programmer 一书“正交性与 DRY 原则密切相关”。我不确定我是否按照作者希望读者的方式理解它。所以我问上面的问题。

例如,您有 A 类和 B 类。这两个类都有相似的方法。使用DRY原理,我做了一个C类,然后把A类和B类的类似方法移到C类,把C类指定为A和B的父类,是不是就不是正交的了?

0 投票
4 回答
609 浏览

c# - 当您想在从接口继承的不同类之间进行选择时,如何不违反 OCP?

我有一个接口,可以说ISendOut我从它继承了两个不同的类,例如 TransferViaSerialPort 和 TransferViaWirelessModule(我的意思是在这两个类中实现这个接口)。我如何设计我的软件,让用户能够(在 UI 中)SerialPort在通过或WirelessModule不违反 OCP发送他/她的数据的方法之间进行选择?因为如果我想要一个“Switch Case”或“If/Else”语句,我将违反 OCP。

0 投票
1 回答
7373 浏览

javascript - 从子视图模型修改父级上可观察到的淘汰赛的模式

我设置了一个父子视图模型对象结构,需要从子节点更新父节点的 observable。我基本上提出了两种模式:

1]将父属性的引用传递给孩子并从孩子内部更新属性:

2]在父节点上创建子节点的select方法,并在本地引用父节点observable:

这些模式都没有让我兴奋不已。第一个将整个属性引用推送到子视图模型中,第二个定义了子范围之外的子函数。

关于如何以干净和可测试的方式在 javascript 中实现此操作,是否有人有任何其他模式建议?还是我或多或少只停留在这两个选项上?

0 投票
1 回答
4889 浏览

model-view-controller - MVC:为什么控制器是视图的策略

这是 的定义Strategy Pattern

策略 - 定义一系列算法,封装每个算法,并使它们可互换。策略让算法独立于使用它的客户而变化。

因此,策略将功能分为两部分:一个不会改变,另一个可以在未来某个时间改变。

而且,在 MVC 中,他们说:

控制器是视图的策略

这意味着控制器是变化的,并且视图将来可能不会改变。

我还不太明白。我认为他们两个都可以在未来改变。

请为我解释为什么人们这么说。

0 投票
1 回答
408 浏览

php - PHP - 这是在类中正确使用异常处理错误吗?

我在这个主题上搜索了很多,并得到了很多好的(但不同的)结果。有些结果并不完全相关,最终似乎是一个偏好问题,但我感兴趣的是我是否遵循良好的设计原则

如果这个问题太模糊,请随意删除它,但你能推荐我在哪里发布它吗?

此外,这只是一个示例。这里有很多事情我通常会做不同的事情,但为了简单起见,我这样做了。

代码很长,但您应该可以直接将其复制并粘贴到一个新的 PHP 文件中并在您的环境中运行它;无需设置。

具体问题

  • 这是使用异常并在调用方处理它们的正确方法吗?
  • 我什至应该为此使用例外吗?
  • 我的骨架自定义异常是否正确?

代码

您可以在此处在单独的窗口中查看副本。我会把它贴在这里。保存它并在您的环境中运行它,它应该可以按原样工作,无需任何修改:

当心:前面的代码很长

0 投票
1 回答
842 浏览

c# - 对得墨忒耳原理的法则感到困惑

为了解释我的问题,让我向您展示 C# 的示例代码。

在示例中,如果我用ctor(IConstructorInfoSelector, Type) 构造TestClass 并调用GetTypeForConstructor,它将通过(A) 和(B) 行违反LoD(Demeter 法则)。

但是,如果我执行以下代码,该代码是否违反了 LoD?我认为,一方面,它不违反,因为 (C) 行的 testClass 对象在方法内初始化并调用 GetTypeForConstructor 方法,另一方面,它似乎违反了上述情况的原则。综上所述,如果一个返回对象被用来创建另一个对象,这个执行会被认为是违反LoD?

0 投票
3 回答
35268 浏览

oop - 单一职责原则的例子是什么?

有人可以给我一个单一职责原则的例子吗?我试图理解在实践中,一个班级承担单一责任意味着什么,因为我担心我可能每天都会违反这条规则。

0 投票
1 回答
161 浏览

.net - 使用 DateTime.Ticks 而不是 DateTime 本身,这是一个好习惯吗?

可能重复:
我应该将 DateTimes 作为 Long(Ticks)存储在数据库中吗?

可以DateTime.Ticks代替DateTime自己来实现DateTime基于操作的操作吗?例如,将数据库列的类型从DATETIMEinto更改BIGINT,然后将123456789123456值存储到其中而不是2012-06-02 14:26:08.727?

我知道在这种情况下我们必须处理转换,但有几个优点。例如,存储的日期时间范围没有限制,我们也不必担心数据库支持的类型 {date, datetime, smalldate} 等。

实际上,我想在两个领域确保这种方法:

  1. 设计原则
  2. 性能问题

提前致谢。

0 投票
1 回答
809 浏览

oop - 高内聚如何帮助我们减少耦合?

承担方法M1M2 具有密切相关的职责

第一个例子:

如果

M1M2在类中定义A(因此类A是高度内聚的)

• 类B用途A.M1和类C用途A.M2

然后

ABC类耦合

• 更改 will 的签名 M1只需要更改 in B,而不需要更改C

第二个例子:

如果

M1在类中定义A1(因此B与 耦合A1

•与M2类一起定义A2(因此C与 耦合A2

然后

• 更改 will 的签名M1只需要更改 in B,而不需要更改C

a)据我了解,上一个示例中的类并不比第一个示例中的类更耦合!还是我错过了什么?

b)据我所知,第一个示例中的类比第二个示例中的类更松散耦合,前提是:

  • 我们假设更改 的签名M1也需要我们更改 的签名M2,但我不认为这种情况经常发生?!

  • 或者如果两者都M1M2相同类型的数据 T1 进行操作,那么将 T1 替换为 T2 将需要同时更改M1M2?!

  • 或者,如果我们假设由于M1并且具有密切相关的责任,那么改变通常需要M2改变的机会要大得多(即使不直接或间接调用)?!M1M2M1M2

  • 或者,如果我们假设由于M1并且具有密切相关的职责,那么某些类需要两者的M2可能性要大得多(因此在单个类中具有and会减少耦合)?!M1M2M1M2

M1c) 定义and M2within A(而不是定义M1withinA1M2within )是否有任何其他原因A2会减少耦合?

注意 - 我知道我们应该拥有高度内聚的模块,因为它更易于维护和可重用

谢谢

0 投票
2 回答
344 浏览

java - Servlet 是 Singleton 背后的设计原则是什么

可能重复:
为什么不推荐使用 (javax.servlet.)SingleThreadModel?

servlet 容器“通常”创建一个 servlet 实例和同一实例的不同线程来服务多个请求。(我知道这可以使用已弃用的 SingleThreadModel 和其他功能进行更改,但这是通常的方式)。

我认为,这背后的简单原因是性能提升,因为创建线程比创建实例更好。但似乎这不是原因。另一方面,创建实例几乎没有优势,开发人员不必担心线程安全。

我试图了解这个关于线程安全权衡的决定的原因。