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

c - C(或一般的过程编程)的设计原则、最佳实践和设计模式?

在设计 C 项目时,是否有任何已知的设计原则、最佳实践和设计模式可以遵循?还是一般程序(命令式)编程的有用设计原则?

(我是“面向对象一代”的孩子,必须第一次设计一个大型 C 项目)

0 投票
2 回答
993 浏览

wpf - 使用 WPF + NHibernate + IoC 的 MVC 模式

我正在寻找以模型-视图-控制器样式与 WPF 和 NHibernate 一起使用的模式和原则。

0 投票
1 回答
1832 浏览

principles - SRP 和“变革轴”?

我正在阅读Bob Martin 的 OOD 原则,特别是 SRP 文本,我非常了解它所说的精神,但我不太理解链接的第 2 页(本书第 150 页)中的特定措辞):

我转述:

将这两个职责分成不同的类很重要,因为每个职责都是变化的轴

这里所说的“变化轴”究竟是什么意思?

0 投票
3 回答
293 浏览

unit-testing - 如何正确创建功能、测试、故事并将其分解

我试图掌握整个 TDD 方法,因此,我真的不知道如何将其作为一个简洁的问题提出,所以这里是冗长的版本。我似乎正在经历保龄球 (Martin)、金钱 (Feathers) 和其他类似游戏/简单示例与功能齐全的企业应用程序之间的差距。

我试图弄清楚我是否遗漏了诸如功能概念之类的东西,据我所知,它可以增加业务价值,或者在进行 TDD 时如何正确分离关注点,以及每个关注点如何应用于另一个。如果对特性的定义是硬性规则,那么日志记录和错误报告之类的东西就不是特性。这是否意味着 TDD 不提供记录和通知的方法?

不想挑起任何战争,我很确定情况并非如此,所以我告诉自己,“商业价值”必须将中间应用程序从客户的商业价值转变为企业(应用程序的创建者)的商业价值。

所以我然后尝试像这个常见的例子一样切换它来自:作为一个数学白痴当我输入 2 时,按 add,输入 2,然后按 = 我要返回 4。

致:作为监控系统的系统分析师当用户输入导致未处理错误的函数时,我想要应用程序的当前状态、抛出的异常和堆栈跟踪进入日志,并向系统分析师分发列表发送电子邮件.

然后:作为业务分析师,确保所有客户的订单都得到处理当用户提交电子订单并且路由或会计信息未验证时,我希望将无效的会计和路由信息输入日志并通过电子邮件与附加的订单文件一起发送到业务分析师用户组。除非问题是由于网络问题而无法访问数据库以查找客户信息 在日志中输入“由于网络问题而无法访问数据库以查找客户信息”并将包含错误消息的电子邮件发送到系统分析师分发列表。

然后它开始扩展到我认为完全不能接受的东西:作为电子订单完成检查收到订单时,我想检查 x12 文件是否已翻译成平面文件,如果验证或翻译日志失败并通过电子邮件发送错误,则提取订单信息和状态并将其加载到平面数据库文件被发送到队列到 as400 并且状态被更新到数据库 as400 发送确认他们收到订单并且状态被更新到数据库 as400 发送平面文件确认并且状态被更新到数据库确认被转换为 x12 并且状态被更新到数据库 x12 确认被适当地路由并且状态被更新到数据库 确认被发送到如果 x12 包含无效数据,则将状态更新到数据库中可能的错误场景。

即使您将每个功能分解为自己的“功能”,您仍然会遇到日志记录问题,通知系统分析师应用程序引发异常或发生网络错误或找不到数据库等或业务组无法识别帐号的订单是遇到等。将其中任何一个添加到类中,作为方法、属性等似乎违反了单一责任原则。大约在那个时候事情开始旋转,我头晕,呼吸急促和心悸

因此,由于这对我来说非常混乱,以至于我什至不知道如何将其作为一个清晰的问题提出来,所以我将尝试这样总结。

你如何确定何时/何地以及如何分解这些东西并将它们分开?很容易说将它们分解成提供商业价值的最小部分,但是当你不能在没有许多其他部分的情况下拥有一个部分时,“真正”的答案是什么?所有这些都不适合一个粘性。

