问题标签 [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.
dry - 正交性是否与 DRY 原则成反比?
根据 The Pragmatic Programmer 一书“正交性与 DRY 原则密切相关”。我不确定我是否按照作者希望读者的方式理解它。所以我问上面的问题。
例如,您有 A 类和 B 类。这两个类都有相似的方法。使用DRY原理,我做了一个C类,然后把A类和B类的类似方法移到C类,把C类指定为A和B的父类,是不是就不是正交的了?
c# - 当您想在从接口继承的不同类之间进行选择时,如何不违反 OCP?
我有一个接口,可以说ISendOut
我从它继承了两个不同的类,例如 TransferViaSerialPort 和 TransferViaWirelessModule(我的意思是在这两个类中实现这个接口)。我如何设计我的软件,让用户能够(在 UI 中)SerialPort
在通过或WirelessModule
不违反 OCP发送他/她的数据的方法之间进行选择?因为如果我想要一个“Switch Case”或“If/Else”语句,我将违反 OCP。
javascript - 从子视图模型修改父级上可观察到的淘汰赛的模式
我设置了一个父子视图模型对象结构,需要从子节点更新父节点的 observable。我基本上提出了两种模式:
1]将父属性的引用传递给孩子并从孩子内部更新属性:
2]在父节点上创建子节点的select方法,并在本地引用父节点observable:
这些模式都没有让我兴奋不已。第一个将整个属性引用推送到子视图模型中,第二个定义了子范围之外的子函数。
关于如何以干净和可测试的方式在 javascript 中实现此操作,是否有人有任何其他模式建议?还是我或多或少只停留在这两个选项上?
model-view-controller - MVC:为什么控制器是视图的策略
这是 的定义Strategy Pattern
:
策略 - 定义一系列算法,封装每个算法,并使它们可互换。策略让算法独立于使用它的客户而变化。
因此,策略将功能分为两部分:一个不会改变,另一个可以在未来某个时间改变。
而且,在 MVC 中,他们说:
控制器是视图的策略
这意味着控制器是变化的,并且视图将来可能不会改变。
我还不太明白。我认为他们两个都可以在未来改变。
请为我解释为什么人们这么说。
php - PHP - 这是在类中正确使用异常处理错误吗?
我在这个主题上搜索了很多,并得到了很多好的(但不同的)结果。有些结果并不完全相关,最终似乎是一个偏好问题,但我感兴趣的是我是否遵循良好的设计原则。
如果这个问题太模糊,请随意删除它,但你能推荐我在哪里发布它吗?
此外,这只是一个示例。这里有很多事情我通常会做不同的事情,但为了简单起见,我这样做了。
代码很长,但您应该可以直接将其复制并粘贴到一个新的 PHP 文件中并在您的环境中运行它;无需设置。
具体问题
- 这是使用异常并在调用方处理它们的正确方法吗?
- 我什至应该为此使用例外吗?
- 我的骨架自定义异常是否正确?
代码
您可以在此处在单独的窗口中查看副本。我会把它贴在这里。保存它并在您的环境中运行它,它应该可以按原样工作,无需任何修改:
当心:前面的代码很长
c# - 对得墨忒耳原理的法则感到困惑
为了解释我的问题,让我向您展示 C# 的示例代码。
在示例中,如果我用ctor(IConstructorInfoSelector, Type) 构造TestClass 并调用GetTypeForConstructor,它将通过(A) 和(B) 行违反LoD(Demeter 法则)。
但是,如果我执行以下代码,该代码是否违反了 LoD?我认为,一方面,它不违反,因为 (C) 行的 testClass 对象在方法内初始化并调用 GetTypeForConstructor 方法,另一方面,它似乎违反了上述情况的原则。综上所述,如果一个返回对象被用来创建另一个对象,这个执行会被认为是违反LoD?
oop - 单一职责原则的例子是什么?
有人可以给我一个单一职责原则的例子吗?我试图理解在实践中,一个班级承担单一责任意味着什么,因为我担心我可能每天都会违反这条规则。
.net - 使用 DateTime.Ticks 而不是 DateTime 本身,这是一个好习惯吗?
可以DateTime.Ticks
代替DateTime
自己来实现DateTime
基于操作的操作吗?例如,将数据库列的类型从DATETIME
into更改BIGINT
,然后将123456789123456
值存储到其中而不是2012-06-02 14:26:08.727
?
我知道在这种情况下我们必须处理转换,但有几个优点。例如,存储的日期时间范围没有限制,我们也不必担心数据库支持的类型 {date, datetime, smalldate} 等。
实际上,我想在两个领域确保这种方法:
- 设计原则
- 性能问题
提前致谢。
oop - 高内聚如何帮助我们减少耦合?
承担方法M1
并M2
具有密切相关的职责
第一个例子:
如果
•M1
和M2
在类中定义A
(因此类A
是高度内聚的)
• 类B
用途A.M1
和类C
用途A.M2
然后
•A
与B
和C
类耦合
• 更改 will 的签名 M1
只需要更改 in B
,而不需要更改C
第二个例子:
如果
•M1
在类中定义A1
(因此B
与 耦合A1
)
•与M2
类一起定义A2
(因此C
与 耦合A2
)
然后
• 更改 will 的签名M1
只需要更改 in B
,而不需要更改C
a)据我了解,上一个示例中的类并不比第一个示例中的类更耦合!还是我错过了什么?
b)据我所知,第一个示例中的类比第二个示例中的类更松散耦合,前提是:
我们假设更改 的签名
M1
也需要我们更改 的签名M2
,但我不认为这种情况经常发生?!或者如果两者都
M1
对M2
相同类型的数据 T1 进行操作,那么将 T1 替换为 T2 将需要同时更改M1
和M2
?!或者,如果我们假设由于
M1
并且具有密切相关的责任,那么改变通常需要M2
改变的机会要大得多(即使不直接或间接调用)?!M1
M2
M1
M2
或者,如果我们假设由于
M1
并且具有密切相关的职责,那么某些类需要两者的M2
可能性要大得多(因此在单个类中具有and会减少耦合)?!M1
M2
M1
M2
M1
c) 定义and M2
within A
(而不是定义M1
withinA1
和M2
within )是否有任何其他原因A2
会减少耦合?
注意 - 我知道我们应该拥有高度内聚的模块,因为它更易于维护和可重用
谢谢
java - Servlet 是 Singleton 背后的设计原则是什么
servlet 容器“通常”创建一个 servlet 实例和同一实例的不同线程来服务多个请求。(我知道这可以使用已弃用的 SingleThreadModel 和其他功能进行更改,但这是通常的方式)。
我认为,这背后的简单原因是性能提升,因为创建线程比创建实例更好。但似乎这不是原因。另一方面,创建实例几乎没有优势,开发人员不必担心线程安全。
我试图了解这个关于线程安全权衡的决定的原因。