问题标签 [defensive-programming]

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 回答
2313 浏览

java - Java 防御性副本

我见过这样编码的防御性副本

但这对我来说没有意义,Java中没有办法在该对象的内存中创建相同的副本吗?

我已经阅读了clone()不会在所有情况下都有效,但我不明白为什么。

0 投票
1 回答
930 浏览

php - 为什么 MVC 范式最适合 Web 应用程序?

我相当肯定我的教授会问我为什么选择在我的 Web 应用程序中使用 MVC。

说实话,我是 MVC 的新手。我读过它,我正在使用它构建一个博客应用程序,我认为以这种方式解决问题是非常合乎逻辑的。

但为什么?O_O 我画了一个空白。还有什么比说构建 N 层应用程序更适合的呢?

0 投票
3 回答
2301 浏览

c++ - 从 C++ 中的 fstream 获取有意义的错误消息

从 std::fstreams 以可移植方式获取有意义的文件访问错误消息的最佳方法是什么?badbits和的原始性failbits变得有点烦人。我之前已经针对 win32 和 POSIX 编写了自己的异常层次结构,这比 STL 的方式灵活得多。

我从启用了异常what的 a 的向下转换的 catch ( std::exception)方法中收到“basic::ios_clear”作为错误消息fstream 。这对我来说意义不大,尽管我确实知道问题出在哪里,但我希望我的程序能提供更多信息,这样当我几个月后开始部署时,我的生活会更轻松。

Boost 中是否有任何东西可以从fstream跨平台和跨 STL 实现中提取有意义的消息?

0 投票
3 回答
1473 浏览

erlang - 为什么快速失败式程序比防御式程序短?

我已经读过关于像 Erlang 这样的语言中快速失败的编程风格如何最终得到比大多数其他语言中的防御风格更短的程序。这对所有类型的程序都正确吗?原因是什么?

0 投票
2 回答
1533 浏览

javascript - 指示失败的 JavaScript 反静默技术

当错误确实发生并且函数无法继续前进时,什么是报告 JavaScript 错误而不是依赖空值和未定义的好方法。我可以想到三种方法:

  1. 没做什么
  2. 抛出异常
  3. 断言

这是一个简单的示例场景 - 一个将传入金额记入用户帐户的函数。该函数creditAccount对象的一部分。

这是天真的解决方案。

这种方法的一个主要问题是无效数据。让我们修复它,并使用返回值来指示操作失败。

这是对前一个的改进,但客户端代码必须检查返回值以确保操作成功。基本上对系统中的每种方法都这样做会变得很麻烦。

第三种方法,类似于第二种方法,是抛出异常。由于我们自己抛出异常,因此可以抛出特定类型的异常而不是一般异常。

第四种类似于抛出异常的方法是在代码中使用断言。与上述方法相比,一个缺点是由于断言是通用的,我们失去了抛出自定义异常的能力。通过将对象传递到每个断言调用中,仍然有可能。

全局assert函数很容易编写并且使代码更短一些。

在这些方法中,什么是处理意外值和不愉快路径的好方法。这里没有提到其他有用的方法吗?

0 投票
8 回答
784 浏览

authentication - 验证访问时如何避免键盘记录器

真的按照标题,在验证访问时可以做些什么来打败键/击键记录?

我刚刚发布了一个相关问题(how-to-store-and-verify-digits-chosen-at-random-from-a-pin-password),就从 PIN/密码中选择随机数字征求建议。还有哪些其他合理不显眼的方法?

任何和所有解决方案都表示赞赏。

0 投票
6 回答
304 浏览

java - 这段代码还能如何针对防御性编程进行优化?

对于我的数据结构项目,目标是读取包含超过 10000 首歌曲的提供的文件,其中清楚地标记了艺术家、标题和歌词,并且每首歌曲都用单双引号分隔。我编写了这段代码来解析文本文件,它可以运行,运行时间不到 3 秒,可以
读取 422K 行文本
创建一个 Song 对象
,将所述 Song 添加到 ArrayList

我写的解析代码是:

我正在和我的 Intro to Algorithms 教授讨论这个项目的代码,他说我应该尽量在我的代码中更加防御,以允许其他人提供的数据不一致。最初我在 Artist、Title 和 Lyrics 字段之间使用 if/else 块,根据他的建议,我改为使用顺序 if 语句。虽然我可以理解他的观点,但使用此代码示例,我怎样才能更加防御允许输入不一致?

0 投票
5 回答
635 浏览

sql - 防御性数据库编程——使用 T-SQL 编写健壮的代码?

在应用程序开发中有一个防御性编程的概念。如何使用 Transact-SQL 实施防御性编程技术并编写健壮的代码?

0 投票
3 回答
5373 浏览

perl - 用 Perl 遍历文件中的行的最防御方法是什么?

我通常使用以下代码遍历文件中的行:

然而,在回答另一个问题时,埃文卡罗尔编辑了我的答案,将我的while陈述改为:

他的理由是,如果你有一行是0(它必须是最后一行,否则它会有一个回车),那么while如果你使用我的语句,你会过早退出 ($line将设置为"0",返回值来自因此,分配也将"0"被评估为假)。如果您检查定义性,那么您就不会遇到这个问题。这很有意义。

所以我试了一下。我创建了一个文本文件,其最后一行0没有回车。我通过我的循环运行它并且循环没有过早退出。

然后我想,“啊哈,也许价值实际上不是0,也许还有其他东西把事情搞砸了!” 所以我使用Dump()了 from Devel::Peek,这就是它给我的:

这似乎告诉我该值实际上是 string "0",因为如果我调用Dump()我明确设置为的标量,我会得到类似的结果"0"(唯一的区别是 LEN 字段 - 从文件 LEN 是 80,而从标量 LEN 是 8)。

那么有什么关系呢?while()如果我传递一条只有"0"没有回车的行,为什么我的循环不会过早退出?Evan 的循环实际上更具防御性,还是 Perl 在内部做了一些疯狂的事情,这意味着你不需要担心这些事情,while()实际上只有在你命中时才会退出eof

0 投票
2 回答
72 浏览

c# - 关于检查文件是否存在与目录为空和可靠性的问题

我知道几乎每种编程语言都有检查文件或目录是否存在的方法。

但是,在我的情况下,创建了一个存储程序设置的文件。如果不存在(即!File.Exists or Directory.Count == 0Directory是文件所在目录),则提示填写一些设置。

但是,这种代码可靠吗?例如,在这种情况下,请求详细信息的目录中可能没有文件,否则可能存在其他类型的不相关的文件或正确格式的篡改文件。检查特定文件本身会更好吗?检查构成文件的变量是否会更好,因为这样更快?

这样做的最佳一般方法是什么?检查文件,如果文件夹在那里?如果文件夹在那里并且为空?检查写入文件的字符串?

编辑:一位同事的观点是我应该在变量级别进行检查,因为它更接近问题(识别不正确的加密、损坏、语言环境等问题)。

谢谢