Questions tagged «programming-practices»

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

3
将语言编程为*与用Ruby编写C代码
代码完成规定您应该跳投码成一门语言,而不是代码在它。他们的意思是 不要将您的编程思想仅局限于语言自动支持的概念。最好的程序员考虑他们想要做什么,然后他们评估如何使用可供使用的编程工具来实现其目标。(第34.4章) 不管手头语言的优点和缺点如何,这是否会导致在每种语言中使用一种编程风格? 或者,以更易回答的格式提出问题: 您是否建议人们应该尝试使用一种语言的特征尽可能整齐地编码一个问题,还是应该整体上搜索最优雅的解决方案,即使那意味着您需要实现本机不存在的可能尴尬的构造用自己的语言?


9
应对无法解决的无尽项目
我们有一个大型的(1200多个小时)网站,其中包含很多技术债务。这主要是由以下(通常)原因引起的。 在开发过程中来来往往的多个程序员。 在开发过程中更改规格。 (在短时间内)添加了许多附加功能。 客户需要大量新功能,这基本上归结为每周进行10多个小时的项目开发。 由于技术债务,我们花费了大量时间来修复或调查问题,这些问题通常是由以下原因之一引起的: 一个无耻,愚蠢的虫子,让人哭泣。 以上是产生新功能的原因,因为我们并未预见到新功能会在所有地方产生影响。 我们面临的其他一些问题(服务器迁移,升级) 我们每天都有问题,我们试图采取以下措施来阻止这种情况: 创建有关网站导入,付款和一般工作的技术文档。 一周开始时开会-讨论当前的问题或改进以及应如何解决。 有一个测试计划。程序员A测试B,B测试C和C测试A。然后我们的项目经理将进行一些测试。关于此功能的影响,我们将其投入到临时环境中,并让客户自行检查。 问题在于问题一直在发生……而我们却无法控制它。新功能仍然会导致错误,而旧错误会一直打招呼。不知何故-也许由于项目的规模-我们似乎无法控制这个项目。 我假设有很多程序员正在从事更大的项目。这就是为什么我要问我的问题: 在大型项目中,我们应该怎么做,或者您如何避免这些问题? 较小的修改,更多信息: 我们使用版本控制(SVN)。 我们有DTAP开发过程。

3
单元测试,是在框架之前还是之后编写它们?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 这是我在这里的第一个问题,因此我将简短地说明。 在编写单元测试时,应该在为它们创建基础框架之前还是之后编写它们?这是我的首席执行官和总裁之间进行的一次讨论,我希望您对此发表意见。 就个人而言,我总是先编写代码,然后编写单元测试,但是您呢?

