Questions tagged «code-quality»

有关编写高质量代码的最佳做法的问题。

15
忽略质量/标准的软件开发人员是否对公司更好?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 选择不将代码优化,标准和最佳实践作为重中之重的软件开发人员,是否比那些担心优化,编码标准和实践的执行不如准时完成任务的开发人员创建更多有用的代码? 在进行个人绩效评估时,这些不同的方法有何比较? 这些样式在同行评鉴中如何比较? 在SDLC期间影响您的团队实施更多最佳实践的最佳方法是什么?

7
阅读旧的Java编程书籍是否有益?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 6年前关闭。 我的许多Java书都有5到10年的历史。它仍然对阅读有帮助吗,还是我应该在两年内使用某些东西。

5
您严格遵守“无依赖性周期”规则(NDepend)
背景知识:作为团队负责人,我每周大约使用一次NDepend来检查代码的质量。尤其是测试覆盖率,代码行和循环复杂性指标对我来说非常宝贵。但是,当涉及到平均化和依赖周期时,我有点……非常担心。Patrick Smacchia有一篇不错的博客文章,描述了分级的目标。 需要明确的是:在“依赖周期”下,我了解两个命名空间之间的循环引用。 目前,我正在为嵌入式仪器开发基于Windows CE的GUI框架-仅考虑Android图形平台,但针对非常低端的仪器。该框架是具有约50.000行代码的单个程序集(不包括测试)。该框架分为以下名称空间: 核心导航和菜单子系统 屏幕子系统(呈现器/视图/ ...) 控件/小部件层 今天,我花了半天的时间试图将代码提高到适当的水平(由于Resharper总体上没有问题),但是在所有情况下都存在一些依赖周期。 所以我的问题是:您严格遵守“无依赖周期”规则吗?平整真的那么重要吗?

9
为了避免人们讨厌供应商,必须避免在管理软件产品时犯什么错误?
一个先前的问题,为什么人们恨微软被关闭。这是对同一条基本思路提出的更具建设性的问题的尝试。但是,这一范围既宽又窄。它涉及一般的软件供应商,而不仅仅是Microsoft。通过只处理软件产品的管理来缩小范围。 因此,在管理单个软件产品时应采取(和/或避免)什么步骤,以确保不仅对单个产品,而且对整个公司都给予积极的尊重/喜欢/看好?

4
我应该坚持要求我们在合并回主干之前执行代码审查吗?
从StackOverflow请求重新发布: 我的工作时间很短,开发时间非常有限。我们开发了一种对我们的工作成果很重要的工具,但每天都不使用。我是团队中唯一拥有程序员背景的人。 我的问题是,在合并回主干一年多之前,我一直在推动代码审查。每个人都对此表示同意,但是仍然只有我的代码被审查过。从长假回来后,我回到了代码注释的主干,因为“这是一个丑陋的解决方案-尽快删除”和“快速修复”。另一个新功能是任命了一个人负责该工具。(最初提供给我一个职位,但由于与工作无关的原因而拒绝了我。)他认为这是一种可行的工作方式:由于我们的开发时间有限,因此我们应该走捷径。 我担心的是其他开发人员编写的代码很丑陋:经常破坏封装,编写巨大的类,在陌生的地方添加内部类,几乎没有单元测试等等。最终将不可能进一步开发该工具。 我应该坚持要求我们在合并到主干之前执行代码审查,还是我只是一个代码质量卑鄙的人?

