anti-patterns相关内容

单元测试反模式目录

反模式 :必须至少有有两个关键要素可以正式区分实际的反模式与简单的坏习惯、坏习惯或坏主意: 一些最初看似有益的重复行为、过程或结构模式,但最终会产生比有益结果更多的不良后果,以及 经过重构的解决方案,具有清晰的文档记录、在实际实践中得到验证且可重复. 为您已经“在野外"见过太多次的 TDD 反模式投票. James Carr 的博文 和 测试驱动开发yahoogroup相关讨论 ..
发布时间:2021-09-04 20:17:24 其他开发

过早重构?

我们都听说过过早优化,但您如何看待过早重构?在你看来有这样的事情吗?这就是我的意思. 首先,阅读 Martin Fowler 的开创性著作"重构" 彻底改变了我在编程方面的生活. 然而,我注意到的一件事是,如果我过快地开始重构一个类或框架,我有时会发现自己被编码到了一个角落.现在,我怀疑问题本身并不是真正的重构,而可能是过早/糟糕的设计决策/假设. 您对这个问题有什么想法、见解和 ..
发布时间:2021-07-05 20:40:01 其他开发

有什么理由不使用“+"来连接两个字符串?

Python 中一个常见的反模式是在循环中使用 + 连接字符串序列.这很糟糕,因为 Python 解释器必须为每次迭代创建一个新的字符串对象,并且最终需要二次时间.(最近版本的 CPython 显然可以在某些情况下优化这一点,但其他实现却不能,因此不鼓励程序员依赖它.)''.join 是做到这一点的正确方法. 但是,我听说过(包括 Stack Overflow 上的此处)您应该永远,永远使用 ..
发布时间:2021-06-25 19:45:34 Python

性能反模式

我目前为一位客户工作,他害怕由于“性能原因"而更改糟糕的不可测试和不可维护的代码.很明显,很多误解盛行,原因不明,只是盲目跟风. 我遇到的一个这样的反模式是需要将尽可能多的类标记为密封内部... *RE-Edit:我认为将所有内容标记为 sealed 内部(在 C# 中)是一种过早的优化.* 我想知道人们可能知道或遇到的其他一些性能反模式是什么? 解决方案 我遇到的最大的 ..
发布时间:2021-06-15 19:20:28 其他开发

在以下示例中,为什么服务定位器是反模式?

我有一个MVC应用程序,该应用程序具有定义良好的域模型,实体,存储库和服务层. 为了避免在控制器内部实例化我的服务类,从而使控制器陷入不适合它们的逻辑的困扰,我创建了一个帮助器,其作用类似于 我看到的基本上是带有依赖项的工厂类( App \ Controller \ Action \ Helper \ Service ),这些依赖项是通过ctor注入的.因此,您的类不知道其依赖项来自何处, ..

保持实现多个接口的COM类的可管理性的好技术

实现许多接口的COM对象最终可能会遭受上帝对象反模式的困扰,或者最终会充满乏味的转发代码: class MyCOMClass,公开CUnknown,公共IFoo,公共IBar,公共IPersistStream,公共IYetAnotherInterface,,公共IAndAnotherInterfaceToo//等等等等 在最明显的实现中,类MyCOMClass最终在内部实现了所有接口,变得 ..
发布时间:2021-04-23 19:03:27 C/C++开发

为什么“打电话给超级"?被维基百科认为是反模式吗?

维基百科将“超级呼叫"归类为反模式,我真的不明白为什么.该模式在objective-C/可可中经常使用;例如init/dealloc,drawrect,awakefromnib都要求您调用super.我在这里误解这个概念吗? 链接到文章: http://en.wikipedia.org/wiki/Call_super 解决方案 如该文章中所述,调用作为反模式的super方法是必要性, ..
发布时间:2021-04-22 20:15:25 移动开发

什么时候可以在属性getter访问中更改对象状态(例如初始化)?

(除了代理设置!) 我花了一些时间在这里写一个问题,以解决我遇到的问题的更好模式-该类对几乎每个属性getter都执行了一些条件初始化,因为基类中的初始化依赖于继承类的数据,在建筑上不可用. 在写我得出结论的问题时,最好在继承者构造上进行初始化.这将要求每个继承的类都调用父级初始化方法,但我认为这更好,因为: 我不必记住在每个新的属性getter/setter的基类中进行初始化. ..
发布时间:2020-11-28 01:57:48 C#/.NET

更新超类的字段

