编写只做一件事并把它做好的程序

2023-12-20

我可以通过封装掌握“做一件事”部分,依赖注入 http://en.wikipedia.org/wiki/Dependency_injection, 最少知识原则 http://en.wikipedia.org/wiki/Law_of_Demeter, and 你不会需要它 http://en.wikipedia.org/wiki/You_Ain%27t_Gonna_Need_It;但我如何理解第二部分“做好”?

给出的一个例子是这样的概念完整性,在相同的条件下给出亚格尼文章 http://en.wikipedia.org/wiki/You_Ain%27t_Gonna_Need_It:

例如,在允许添加项目、删除项目或修改项目的特征中,完整性还可以用于推荐“重命名项目”。

然而,我发现这样的推理很容易被滥用到功能蔓延,从而违反“做一件事”部分。

因此,什么是查看功能的试金石,而不是属于“做得好”类别(因此,将其包含到函数/类/程序中)或另一个“做一件事”类别(因此,排除它) ?

第一部分“做一件事”最好通过 UNIX 来理解ls命令作为反例,因为它包含过多的用于格式化其输出的标志,这些标志应该完全委托给另一个外部程序。但我没有一个很好的例子来证明第二部分“做得好”。

有什么好的例子可以说明删除任何进一步的功能将使其无法“做好”?


我认为“做得好”与功能的实现质量一样重要,而不是一组功能的完整性(在您的示例中具有重命名,以及创建和删除)。

做得好体现在很多方面,一些思维方式:

响应“特殊”输入的行为。例如,计算一些整数的平均值:

int mean(int[] values) { ... }

如果数组有零个元素,这会做什么?如果项目总数超过 MAX_INT?

性能特点。随着数据量的增加,是否对行为给予了足够的关注?

依赖失败。如果我们的实现依赖于其他模块或基础设施,那么当这些模块或基础设施失败时会发生什么。示例:文件系统已满,数据库已关闭?

