草庐IT

反模式

全部标签

java - 如果常量接口(interface)反模式是一种犯罪行为,那么 Swing 为什么要这样做呢?

我正在制作一个swing应用程序,并意识到我有几个类需要访问同一组常量。我无法让自己宣布其中一个是它们的主要持有者并将它们全部放在那里并让其他人引用它;我想,嘿,我会让它们都从某个共同的地方继承,但Java不做多重继承,但我可以在事物上放置无限接口(interface)。所以我想到了将它们全部转储到一个界面中(这是真的,我没有做任何研究就自然而然地想到了)。后来才知道这是异端。“事实上,它有一个名字:常量接口(interface)反模式”-asdiscussedhere(以及替代解决方案(我选择采用))。在我查看JDialog和JFrame的源代码之前,我对此一直很好,它们是这样读的:

java - 每个抛出异常的语句的 try/catch 是否被视为反模式?

我目前正在审查同事的Java代码,我看到很多情况下,每个可能抛出异常的语句都被封装在自己的try/catch中。catchblock都执行相同的操作(哪个操作与我的问题无关)。对我来说,这似乎是一种代码味道,我确实记得读过它是一种常见的反模式。但是我找不到任何关于此的引用资料。对于每条抛出异常的语句,try/catch都被视为反模式吗?支持这一点的论据是什么?构造示例:(与原始问题无关,所以请不要介意这个例子的其他问题,因为它只是为了说明我的意思。)publicintfoo(){intx,y=7;try{x=bar(y);}catch(SomeExceptione){return0;}

Java反模式名称?包含对象的对象包含...等等

是否有包含对象的对象的名称或特定规则......等等。我正在处理一个复杂的系统,该系统通常有运行5-10层深的对象。我听说这样做的一个原因是一次将大量数据从服务器传递到客户端,有没有更好的方法来做到这一点?编辑:好像是几个反模式的组合。应该清理域模型,以下反模式是气味:TrainWreckPattern和Everythingbutthekitchen-sinkmap 最佳答案 我不知道这种对象树的名称。但是一个众所周知的反模式是TrainWreck模式,当代码使用过多的方法链接时会出现这种模式。objA.getChildB().ge

java - 总是使用 get 和 set 方法来访问类自己的成员字段是否属于反模式?

这个问题在这里已经有了答案:Usinggetterswithinclassmethods(6个答案)关闭9年前。在Java类中,使用getter和setter访问成员字段被认为是好习惯还是坏习惯?例如哪个更好:publicOrder{privateAgreementagreement;publicAgreementgetAgreement(){returnagreement;}publicvoidprocess(){//shouldIuse:getAgreement().doSomething();//Or:agreement.doSomething();}}一般来说,由于KISS原则

java - JPA 中的 "circular references"是反模式吗?

让我们说Car有一个Wheel列表,同时Wheel有一个Car对车主的引用。publicclassCar{Listwheels;}publicclassWheel{Carowner;}我问这个是因为在JPA中这样操作很容易,而不是再次查询数据库以获取父实体。 最佳答案 像这样的双向关系在JPA中是完全有效和预期的。这就是mappedBy属性的全部要点。这篇文章有很好的解释:InabidirectionalJPAOneToMany/ManyToOneassociation,whatismeantby"theinversesideoft

c++ - 同一函数的 const 和非 const 版本 - 反模式?

最近我检查了大量遗留C++代码,发现了一些我以前从未在生产C++代码中见过的东西:classFoo{public:voidBar(){std::cout(this)->Bar();}};这是一个巨大的反模式吗?我的意思是,该函数要么是const要么是非常量,提供两个版本有什么意义?这是某种“const-correctnesscheat”吗,它允许在这样的情况下调用const函数:voidInvokeBar(constFoo&foo){//ohboy!Ireallyneedtoinvokeanon-constfunctiononaconstreference!foo.Bar();}

c++ - 冒异常反模式的风险..进行一些修改

假设我有一个在某些机器上24x7全天候运行的库。即使代码坚如磐石,硬件故障迟早会触发异常。我想为此类事件设置某种故障保护装置。一种方法是编写封装每个api的包装函数:returnCode=DEFAULT;try{returnCode=libraryAPI1();}catch(...){returnCode=BAD;}returnreturnCode;然后库的调用者重新启动整个线程,如果returnCode错误则重新初始化模块。事情可能会变得非常糟糕。例如如果tryblock(或libraryAPI1())有:func1();char*x=malloc(1000);func2();如果f

ios - 扩展 UIViewController 以访问应用委托(delegate)是一种反模式吗?

我使用的API建议将其客户端保留在应用委托(delegate)中并通过那里访问它。如果我扩展UIViewController以使其更容易访问应用程序委托(delegate),这是否是一种反模式?extensionUIViewController{varappDelegate:AppDelegate{returnUIApplication.shared.delegateas!AppDelegate}}classSomeViewController:UIViewController{...appDelegate.someClient.someMethod()...}我所说的反模式是指为了这

读程序员的制胜技笔记04_有用的反模式(下)

1. 重新发明轮子1.1. 发明家的特质就是要用质疑的心态对待所有事物,你从未停下质疑,那你将不可避免地成为一个发明家1.2. 并非所有的事情都有现成的轮子可以拿来用1.3. 自己重新写一个新的API,最终调用你使用的库1.3.1. 你的API应该是极简的,满足你的需求就可以了1.3.1.1. 自己做自己的甲方1.3.2. 拥有你自己的支持适配器的方便接口的方法在业界被称为适配器模式(adapterpattern)2. SOLID原则2.1. S:单一责任原则(single-responsibilityprinciple)2.1.1. 一个类应该只负责一件事2.1.2. 不是一个类做多件事,也

node.js - `save()` 是否被视为在 Mongoose 中更新文档的反模式?

请看下面的例子:constmyDoc=awaitmodel.findById(id).exec();//hererunslongrunningoperationwhichcantakeabout2-3secsmyDoc.name="UpdatedName";myDoc.save()可以使用这种模式更新文档吗?如果在checkout文档和保存文档之间(需要2-3秒)一些其他代码将尝试更新该文档怎么办?这意味着不会保存来自另一个代码的更改?如果是,是否意味着使用findOneAndUpdate和类似方法在MongoDB端进行更新更好? 最佳答案