从各种模式的角度来看,可以从其后代更改超类中的字段。例如: A类{ int barA; } B类扩展了A { private void testMethod(){ barA = 4; } } 谢谢! 解决方案 不,通常不是一个好主意。如果我理解您的要求,通常可以这样做 公共类A { private int val; prote ..
发布时间:2020-10-21 02:04:54 Java开发

这种反模式/代码气味有名字吗?

首先让我说我不主张这种方法,但是最近我看到了它,我想知道是否可以用它来指称有罪党这个名字。 现在您有了一个方法,并且想返回一个值。您也想要返回错误代码。当然,异常是更好的选择,但是无论出于何种原因,您都希望使用错误代码。记住,我在这里扮演魔鬼的拥护者。因此,您将创建一个通用类,如下所示: class FunctionResult { 公共T有效载荷; public i ..
发布时间:2020-10-21 01:30:28 其他开发

简单域驱动设计中的Anemic域模型与域模型

我最近在“ 贫血域模型模式”引起了我的注意。当我读完这篇文章时,我发现Anemic Domain Model描述适用于我从事和构建的许多项目。我从来没有认为这是一个糟糕的设计决定,因为它很自然。我认为,在域模型重量轻且不十分复杂的情况下,Anemic域模型绰号非常合适。为什么要在域模型中添加不必要的复杂性,以免“ Anemic域模型”的标题不能恰当地描述您的代码? 问题:在什么时候将更多的代 ..
发布时间:2020-10-21 01:19:01 其他开发

对使用IOC容器,服务定位器和工厂感到困惑

假设我有一个 BaseForm ,它取决于 ILogger 或 IResourceManager 或类似的东西。当前,它使用服务定位器(我知道它是反模式)来解析所需服务的正确实现。 正在使用构造函数注入解决这种依赖关系的正确方法? 我是否必须在 BaseForm (及其派生类型)中注册我的 BaseForm (及其派生类型)?容器以创建具有已解决依赖关系的实例?这不是使所有事情复杂化吗? ..

请问Ja​​va RMI的意义是什么?

为什么人们使用RMI,或者什么时候应该使用RMI?我在oracle的网站上阅读了有关RMI的那些教程。但是它并没有提供足够的实际示例。 据我所知,软件应将其模块“无关且分开”。 ”。 RMI某种程度上似乎是与我高度耦合的一个例子。为什么这不是不好的编码习惯?我认为客户端应该只触发指令,而对象的所有实际操作都是由服务器完成的。 (我目前正在攻读计算机科学学士学位,并且经验不足,因此如果我 ..
发布时间:2020-10-07 18:34:17 Java开发

TFS-级联分支机构的可持续性

分支指南通常描述一个永生的“ Main”分支,其功能从Main分支,并合并回到Main,而Releases从Main分支,以及Service Pack,RTM等所需的Release的其他分支。关于Main的信息通常简化为“ Main中没有垃圾”。 我正在与一个定期(每月一次)并按顺序发布的小组合作。对他们来说,似乎没有必要将工作返回到Main分支。他们使用的是TFS 2010,在分支上,其分 ..

贫血领域模型与领域模型

在阅读了此反模式及其在SO上的许多关注之后,再次感到困惑. 如果我有一个域模型并捕获了必须保留在数据传输对象中的数据,那是否会使我的域模型成为数据的包装器?在那种情况下,我将使用贫血领域模型.但是,如果我在该包装器上添加了足够的域逻辑,那么它将在什么时候成为真正的域模型? 我的印象是,捕获必须在域模型中保留的内容违反了良好实践,并创建了贫血的域模型反模式.但是,如果您使用关系数据库,则 ..

什么是反模式?

我正在研究模式和反模式.我对模式有一个清晰的认识,但是我没有反模式.网络和维基百科的定义让我非常困惑. 有人可以简单地向我解释什么是反模式吗?目的是什么?他们在做什么?是好事还是坏事? 解决方案 反模式是某些软件开发模式,被认为是不良的编程习惯. 与设计模式相反,这是解决常见问题的常用方法形式化,通常被认为是良好的开发实践,反模式则相反,是不理想的. 例如,在面向对象的编 ..
发布时间:2020-07-02 02:22:33 其他开发

等待承诺链有什么问题?

我正在开发Angular 6应用程序,并被告知以下内容是反模式: await someFunction().then(result => { console.log(result); }); 我意识到,等待承诺链毫无意义.如果someFunction()返回一个Promise,则在等待时不需要Promise链.您可以这样做: const result = await som ..
发布时间:2020-06-21 18:48:38 前端开发

误用的设计模式

在规范的“四人一组"列表中,您是否经常发现任何滥用,误解或过度使用的设计模式(激烈争论的Singleton除外)?换句话说,有没有建议您在使用之前仔细考虑的设计模式? (为什么?) 解决方案 单例模式.. 测试时,全局状态通常会导致问题 任何依赖于单例的代码都变得越来越难以测试,因为这种依赖关系不容易被嘲笑. ..
发布时间:2020-05-20 01:01:19 其他开发

钻石问题真的可以解决吗?

OO编程中的一个典型问题是菱形问题.我有一个带有两个子类B和C的父类A.A有一个抽象方法,B和C实现了它.现在,我有一个子类D,它继承了B 和C.菱形问题是,D应该使用哪种实现方式,B之一还是C之一? 人们声称Java没有钻石问题.我只能对接口进行多重继承,并且由于它们没有实现,所以我没有任何钻石问题.这是真的吗?我不这么认为. 请参见下文: [拆卸的车辆示例] 钻石问题是否总是 ..
发布时间:2020-05-20 01:00:39 其他开发

为什么“记录并抛出"?被认为是反模式?

这个问题是由围绕 如果不能以其他方式处理异常,为什么不应该记录您的异常然后将其重新抛出(当然,保留原始堆栈跟踪)呢? 解决方案 我认为答案主要是因为如果无法处理,为什么要抓住它?如果他们认为值得日志,为什么不让任何人可以处理它(或者让别无选择的人处理它)记录下来呢? 如果捕获并记录并重新抛出它,那么上游代码将无法知道您已经记录了该异常,因此相同的异常可能会记录两次.或更糟糕的是,如果 ..
发布时间:2020-05-03 07:41:40 其他开发