Questions tagged «programming-practices»

编程实践是软件开发中常用或不常用的实践。这些可以包括敏捷开发,看板,编码快捷方式等。

16
我应该照顾几乎肯定不会发生的比赛条件吗?
让我们考虑一下诸如GUI应用程序之类的应用程序,其中主线程几乎立即更新UI,而另一些线​​程正在通过网络轮询数据,或者可以保证需要5到10秒才能完成工作。 我收到了许多不同的答案,但是有些人说,如果这是统计上不可能的比赛条件,则完全不必担心,但其他人则说,即使有10 %-53%(我您不知道数字,这是我所听到的)由于比赛条件而发生的一些伏都教徒魔术,请始终在需要它的线程上获取/释放锁。 你怎么看?在这种统计上不可能的情况下处理比赛条件是否是一种良好的编程习惯?还是增加更多的代码行以降低可读性是完全没有必要,甚至会适得其反?



14
RESTful API设计。如果没有行,我应该返回什么?
我目前正在使用Slim Framework为社交网络编码API。我的问题是:当json结构中没有要返回的行时,最佳实践是什么? 可以说,此调用/ v1 / get / movies从表电影名称返回2行: [ {"name": "Ghostbusters"}, {"name": "Indiana Jones"} ] 但是,然后我调用了/ v1 / get / books,该表中没有行。我应该只返回一个空结构吗? [ ] ...或者消息和错误代码会更好吗? [ "errors": { "message": "no matches found", "code": 134 } ] 哪个更好的做法?(该API将在iOS和Android应用中使用)谢谢!


11
“易于推理”-这是什么意思?[关闭]
我听到过很多次其他开发人员使用该短语“宣传”某些模式或开发最佳做法的消息。在大多数情况下,当您谈论函数式编程的好处时,都会使用此短语。 短语“易于推理”按原样使用,没有任何解释或代码示例。因此,对我而言,它就像下一个“嗡嗡声”一词,更多“经验丰富”的开发人员在演讲中使用。 问题:您能否提供一些“不容易推理的”示例,以便将其与“不容易推理的”示例进行比较?

14
使用反射是否有问题?
我不知道为什么,但是当我使用反射时,我总是觉得自己在“作弊”-也许是因为我知道我要表现出色。 我的一部分说,如果它是您正在使用的语言的一部分,并且可以完成您尝试做的事情,那么为什么不使用它呢?我的另一部分说,必须有一种无需使用反射即可执行此操作的方法。我想也许这取决于情况。 使用反射时需要注意哪些潜在问题,我应该如何关注它们?尝试寻找更常规的解决方案需要花费多少精力?

20
当我只有一个大主意时,开始一个大项目的步骤是什么?[关闭]
我是计算机工程专业的学生。我一直在思考如何处理一个大项目。以更有效,更有效的方式实现目标的第一步应该是什么? 当我提出一个项目时,我不知道该如何开始工作。很多时候,我只是忽略了它。但是,我不想再忽略我的项目构想了。 现在,我问大家,有人可以分享他/她的经历吗?当我拥有一个主意时,我应该如何开始一个项目?

15
干净的代码:很少参数的函数[关闭]
我读过罗伯特·C·马丁(Robert C. Martin)的“ 清洁代码”的第一章,在我看来,这很不错,但是我怀疑,在某种程度上,有人提到函数应该具有尽可能少的参数是很有意义的(认知上)甚至可能暗示3个或更多参数对于一个函数来说太过昂贵了(我发现它非常夸张和理想化),所以我开始怀疑... 使用全局变量和在函数上传递许多参数的实践都是不好的编程习惯,但是使用全局变量可以大大减少函数中参数的数量。 所以我想听听您对此的看法,使用全局变量减少函数参数的数量是否值得?在什么情况下会呢? 我认为这取决于几个因素: 源代码大小。 平均功能参数数。 功能数量。 使用相同变量的频率。 我认为,如果源代码的大小相对较小(例如少于600行代码),则有许多函数,将相同的变量作为参数传递,并且这些函数具有许多参数,那么使用全局变量将是值得的,但是我想知道... 你有我的看法吗? 您对源代码较大的其他情况有什么看法? PS。我看到了这篇文章,标题非常相似,但是他没有问我想知道什么。

