标签: defensive-programming

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

在应用程序开发中,存在防御性编程的概念.如何使用Transact-SQL实现防御性编程技术和编写健壮的代码?

sql database sql-server defensive-programming sql-server-2008

3
推荐指数
1
解决办法
555
查看次数

基本的防守编程

可能重复:
收藏(聪明)防御性编程最佳实践

一些程序员总是建议我集中注意力以便于调试.什么是防御性编程?在练习时应该考虑哪些?

还有一个更重要的问题:编码时需要考虑的关键事项是什么?

defensive-programming

2
推荐指数
1
解决办法
5135
查看次数

在程序中进行多层数据验证是否可以深入防御故障或代码混乱的偏执?

例如,当最初输入数据时,如果它与我的验证正则表达式不匹配,我可能会将其吐出。然后当我需要使用它的时候,我常常会产生这样的冲动:

function useData(data) {
  if(data.match(/some invalidating substring/) throw Error('Shouldn\'t have ever gotten past the orig. regex, but somehow it did, so its good that this extra layer of debugging info was integrated.');
  // actually use the data.
}
Run Code Online (Sandbox Code Playgroud)

我并不是真的在谈论安全性,因为那样你就需要深度防御。我所指的代码类型通常对安全性不敏感,我只是想编写设计良好的代码,很有可能发现错误。从某种意义上说,深度防御也需要防止故障,而且不仅仅是漏洞,我想,但与此同时,Unix 哲学要求代码只做一件事,而且只是做那件事,但要做得好。考虑到这一点,不“信任”您的验证代码来完成其工作,然后在另一个函数中的某个地方制作另一段验证代码,“以防万一”,这似乎是不好的做法。用两段代码做一件事也不是好事。另一个缺点是,如果您更改验证模式,那么您可能会忘记在两个地方都这样做。

反馈?

javascript validation defensive-programming

2
推荐指数
1
解决办法
679
查看次数

用不同的编程结构替换`goto`

我试图用防御性编程来做这个小程序,但是我很难处理这个避免Loop-Goto,因为我知道这是BAD编程.我曾尝试过,并且做...而循环,但在一个案例中,我没有问题.当我要做另一个时,问题开始...而对于第二种情况("不插入空格或点击输入按钮").我尝试和嵌套做...虽然但在这里结果更复杂.

#include <ctype.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int i;
    int length;
    char giventext [25];        
    Loop:

    printf("String must have 25 chars lenght:\n");
    gets(giventext);

    length = strlen(giventext);

    if (length > 25) {
        printf("\nString has over %d chars.\nMust give a shorter string\n", length);
        goto Loop;
    }
    /* Here i trying to not give space or nothing*/
    if (length < 1) {
        printf("You dont give anything as a string.\n");
        goto Loop;
    } else {
        printf("Your string has %d\n",length);
        printf("Letter in lower …
Run Code Online (Sandbox Code Playgroud)

c defensive-programming repeat

2
推荐指数
1
解决办法
125
查看次数

1
推荐指数
1
解决办法
208
查看次数

Java防御副本

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

void someMethod(Date d) {
    myDate = new Date( d.getTime() );
}
Run Code Online (Sandbox Code Playgroud)

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

我已经读过clone()不会在所有情况下都行不通,但我不明白为什么.

java theory defensive-programming

1
推荐指数
1
解决办法
2280
查看次数

Clojure:地图列表的地图...如何纠缠任何匿名数据结构

大家好:在java中,我们都有使用我们的ide来"遍历"复杂数据类型深度的经验:

dog.getCollar().getCollarTag().getName(); 
Run Code Online (Sandbox Code Playgroud)

然而,在Clojure中,由于缺乏静态类型,这变得非常简单.我们如何"防御"或反对可能从嵌套数据结构到达的复杂性?

1)对clojure数据结构深度的可取"限制"?

2)处理非常深层嵌套的数据结构的常用习惯用法,它可以防止诸如将列表误认为映射之类的错误,或者无法正确地降低/大写变量名称?

请原谅我,如果我在这里听起来有点偏离范例......可能是这样的错误通过在REPL中不断测试而得到有效抑制.但是,我想知道是否还有其他方法可以确保,在编译时,代码尽可能正确(即单元测试,IDE/emacs插件等......)

defensive-programming clojure

1
推荐指数
1
解决办法
575
查看次数

javascript问号?:逻辑语法,防御性编程

我试图使用javascript?:语法重写下面的语句.

if(type of someVariable !="undefined"){
     someFunction(someVariable);
}else{}
Run Code Online (Sandbox Code Playgroud)

这是我目前的尝试,它导致语法错误

typeof someVariable != "undefined" ? someFunction(someVariable) : ;
Run Code Online (Sandbox Code Playgroud)

如果有人能说出我遇到了什么错,我会很感激.欢迎提供有关防御性编程最佳实践的任何附带提示.

javascript variables defensive-programming if-statement function

0
推荐指数
1
解决办法
950
查看次数

Kotlin:双值是“正常”数字的条件

如何测试Kotlin 中Double类型的值是否不是 Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN或其他特殊值?

我想要类似的东西 require(Double.isNormal(x))

double defensive-programming nan infinity kotlin

0
推荐指数
1
解决办法
137
查看次数

是否需要额外检查将字符串解析为 LocalDate 对象?

我正在为一些验证用户出生日期的遗留代码编写一些测试。我在课堂上遇到了以下方法。我怀疑try块中的if语句是否必要。根据我的理解,如果 parse 函数成功返回一个 LocalDate 对象,那么 date.toString() 应该总是等于输入的 dobstr,并且不需要做额外的检查。我错过了什么吗?我想不出任何我们需要额外检查的情况。请帮忙。谢谢!

private LocalDate format(String dobStr) throws Exception {
        LocalDate date = null;
        try {
            date = LocalDate.parse(dobStr, DateTimeFormatter.ISO_DATE);
            if (!dobStr.equals(date.toString())) {
                 throw new DateTimeParseException("some message");
            }
        }
        catch (DateTimeParseException ex) {
            throw ex;
        }
        return date;
}
Run Code Online (Sandbox Code Playgroud)

这是我在 DateTimeFormatter.ISO_DATE 的源代码中找到的

public static final DateTimeFormatter ISO_DATE;
static {
    ISO_DATE = new DateTimeFormatterBuilder()
            .parseCaseInsensitive()
            .append(ISO_LOCAL_DATE)
            .optionalStart()
            .appendOffsetId()
            .toFormatter(ResolverStyle.STRICT, IsoChronology.INSTANCE);
}
Run Code Online (Sandbox Code Playgroud)

java defensive-programming exception isodate localdate

0
推荐指数
1
解决办法
57
查看次数

标识符名称中的数字是否有问题?

C\C++\Java开始 -

int 2a ; //invalid suffix "a" on integer constant

虽然它是有效的语法,但是其他变体名称中的数字是否有任何问题?

喜欢 -

int num1 ;
int num_1st ;
int num_2nd ; 
Run Code Online (Sandbox Code Playgroud)

c c++ java syntax defensive-programming

-1
推荐指数
2
解决办法
173
查看次数