2
只有吸气剂的接口有代码气味吗?
(我已经看到了这个问题,但是第一个答案更多的是关于自动属性而不是设计,而第二个答案则是向使用者隐藏数据存储代码,我不确定这是我想要的/我的代码做了什么,所以我想听听其他意见) 我有两个非常相似的实体,HolidayDiscount和RentalDiscount,它们表示长度折扣,即“如果至少持续numberOfDays使用percent折扣,则适用”。这些表有不同的父实体,并且在不同的地方使用,但是在使用它们的地方,有一种通用的逻辑来获取最大的适用折扣。例如,a HolidayOffer具有多个HolidayDiscounts,在计算其成本时,我们需要找出适用的折扣。租金和相同RentalDiscounts。 由于逻辑相同,因此我想将其放在一个地方。这就是以下方法,谓词和比较器的作用: Optional<LengthDiscount> getMaxApplicableLengthDiscount(List<LengthDiscount> discounts, int daysToStay) { if (discounts.isEmpty()) { return Optional.empty(); } return discounts.stream() .filter(new DiscountIsApplicablePredicate(daysToStay)) .max(new DiscountMinDaysComparator()); } public class DiscountIsApplicablePredicate implements Predicate<LengthDiscount> { private final long daysToStay; public DiscountIsApplicablePredicate(long daysToStay) { this.daysToStay = daysToStay; } @Override public boolean test(LengthDiscount discount) { return daysToStay >= …

4
在MVC中,在控制器类中具有私有的非动作功能是否被认为是一种好习惯?
有时,控制器类中的动作函数可能变得庞大而令人讨厌,使用许多行代码可以简单地控制从模型到视图的数据流。在某些时候,这些巨大的功能完全无法跟踪良好代码的基本原理,即仅做一件事,体积小,可读性强且易于管理等。 将这些巨大的动作函数分解为控制器类中较小的私有函数是否被视为一种好习惯,还是这种优化的需求意味着我们宁愿将它们添加到模型中? 我赞成在控制器中将较小的函数设为私有,以便它们与操作相关,但我听到有人争辩说,在模型变得庞大而笨拙时,控制器最好应该是简单的。只是想知道哪种方法是最可取的。
10 php  code-quality  mvc 

6
如何在类A上实现一个属性,该属性引用类A的子对象的属性
我们有这段代码,经过简化,看起来像这样: public class Room { public Client Client { get; set; } public long ClientId { get { return Client == null ? 0 : Client.Id; } } } public class Client { public long Id { get; set; } } 现在我们有三个观点。 1)这是很好的代码,因为Client应该始终设置该属性(即不为null),因此该值Client == null将永远不会发生,并且Id值始终0表示一个错误的Id(这是代码编写者的意见;-)) 2)您不能依赖调用方来知道这0是一个错误值,Id并且 Client应始终设置该属性exception,而get当该Client属性恰巧为null 时,则应抛出in 3)当Client应始终设置该属性时,您只需返回Client.Id并NullRef在该Client属性碰巧为null 时让代码引发异常。 …
9 c#  code-quality  null 