关于功能蔓延本身,我认为您在这里确定紧张局势是正确的。您可能会考虑一件事:您不需要实现每个功能,因为很明显可以轻松添加功能而无需完全重写。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编写只做一件事并把它做好的程序 的相关文章

  • 单一职责原则对于验证意味着什么

    单一责任原则是否意味着您的验证规则应该位于实体外部 如果是这样 您是否为每个验证规则使用一个类 我通常将其解释为 实体 和实体的验证应该是单独的问题 我通常会使用可以验证整个实体的单个类 但我认为没有理由通过不允许该类使用其他类来限制其实现
  • 这是单一责任原则的一个例子吗?

    我制作了以下代码示例来学习如何使用泛型方法签名 为了得到一个Display 方法对于客户和员工 我实际上开始更换我的IPerson接口与人抽象类 但后来我停了下来 想起鲍勃叔叔在播客中向斯科特 汉塞尔曼讲述了单一责任原则其中你应该有很多小类
  • 更改基本 MVVM 的当前实现以遵循 SOLID 模式

    我一直在使用在线提供的 MVVM 示例中通常提到的基本设计模式编写所有 MVVM 应用程序 我遵循的模式如下所述 Model 本节包括 DTO 类及其属性和接口 IDataService 等 public class Employee pu
  • 好的面向对象设计可以像好的关系数据库设计那样形式化吗?

    在数据库世界中 我们有标准化 您可以从设计开始 逐步推进步骤 最后得到正常形式的数据库 这是在数据语义的基础上完成的 可以被认为是一系列的设计重构 在面向对象的设计中 我们有 SOLID 原则和各种其他特殊的指导方针来实现良好的设计 您是否
  • 单一职责原则 - 一个很难看到的例子?

    我刚刚读到了单一职责原则 Robert C Martin 有一次指出 有时很难看出一个类具有多个职责 谁能提供这样一个类的例子吗 考虑一个具有方法的 HTTP 类 获取 网址网址 SendRequest 字符串请求 这两种方法都与 HTTP
  • 您能用一个很好的 C# 示例来解释里氏替换原理吗? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 您能用一个很好的 C 示例来解释里氏替换原理 SOLID 的 L 以简化的方式涵盖该原理的所有方面吗 如果真的可以的话 此答案已于2013 05 13重写 请阅读评论底部的讨论
  • 编写只做一件事并把它做好的程序

    我可以通过封装掌握 做一件事 部分 依赖注入 http en wikipedia org wiki Dependency injection 最少知识原则 http en wikipedia org wiki Law of Demeter
  • 如何在运行时解析类型以避免多个 if else

    我的代码可以根据请求类型进行网络服务调用 为此 我有以下代码 public class Client IRequest request public Client string requestType request new Enrolme
  • DDD:我应该对域实体采取什么样的行为?

    我的团队非常努力地坚持将领域驱动设计作为一种架构策略 但是 大多数时候 我们的领域实体都相当贫乏 我们希望将更多的业务 域行为放在我们的域实体上 例如 Active Record 将数据访问置于实体上 我们不希望这样 因为我们很乐意使用存储
  • 当(当前)只有一个类实现接口时,您是否应该创建一个接口?

    如果有可能有其他东西可以使用它 您是否应该始终创建一个接口 或者等到实际需要它然后重构以使用接口 对接口进行编程通常看起来是合理的建议 但 YAGNI 我想也许这要视情况而定 现在我有一个代表可以包含食谱或其他文件夹的文件夹的对象 我不应该
  • 这个前提条件是否违反了里氏替换原则

    我有3节课 Account CappedAccount UserAccount CappedAccount and UserAccount两者都延伸Account Account包含以下内容 abstract class Account A
  • 单一职责原则有什么用?

    我试图理解单一职责原则 但我很难理解这个概念 我正在阅读 Lucian Paul Torje Adrian Ianculescu Kamalmeet Singh 所著的 Java 设计模式和最佳实践 一书 在这本书中我正在阅读单一职责原则章
  • 接口隔离原则只是单一职责原则的替代品吗?

    接口隔离原则只是单一责任原则的替代品吗 我认为如果我的类满足 SRP 则无需提取多个接口 因此 ISP 看起来像是解决方案 以防我们因某种原因必须破坏 SRP 我对吗 不 以一个类为例 该类的职责是保存数据 例如硬盘 将类分为读部分和写部分
  • 单一责任原则的例子是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有人可以给我一个单一责任原则的例子吗 我试图理解在实践中 一个班级承担单一责任意味着什么 因为我担心我可能每天都会违反这条规则 破坏应
  • 里氏替换原理的例子是什么?

    我听说里氏替换原则 LSP 是面向对象设计的基本原则 它是什么 它的使用示例有哪些 说明 LSP 的一个很好的例子 由鲍勃叔叔在我最近听到的播客中给出 是有时在自然语言中听起来正确的东西在代码中却不太有效 在数学中 一个Square is
  • 如何在单例类中使用DbContext?

    我实现了一个类EUMemberChecker它负责检查一个国家是否是欧盟成员国 为了完成其工作 该类包含一个方法public bool IsEUMember string country 用于检查一个国家是否是欧盟成员的数据存储在 Post
  • 当遵守里氏替换原则(LSP)时,子类可以实现额外的接口吗?

    考虑这个红宝石示例 class Animal def walk In our universe all animals walk even whales puts walking end def run Implementing to co
  • YAGNI 在编写测试时也适用吗?

    当我编写代码时 我只编写我需要的函数 这种方法也适用于编写测试吗 为了安全起见 我应该提前为我能想到的每个用例编写测试 还是应该只为遇到的用例编写测试 我认为当你编写一个方法时 你应该测试预期的和潜在的错误路径 这并不意味着您应该扩展您的设
  • 演示 TDD 和 SOLID 原则的开源项目 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我之前问过类似的问题 并得到了一些很好的答案 但我认为它太笼统了 优秀软件设计和实现的示例 https
  • 点迭代器的奇怪接口方法

    我必须迭代周边矩形的特定点 在某些情况下 我需要迭代该矩形的一条线 在其他情况下 我需要迭代整个矩形 我有一个 PointIterator 接口 struct Point double x y class PointIteratorI vi

随机推荐