我愿意接受包括更多书籍、教程、视频在内的答案,但我认为是否有一些现实世界的应用程序可以解释这些类型的事情,这些事情遵守敏捷和 TDD 原则,可能会提供最大的价值?诚然,我对此相对较新,但我已经阅读了 Martin/Feathers/Osherove 的书籍,我在井字游戏、保龄球、素数等方面看到了许多 katas,但没有记录,没有错误报告那种“现实世界”的东西。


让我试试别的。

我通过 ftp 从大型机获取一个文件,列出要向我们的供应商下的订单,这个文件称为摘要文件。我每 5 分钟检查一次此文件。当有文件时,我会对其进行解析,然后检查以确保我们通过 MQ 收到了此摘要文件中列出的每个订单。作为双重检查,我还会检查订单是否存在,因为如果未能收到摘要文件,我们无法确保我们收到了所有订单。话虽如此,以下似乎我正朝着正确的方向前进?

再次重复,用订单替换摘要。这就是我想出的。

0 投票
6 回答
1517 浏览

functional-programming - 有任何 Clojure 原则吗?

  1. Clojure 有什么原则吗?

    一个。像 Java 等面向对象语言的SOLID 面向对象设计原则一样吗?

    湾。还是其他更具启发性的方法,例如“告诉不要问”、“偏好组合与继承”、“与接口对话”?

  2. 是否有任何设计模式(用于灵活代码)?

  3. 面向对象的封装等函数式编程基础的对应部分是什么?

知道这些资源吗?

0 投票
2 回答
893 浏览

oop - OOP中的“依赖倒置原则”是什么意思?

面向对象编程中的“依赖倒置原则”是什么意思?它有什么作用?

0 投票
2 回答
956 浏览

c++ - C ++中“isa”的技术方面

究竟是什么意思technical point of view,我明白这意味着我derived class总是可以转换为base class,就是这样?我读了一些材料,没有任何技术方面的参考,只有哲学!提前致谢

0 投票
3 回答
405 浏览

c# - 滥用闭包?违反各种原则?或者好吗?

编辑:修复了几个语法和一致性问题,使代码更明显,更接近我实际在做的事情。

我有一些看起来像这样的代码:

其中该DoSomething方法是一个扩展方法,并且它需要一个 Func 传递给它。因此,每个 DoSomething => lambda 中的每个方法调用都返回一个 Result 类型。

这类似于Maybe monad。除了检查空值之外,我正在检查 Result 类的状态,并且要么调用传递给 DoSomething 的 Func,要么在不调用 Func 的情况下返回先前的 Result

我面临的问题是希望在我的代码中具有这种组合,但我还需要能够将数据从组合调用结果之一传递到另一个调用结果中,正如您在someClass变量中看到的那样。

我的问题不在于这在技术上是否正确……我知道这是可行的,因为我目前正在这样做。我的问题是这是否是对闭包的滥用,或命令-查询分离,或任何其他原则......然后问有什么更好的模式来处理这种情况,因为我很确定我是现在,这种类型的代码陷入了“闪亮的新锤子”模式。

0 投票
1 回答
427 浏览

wcf - 调用 WCF 服务的多种方法

我有一个类可以处理我的应用程序中与我的 WCF 服务的所有交互,似乎 MSDN 说在 WCF 中使用 Using)_ 语句是不好的 - 我可以看到为什么这是不好的并同意它 (http:/ /msdn.microsoft.com/en-us/library/aa355056.aspx)

我的问题是他们建议的实现方法将意味着我有 10 个方法 [作为我的服务中的 10 个公共方法],它们将具有相同的结构代码,这当然不遵循 DRY 原则 - 代码看起来类似于以下:

这还没有任何日志记录,但当然,当我开始记录它时,我将不得不在近 10 个不同的地方添加日志记录工作

有人对我如何在重用代码方面更加足智多谋有任何建议吗

谢谢

保罗

0 投票
1 回答
5476 浏览

c - Boehm GC 如何为 C 程序工作?

我检查了 Boehm GC。C/C++ 的 GC。

我知道标记和扫描算法。我很好奇的是它如何只获取整个 C 内存中的指针。我对 C 内存的理解只是一个普通的字节数组。是否可以确定内存中的值是否为指针?