标签: anti-patterns

为什么"log and throw"被认为是反模式?

围绕这篇文章的讨论引发了这个问题,我没有收到任何好的答案.

为什么要记录你的异常然后重新抛出它(当然保留原始的堆栈跟踪)是一个坏主意,如果你不能处理它呢?

logging exception-handling anti-patterns

74
推荐指数
4
解决办法
3万
查看次数

为什么Singleton被认为是反模式?

可能重复:
单身人士有什么不好的?

单身人士设计模式:陷阱

单身反模式

我最近听说过Singleton是一种反模式.我知道它与事实有关,使得一个类单例就像使该唯一实例成为一个全局变量,但它也做了很多(限制该对象的实例数,管理实例化等等).

为什么Singleton被认为是反模式?还有什么选择?

design-patterns anti-patterns

71
推荐指数
4
解决办法
6万
查看次数

Python:使用"..%(var)s .."%locals()是一个好习惯吗?

我发现了这种模式(或反模式),我对它非常满意.

我觉得它非常敏捷:

def example():
    age = ...
    name = ...
    print "hello %(name)s you are %(age)s years old" % locals()
Run Code Online (Sandbox Code Playgroud)

有时候我会用它的堂兄:

def example2(obj):
    print "The file at %(path)s has %(length)s bytes" % obj.__dict__
Run Code Online (Sandbox Code Playgroud)

我不需要创建一个人工元组并计算参数并保持元组内的%s匹配位置.

你喜欢它吗?你会/你会用它吗?是/否,请解释.

python string design-patterns anti-patterns

70
推荐指数
6
解决办法
2万
查看次数

颠覆外部是反模式吗?

Subversion允许您使用外部嵌入其他存储库的工作副本,从而允许在项目中轻松控制第三方库软件.

虽然这些似乎是重用库和供应商软件版本控制的理想选择,但它们并非没有批评:

请不要使用Subversion外部(或其他工具中的类似),它们是反模式,因此是不必要的

使用外部设备是否存在隐患?请解释为什么他们会被视为反模式.

svn version-control anti-patterns svn-externals

68
推荐指数
6
解决办法
2万
查看次数

C#反模式

简而言之:我发现Java反模式是不可或缺的资源.适合初学者和专业人士.我还没有为C#找到这样的东西.所以我将这个问题作为社区维基开放,并邀请所有人分享他们对此的了解.由于我是C#的新手,我对此很感兴趣,但不能从一些反模式开始:/

以下是我发现C#而不是其他语言的答案.

我只是复制/粘贴这些!考虑看看这些评论.


投掷 NullReferenceException

抛出错误的异常:

if (FooLicenceKeyHolder == null)
    throw new NullReferenceException();
Run Code Online (Sandbox Code Playgroud)

属性与公共变量

类中的公共变量(改为使用属性).

除非该类是一个简单的数据传输对象.


不理解bool是一个真正的类型,而不仅仅是一个约定

if (myBooleanVariable == true)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

或者,甚至更好

if (myBooleanVariable != false)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

这样的结构通常使用CC++开发,其中一个布尔值的想法只是一个约定(0 ==假的,什么都为true); 在C#或其他具有真正布尔值的语言中,这不是必需的(或可取的).


运用 using()

没有using在适当的地方使用:

object variable;
variable.close(); //Old code, use IDisposable if available.
variable.Dispose(); //Same as close.  Avoid if possible use the using() { } pattern.
variable = null; //1. in release optimised away.  2. C# is …
Run Code Online (Sandbox Code Playgroud)

c# anti-patterns

55
推荐指数
21
解决办法
3万
查看次数

如何防止箭头反模式

我对如何最好地将我的代码重构为更具可读性的东西感到困惑.

考虑一下这段代码:

var foo = getfoo();
if(foo!=null)
{
    var bar = getbar(foo);
    if(bar!=null)
    {
        var moo = getmoo(bar);
        if(moo!=null)
        {
            var cow = getcow(moo);
            ...
        }
    }
}
return;
Run Code Online (Sandbox Code Playgroud)

如您所见,需要大量嵌套if块,因为每个嵌套块依赖于先前的值.

现在我想知道如何让我的代码在这方面更清洁一些.

我自己想到的一些选择是:

  • 在每个if子句后返回,这意味着我有多个地方可以保留我的方法
  • 抛出ArgumentNullExceptions,之后我将它们捕获到最后并将return语句放在我的finally子句中(或者在try/catch块之外)
  • 使用标签和 goto:

大多数这些选项对我来说似乎有点"脏",所以我想知道是否有一种很好的方法来清理我创建的这个混乱.

c# design-patterns anti-patterns

51
推荐指数
7
解决办法
5093
查看次数

JavaScript存在哪些反模式?

我发现不做的事情比学习应该做的更难学习.

根据我的经验,专家和中间人之间的区别在于能够从各种看似相同的方式中做出相同的选择.

那么,谈到JavaScript,你应该做什么样的事情以及为什么

我能够为Java找到很多这些,但由于JavaScript的典型上下文(在浏览器中)与Java非常不同,我很想知道它会发生什么.

javascript anti-patterns

49
推荐指数
8
解决办法
9072
查看次数

如何阻止用户在javascript中关闭窗口?

是否可以使用退出按钮[X]阻止用户关闭窗口?我实际上在页面中提供了一个关闭按钮,供用户关闭窗口.基本上我试图做的是强制用户填写表单并提交它.我不希望他们关闭窗口,直到他们提交它.

伙计们,我非常感谢你的评论,我不想在任何商业网站上托管.内部事情,我们实际上让所有员工参与我们设计的这项调查....我知道它不是正确的方式,但我想知道我们在这里遇到的问题是否有解决办法......

javascript anti-patterns javascript-events

46
推荐指数
5
解决办法
9万
查看次数

为什么"element.innerHTML + ="代码不好?

我被告知不要使用element.innerHTML += ...这样的东西来附加东西:

var str = "<div>hello world</div>";
var elm = document.getElementById("targetID");

elm.innerHTML += str; //not a good idea?
Run Code Online (Sandbox Code Playgroud)

这有什么问题?我还有其他选择吗?

html javascript anti-patterns innerhtml

46
推荐指数
4
解决办法
3万
查看次数

这种不良做法/反模式的名称是什么?

我试图向我的团队解释为什么这是不好的做法,我正在寻找一个反模式参考来帮助解释.这是一个非常大的企业应用程序,所以这里有一个简单的例子来说明实现的内容:

public void ControlStuff()
    {
        var listOfThings = LoadThings();
        var listOfThingsThatSupportX = new string[] {"ThingA","ThingB", "ThingC"};
        foreach (var thing in listOfThings)
        {
            if(listOfThingsThatSupportX.Contains(thing.Name))
            {
                DoSomething();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我建议我们在'Things'基类中添加一个属性来告诉我们它是否支持X,因为Thing子类需要实现有问题的功能.像这样的东西:

public void ControlStuff()
    {
        var listOfThings = LoadThings();
        foreach (var thing in listOfThings)
        {
            if (thing.SupportsX)
            {
                DoSomething();
            }
        }
    }
class ThingBase
{
    public virtual bool SupportsX { get { return false; } }
}
class ThingA : ThingBase
{
    public override bool SupportsX { get { return true; } …
Run Code Online (Sandbox Code Playgroud)

c# anti-patterns

44
推荐指数
7
解决办法
4599
查看次数