2
我们需要验证整个模块的使用情况还是仅验证公共方法的参数?
我听说建议您验证公共方法的参数: 如果他不期望为空,是否应该检查为空? 方法是否应验证其参数? MSDN-CA1062:验证公共方法的参数(我具有.NET背景,但问题不是特定于C#的) 动机是可以理解的。如果将以错误的方式使用模块,则我们希望立即引发异常,而不是任何不可预测的行为。 令我困扰的是,错误的参数并不是使用模块时唯一的错误。这是一些错误情况,如果我们遵循建议并且不希望错误升级,则需要添加检查逻辑: 来电-意外参数 来电-模块处于错误状态 外部通话-返回意外结果 外部调用-意外的副作用(两次进入调用模块,破坏了其他依赖状态) 我试图考虑所有这些情况,并用一种​​方法(对不起,不是C#的人)编写一个简单的模块: public sealed class Room { private readonly IDoorFactory _doorFactory; private bool _entered; private IDoor _door; public Room(IDoorFactory doorFactory) { if (doorFactory == null) throw new ArgumentNullException("doorFactory"); _doorFactory = doorFactory; } public void Open() { if (_door != null) throw …

3
在没有可处理的情况下,“使用”是否合适?
在C#中,using语句用于确定性地配置资源,而无需等待垃圾回收器。例如,它可以用于: 处置SQL命令或连接, 关闭流,释放基础源,例如文件, 免费的GDI +元素, 等等 我注意到,using在没有什么要处理的情况下,这种用法越来越多,但是对于调用者来说,编写一个using块而不是两个单独的命令更方便。 例子: 由Stack Overflow团队编写的MiniProfilerusing用于表示要分析的块: using (profiler.Step("Name goes here")) { this.DoSomethingUseful(i - 1); } 一种替代方法是具有两个块: var p = profiler.Start("Name goes here"); this.DoSomethingUseful(i - 1); profiler.Stop(p); 另一种方法是使用动作: profiler.Step("Name goes here", () => this.DoSomethingUseful(i - 1)); ASP.NET MVC还选择了using以下形式: <% using (Html.BeginForm()) { %> <label for="firstName">Name:</label> <%= Html.TextBox("name")%> …

2
单元测试:“如果您进行重构并且没有合作者,这是代码的味道”?
我正在阅读Roy Osherove撰写的《单元测试的艺术》。我在第7.2节“编写可维护的测试”中,作者对代码气味有此说明: 注意:当您重构内部状态以使其对外部测试可见时,是否可以将其视为代码异味(表示代码设计或逻辑中可能存在问题的迹象)?当您重构以暴露协作者时,这不是代码的味道。如果您要重构并且没有协作者,这是一种代码味道(因此您不需要存根或模拟任何东西)。 编辑:作者所说的“合作者”是依赖。他关于依赖项的一些示例是访问数据库或访问OS的文件系统的类。他在这里定义存根并开始使用“协作者”一词: 甲存根是用于现有的可控替换依赖性(或 合作者在系统中)。 作者没有此代码气味的示例,并且我在理解/描绘其外观时遇到困难。有人可以再解释一下,也许可以提供一个具体的例子?

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外部,应该在使用后手动处理对象(在子程序末尾附近)。 我想确保我成为一个知识渊博的程序员,而不仅仅是依靠垃圾回收。我在想这个吗?我是否专注于错误的事情?


4
为什么不建议使用仅设置属性?
今天,在工作中,我的一位同事审查了我的代码,并建议我删除仅设置属性,而改用一种方法。 当我们俩都忙于其他事情时,他告诉我看Property Design《框架设计指南》一书中的部分。在书中,作者只是说要避免: setter的属性比getter具有更广泛的可访问性 现在,我想知道为什么不建议使用仅设置属性?有人可以帮我澄清一下吗?

14
我如何(机智地)告诉我的项目经理或首席开发人员该项目的代码库需要认真的工作?
我刚刚加入了一个(相对)小的开发团队,该团队已经在一个项目上工作了几个月(甚至不到一年)。与大多数开发人员加入项目一样,我花了头几天来回顾项目的代码库。 由于缺乏一个更具描述性的术语,该项目(中型到大型ASP.NET WebForms内部业务线)是一场灾难。编码标准存在三个立即值得注意的问题: 该标准非常宽松。它描述了更多的什么不该做(不要使用匈牙利表示法,等..)比来办。 并非总是遵循该标准。到处都有与代码格式不一致的地方。 该标准不符合Microsoft的样式准则。我认为,偏离框架开发人员和语言规范最大贡献者所制定的准则没有任何价值。 关于第3点,也许这让我感到更加困扰,因为我花了一些时间来获取MCPD,重点是Web应用程序(特别是ASP.NET)。我也是团队中唯一的Microsoft认证专家。由于我在所有的学习,自学和在职学习(包括为认证考试做准备)中所学到的东西,因此我还发现了项目代码中的一些实例,这些实例根本无法完成。最好的办法。 我只在这个团队工作了一个星期,但是我发现他们的代码库有很多问题,我想我会花更多的时间在以“他们的方式”来做事上,而不是在那时例如,从事一个遵循更广泛接受的编码标准,体系结构模式和最佳实践的项目。这使我想到了一个问题: 我是否应该(如果是,我应该如何)向我的项目经理和团队负责人建议该项目需要进行重大翻新? 我不想走进他们的办公室,挥舞着我的MCTS和MCPD证书,说他们的项目的代码库很烂。但是我也不想保持沉默,而不必在他们的垃圾代码之上编写垃圾代码,因为我实际上是想编写高质量的软件,并且我希望最终产品稳定且易于维护。
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.