Tag: 反模式

embedded式系统最差的做法

在开发embedded式系统时,你会认为什么是“最差的做法”? 我不想做的一些想法是: 避免抽象硬件层,而是在整个代码中扩展硬件访问。 没有任何types的仿真环境,只有实际的硬件exe / cute。 也许由于上述两点,避免unit testing 没有在分层结构中开发系统,所以更高的层可能依赖于debugging和工作的低层function select硬件时不考虑将使用它的软件和工具 使用专为简单debugging而devise的硬件,例如无testing点,无debuggingLED,无JTAG等。 我确信有很多好的想法,不要做什么,让我们听听他们!

这个坏习惯/反模式的名字是什么?

我正在向我的团队解释为什么这是不好的做法,并且正在寻找反模式参考来帮助我解释。 这是一个非常大的企业应用程序,所以下面是一个简单的例子来说明实现的内容: public void ControlStuff() { var listOfThings = LoadThings(); var listOfThingsThatSupportX = new string[] {"ThingA","ThingB", "ThingC"}; foreach (var thing in listOfThings) { if(listOfThingsThatSupportX.Contains(thing.Name)) { DoSomething(); } } } 我build议我们添加一个属性到'Things'基类来告诉我们它是否支持X,因为Thing子类需要实现这个function。 像这样的东西: public void ControlStuff() { var listOfThings = LoadThings(); foreach (var thing in listOfThings) { if (thing.SupportsX) { DoSomething(); } } } class ThingBase { […]

为什么“login和扔”被认为是反模式?

这个问题引发了围绕这篇文章的讨论,我没有收到任何好的答案。 为什么要logging你的exception,然后重新抛出它(当然保留原始的堆栈跟踪)是一个坏主意,如果你不能处理它呢?

JavaScript有什么反模式?

我发现不应该做的是比应该做的更难的教训。 根据我的经验,将专家与中间人分开的能力是从各种表面上相同的方式中进行相同的select。 所以,谈到JavaScript ,你不应该做什么样的事情,为什么 ? 我可以find很多Java的这些,但由于JavaScript的典型上下文(在浏览器中)是非常不同于Java的,我很好奇,看看是什么出来。

如何防止箭头反模式

我对如何最好地将我的代码重构成更可读的东西有点困惑。 考虑这段代码: 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; 正如你所看到的那样,嵌套if块是需要的,因为每个嵌套的if依赖于前面的值。 现在我想知道如何让我的代码在这方面更清洁。 我想到的一些select是: 在每个if子句之后返回,这意味着我将有多个地方离开我的方法 抛出ArgumentNullException s,之后我会赶上他们,并将return语句放在我的finally子句中(或在try / catch块之外) 使用标签工作并goto: 这些选项中的大部分对我来说似乎有些“肮脏”,所以我想知道是否有一个很好的方法来清理我创build的这个混乱。

C#反模式

长话短说:我发现Java反模式是不可或缺的资源。 对于初学者和专业人士一样多。 我还没有find这样的C#的东西。 所以我会把这个问题作为社区维基开放,并邀请大家分享他们的知识。 由于我是C#的新手,我对此非常感兴趣,但不能从一些反模式开始:/ 这里是我发现C#而不是其他语言的答案。 我只是复制/粘贴这些! 考虑一下看看这些评论。 抛出NullReferenceException 抛出exception: if (FooLicenceKeyHolder == null) throw new NullReferenceException(); 属性与公共variables 类中的公共variables(改为使用属性)。 除非这个类是一个简单的数据传输对象。 不理解,布尔是一个真正的types,不只是一个约定 if (myBooleanVariable == true) { … } 或者甚至更好 if (myBooleanVariable != false) { … } 像这样的构造经常被C和C++开发者使用,其中布尔值的概念只是一个约定(0 == false,其他都是真的)。 这在C#或其他有实际布尔值的语言中是没有必要的(或可取的)。 使用using() 在适当情况下不使用: object variable; variable.close(); //Old code, use IDisposable if available. variable.Dispose(); //Same as close. […]

你在生产企业环境中见过的最多的EVIL代码是什么?

你在公司的生产环境中见过的最邪恶或危险的代码片段是什么? 我从来没有遇到过我认为是故意恶意和恶意的生产代码,所以我很好奇,看看别人发现了什么。 我见过的最危险的代码是远离核心生产数据库服务器的两个链接服务器的存储过程。 存储过程接受任何NVARCHAR(8000)参数,并通过双跳sp_executeSQL命令在目标生产服务器上执行该参数。 也就是说,sp_executeSQL命令执行另一个sp_executeSQL命令来跳转两个链接的服务器。 哦,并且链接的服务器帐户在目标生产服务器上具有sysadmin权限。

任何不使用“+”连接两个string的原因?

Python中常见的反模式是在循环中使用+连接string序列。 这很糟糕,因为Python解释器必须为每个迭代创build一个新的string对象,并且最终要花费二次时间。 (在某些情况下,CPython的最新版本显然可以优化这个版本,但其他的实现不能这样做,所以程序员不要依赖这个)。 ''.join是正确的方法。 但是,我听说它( 包括在这里堆栈溢出 ),你永远不应该使用+string连接,而是总是使用''.join或格式string。 我不明白为什么这是如此,如果你只是串联两个string。 如果我的理解是正确的,它不应该花费二次时间,我认为a + b比''.join((a, b))或'%s%s' % (a, b) 。 使用+连接两个string是否是一个好习惯? 或者有没有我不知道的问题?

ServiceLocator是一种反模式吗?

最近我读过Mark Seemann关于Service Locator反模式的文章 。 作者指出了ServiceLocator是反模式的两个主要原因: API使用问题 (我非常好) 当类使用Service定位器时,很难看到它的依赖关系,因为在大多数情况下,类只有一个PARAMETERLESS构造函数。 与ServiceLocator相比,DI方法通过构造函数的参数显式地公开依赖关系,因此IntelliSense中很容易看到依赖关系。 维护问题 (困惑我) 考虑下面的expample 我们有一个使用服务定位器方法的“MyType”类: public class MyType { public void MyMethod() { var dep1 = Locator.Resolve<IDep1>(); dep1.DoSomething(); } } 现在我们想添加另一个依赖类到'MyType' public class MyType { public void MyMethod() { var dep1 = Locator.Resolve<IDep1>(); dep1.DoSomething(); // new dependency var dep2 = Locator.Resolve<IDep2>(); dep2.DoSomething(); } } 这是我误解的起点。 作者说: 要告诉你是否正在引入一个突破性的变化就变得很难了。 […]

devise模式避免

很多人似乎都认同,Singleton模式有许多缺点,甚至有人build议完全避免模式。 这里有一个很好的讨论 。 请指出关于Singleton模式的任何意见。 我的问题 :是否有其他devise模式,应该避免或小心使用?