3
哪种更好的做法-辅助方法是实例还是静态?
这个问题是主观的,但是我很好奇大多数程序员是如何做到这一点的。下面的示例使用伪C#,但这也应适用于Java,C ++和其他OOP语言。 无论如何,当在我的类中编写辅助方法时,我倾向于将它们声明为静态方法,并且仅在辅助方法需要它们时才传递字段。例如,给定以下代码,我更喜欢使用方法调用#2。 class Foo { Bar _bar; public void DoSomethingWithBar() { // Method Call #1. DoSomethingWithBarImpl(); // Method Call #2. DoSomethingWithBarImpl(_bar); } private void DoSomethingWithBarImpl() { _bar.DoSomething(); } private static void DoSomethingWithBarImpl(Bar bar) { bar.DoSomething(); } } 我这样做的原因是,它使(至少在我看来)清楚地知道了helper方法可能对其他对象产生副作用-即使没有阅读其实现方法。我发现我可以快速掌握使用该实践的方法,从而帮助我进行调试。 您更喜欢在自己的代码中执行哪些操作?这样做的原因是什么?

14
大多数程序员会复制并粘贴代码吗?[关闭]
我很早就了解到,从长远来看,剪切和粘贴别人的代码需要花费更长的时间来编写自己的代码。在我看来,除非您真正理解它,否则剪切和粘贴代码可能会遇到解决噩梦的问题。 不要误会我的意思,我的意思是找到其他人的代码并从中学习是必不可少的,但我们不仅将其粘贴到我们的应用中。我们重写的概念进入我们的应用程序。 但是我一直在听到有人剪切和粘贴的消息,他们谈论这就像是通常的做法。我还看到其他人的评论,这表明这是普遍的做法。 那么,大多数程序员会剪切并粘贴代码吗?

6
检查`c> ='0'`或`c> = 48`更好吗?
与我的一些同事讨论之后,我遇到了一个“哲学上的”问题,即如何按照最佳实践来对待Java中的char数据类型。 假设有一个简单的场景(显然,这只是一个非常简单的示例,目的是为我的问题赋予实践意义),在给定String's'作为输入的情况下,您必须计算其中存在的数字字符的数量。 这些是2种可能的解决方案: 1) for(int i=0; i<s.length(); i++) { if(s.charAt(i) >= 48 && s.charAt(i) <= 57) { n++; } } 2) for(int i=0; i<s.length(); i++) { if(s.charAt(i) >= '0' && s.charAt(i) <= '9' ) { n++; } } 两者中哪一个更“干净”并符合Java最佳实践?

4
过多的抽象会不好吗?
作为程序员,我觉得我们的目标是在给定的域模型和业务逻辑上提供良好的抽象。但是这种抽象应该在哪里停止呢?如何在抽象及其所有优点(灵活性,易于更改等)以及易于理解代码及其所有优点之间进行权衡。 我相信我倾向于写过于抽象的代码,但我不知道它有多好。我经常倾向于将其编写为某种微型框架,包括两部分: 连接在微框架中的微模块:这些模块易于理解,开发和维护为单个单元。这段代码基本上代表了实际执行功能的代码,如需求所述。 连接代码;现在我相信这里是问题所在。该代码趋于复杂,因为它有时非常抽象,一开始很难理解。之所以会出现这种情况,是因为这仅仅是纯粹的抽象,实际上基础和业务逻辑是在所提供的代码1中执行的;因此,该代码一旦经过测试就不会更改。 这是编程的好方法吗?难道说,变更代码在许多模块中非常分散,并且很容易理解,而变更代码与抽象POV相比却非常复杂?如果所有代码都统一地复杂(即代码1更复杂和相互链接,而代码2更简单),以使通过它的任何人都可以在合理的时间内理解它,但是更改很昂贵,或者上述解决方案是好的, “更改代码”非常容易理解,调试,更改,“链接代码”有点困难。 注意:这与代码的可读性无关!1和2处的代码都是可读的,但2处的代码具有更复杂的抽象,而代码1则具有简单的抽象。

6
有必要遵循防御性编程实践以获取永远不会公开获得的代码?
我正在编写纸牌游戏的Java实现,因此我创建了一种特殊的Collection类型,称为“区域”。不支持Java的Collection的所有修改方法,但是Zone API中有一种方法,该方法move(Zone, Card)可将Card从给定的Zone移到其自身(由package-private技术实现)。这样,我可以确保没有任何卡被带出区域并消失。它们只能移到另一个区域。 我的问题是,这种防御性编码有必要吗?这是“正确的”,并且感觉像是正确的做法,但这并不意味着Zone API永远不会成为某些公共库的一部分。这只是给我的,所以这有点像是在保护我自己的代码,以免仅使用标准Collections可能会提高效率。 我应该把这个区域创意带到多远?谁能给我一些建议,让我考虑在我编写的类中保存合同,特别是对于那些不会真正公开可用的类,应该考虑些什么?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.