4
对某些用户隐藏/禁用功能
可以说我有该应用程序的免费和付费版本。付费版本是免费版本在用户可用功能方面的超集,这意味着付费版本将具有免费应用程序的所有功能以及其他功能。 是否存在根据启动时加载的标志(例如,免费/付费)来切换功能可用性的模式? 我不喜欢到处都有以下代码块的想法: if(isFreeVersion){ // ... } else { // ... } 每个版本都没有2个单独的git分支是不可行的,因为这意味着要维护2个(或更多)代码源,这在一般情况下似乎不切实际,并在此处进行了更多讨论:在Version Control中从同一代码库维护两个单独的软件版本。 有办法做到这一点,同时仍然只有一个代码库,并且不会用检查自由/已付费标志的条件语句来乱扔代码吗? 我敢肯定这已经被讨论过很多次了,并且我肯定有一些解决这个问题的模式,但是我只是找不到它。 我们使用Android / Java。

5
最佳实践-如果在函数调用周围进行包装,而在函数处于保护状态时添加早退出
我知道这可能是非常特定于用例的,但是我发现自己经常想知道这一点。是否有一般首选的语法。 我不是在问函数中最好的方法是什么,我是在问应该早退还是应该不调用函数。 如果在函数调用周围包装 if (shouldThisRun) { runFunction(); } 具有if(保护)功能 runFunction() { if (!shouldThisRun) return; } 如果多次调用此函数,则后一种选项显然有可能减少代码重复,但是有时在此处添加它会带来错误,因为那样您可能会丢失该函数的单一职责。 这是一个例子 如果我有一个updateStatus()函数,该函数仅更新某些事物的状态。如果状态已更改,我只希望状态更新。我知道代码中状态可能发生变化的地方,也知道其他地方可能发生了变化。 我不确定它是否只是我自己,但是检查此内部函数感觉有点脏,因为我想使该函数尽可能保持纯净-如果我调用它,则希望状态得到更新。但是我无法说出将电话包裹在支票中的几个更好的地方,我知道它可能不会改变。

6
如果我的对象是可变的,在函数式编程的上下文中会出什么问题?
我可以看到可变对象与不可变对象(如不可变对象)的好处,消除了由于共享和可写状态而导致的多线程编程中的许多疑难解答问题。相反,可变对象有助于处理对象的身份,而不是每次都创建新的副本,因此特别是对于较大的对象,还可以提高性能和内存使用率。 我想了解的一件事是,在函数式编程的上下文中拥有可变对象可能会出错。像告诉我的要点之一是,以不同顺序调用函数的结果不是确定性的。 我正在寻找一个真正的具体示例,其中很明显在函数编程中使用可变对象会导致什么问题。基本上,如果它不好,那么不管是面向对象还是功能编程范例都不好,对吗? 我相信,在我自己的发言下面,我可以回答这个问题。但是我仍然需要一些例子,以便我能更自然地感受到。 OO通过诸如封装,多态等工具帮助管理依赖性并编写更容易维护的程序。 函数式编程也具有促进可维护代码的动机,但是通过使用样式消除了使用OO工具和技术的需要-我认为其中之一是通过最小化副作用,纯函数等。

5
遵循我所知道的路径,然后尝试实施正确的编码实践,还是从良好的编码实践开始,并尝试弄乱我的方法?
首先,我想说我习惯于做过程编程,这是我的爱好-我正在尝试用几种语言学习OOP,并了解理论,而不是实践。 我有一个我想构建的宠物项目,特别是在带有数据库后端的PHP中(根本不在乎哪个)。我的主要原因是该应用程序可以在任何设备上使用,因此WebApp似乎是合乎逻辑的选择。 我了解要构建可维护的PHP WebApp,应使用OOP,类,框架,库等。这听起来很合逻辑,因此我决定尝试一些流行的应用程序。但是,在整个周末都只是尝试它们并尝试阅读教程之后,试图将这些教程适应我的小项目,我既困惑又沮丧。 我决定(主要是为了进行概念验证)在另一个程序(Microsoft Access)中构建该应用程序,并在短短几个小时内实现了我的主要目标-除了Web部件。 我的问题是,我应该遵循我所知道的道路,然后尝试实施正确的编码实践,还是应该从良好的编码实践入手,并尝试弄乱自己的方式?对于这个项目,我希望它可以在GitHub上开源,因此我将对使用和更改我的代码的其他人开放,但是我也知道,如果代码编写不当,将很难聚集编码人员来提供帮助。

2
如何在C#中封装“全局”变量?/最佳实践
想要改善这篇文章吗?提供此问题的详细答案,包括引文和为什么答案正确的解释。答案不够详细的答案可能会被编辑或删除。 在C#中,封装需要在多种方法中使用的变量的最佳实践是什么?可以简单地在这两个方法上方的类顶部声明它们吗? 另外,如果我从配置文件中使用应用程序设置,是否应该使用吸气剂?像这样... private string mySetting{ get { return WebConfigurationManager.AppSettings["mySetting"]; } } 什么是最佳做法?

3
有关方法参数类型,返回类型和属性类型的具体性的规则
前一段时间,我读到一种关于方法参数类型,返回类型和属性类型的具体性的“经验法则”,但我只是不记得了。 它说了一些有关使返回类型尽可能具体,而参数类型尽可能抽象的事情……反之亦然。 我不知道这实际上是一个好建议还是坏建议,因此,如果您对此有自己的想法,请发表评论。 干杯。


8
什么时候“优化代码” ==“构造数据”?
ycombinator最近发表的一篇文章列出了关于优秀程序员原理的评论。 #7.优秀的程序员:我优化代码。更好的程序员:我构造数据。最佳程序员:有什么区别? 承认主观和有争议的概念-有人对这意味着什么有立场吗?是的,但是我以后想根据自己的想法编辑这个问题,以免预先回答这些问题。

7
入门级工程师有关内存管理的问题
自从我担任入门级软件开发人员职位以来已经过去了几个月。现在,我已经克服了一些学习上的困难(例如,语言,行话,VB和C#的语法),我开始专注于更深奥的主题,以编写更好的软件。 我向同事提出的一个简单问题是“我专注于错误的事情”。尽管我尊重这位同事,但我不同意这是要重点关注的“错误”。 这是代码(在VB中),然后是问题。 注意:函数GenerateAlert()返回一个整数。 Dim alertID as Integer = GenerateAlert() _errorDictionary.Add(argErrorID, NewErrorInfo(Now(), alertID)) 与... _errorDictionary.Add(argErrorID, New ErrorInfo(Now(), GenerateAlert())) 我最初编写了后者,并用“ Dim alertID”将其重写,以便其他人可能会更容易阅读。但是,这是我的关注和问题: 如果使用Dim AlertID编写此消息,则实际上会占用更多内存。有限但更多,是否应该多次调用此方法,否则会导致问题?.NET将如何处理此对象AlertID。在.NET外部,应该在使用后手动处理对象(在子程序末尾附近)。 我想确保我成为一个知识渊博的程序员,而不仅仅是依靠垃圾回收。我在想这个吗?我是否专注于错误的事情?

2
ARC下的属性:始终还是仅公开?
在不到两年前,阅读了Robert McNally谦虚的文章“代码指令:Objective-C编码的最佳实践”之后,我采用了对我的Objective-C类的几乎每个数据成员使用属性的做法( (截至2012年5月的第三条诫命)。McNally列出了这样做的原因(我的重点): 属性强制执行访问限制(例如只读) 属性强制执行内存管理策略(强,弱) 属性提供了透明实现自定义setter和getter的机会。 具有自定义setter或getter的属性可用于强制执行线程安全策略。 使用单一方法访问实例变量可提高代码的可读性。 我将大多数属性都归为私有类别,因此编号1和4通常不是我遇到的问题。参数3和5更加“柔和”,并且使用正确的工具和其他一致性,它们可能会成为问题。最后,对我而言,这些论点中最具影响力的是数字2,内存管理。从那时起,我一直在这样做。 @property (nonatomic, strong) id object; // Properties became my friends. 在我的最后几个项目中,我转而使用ARC,这使我怀疑为几乎所有内容创建属性仍然是个好主意还是有点多余。ARC为我负责内存管理Objective-C对象的管理,strong如果您声明ivars ,则对于大多数成员而言,它可以正常工作。无论如何,在ARC之前和之后,您都必须手动管理C类型,并且这些weak属性大部分是公共属性。 当然,对于需要从类外部访问的任何内容,我仍然使用属性,但是这些属性仅是少数几个属性,而大多数数据成员在实现标头下被列为ivars。 @implementation GTWeekViewController { UILongPressGestureRecognizer *_pressRecognizer; GTPagingGestureRecognizer *_pagingRecognizer; UITapGestureRecognizer *_tapRecognizer; } 作为一个实验,我更加严格地执行了此操作,并且从所有属性移开属性都有一些不错的积极副作用。 数据成员代码要求(@property/ @synthesize)缩小为ivar声明。 我的大部分self.something参考资料都整理到_something。 可以轻松地区分哪些数据成员是私有的(无效)和哪些数据成员是公共的(属性)。 最后,“感觉”起来更像是苹果打算将其用于房地产的目的,但这是主观的猜测。 关于一个问题:我正在慢慢地向黑暗面发展,使用越来越少的属性来支持实现错误。您能否为我提供一些理由,说明为什么我应该坚持对所有内容都使用属性,或者证实我当前的思路,为什么我应该仅在需要的地方使用更多的ivars和更少的属性?双方最有说服力的答案都会得到我的认可。 编辑:麦克纳利(McNally)在推特上说:“我认为坚持使用房地产的主要理由是:一种做所有事情的方法,那就是做所有事情(包括KVC / KVO)。”

5
公司在开发时如何隐藏网站?
我是新来的人,也是刚入职的19岁新PHP开发人员,所以我不确定这是如何工作的。许多公司在开发其网站时都会隐藏其网站,以免被索引。从搜索引擎隐藏html5 / css和php / mysql的方法有哪些?如果我没看错,这些是技巧: 离线开发:使用本地存储呈现html / css;不知道PHP / mysql将如何工作。 使用.htaccess阻止访问 使用VPN阻止访问。

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.