如何避免SRP混乱?

2024-03-04

通过应用 SRP 原则,您必然会有很多课程。如果这对于小型项目来说效果很好,那么您如何处理和组织大型项目中的类数量?

  • 你如何组织文件夹结构?
  • 你怎么记得你建造了什么?
  • 你怎么知道其他人是否没有在其他类中构建相同的功能?

这适用于所有类型的图书馆。不仅仅是建议零售价。

类/函数的组织可能会让人头疼,但实际上您只需要记住几件事。

  1. Plan.
  2. 定义并保留正确的命名 文件、类的约定, 文件夹、方法/函数和 变量。
  3. 将您的类分解为命名空间 或至少进入子文件夹 系统的主要肌肉群。
  4. 文档:内部(好的评论, 文件标题和公共方法 列表)和外部(wiki, 自述文件、Excel 等)

2 我的意思是:/library/muscleGroup/useType_nameOfClass.php对于 useType 类似于“factory”“abstract”“data / dto”或您正在使用的任何模式的文件/文件夹。然后,在每个文件中,类应该与 nameOfClass 完全相同,并且每个方法名称应该严格遵循某种模式。[Action][on what][with what conditions]并保留一份行动清单和“做什么”并虔诚地坚持下去。

这样做,您就无法重复功能,因为您可以轻松找到适合您想要的东西的正确类和方法。因为它们有逻辑名称,例如Get_User_ById and Get_Transactions_ByNewest or Combine_Ingredients_FromRecipes.

最后一个上面可能有这样的评论:

// Combines many recipes into one ingredient list
//   $recipes = an array of recipe objects
//   returns an array of ingredient objects with their correct quantities

示例操作列表:(应该非常通用并适用于任何应用程序)

  • Get
  • Set
  • Delete
  • Move
  • Merge
  • Combine

“关于什么”示例列表:(应特定于应用程序)

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

如何避免SRP混乱? 的相关文章

  • Azure 上的“phpcomposer.phar install”出现“无法终止进程”错误

    我正在尝试将我的 Symfony 2 应用程序部署到 Microsoft Azure 网站云 为此 我按照本指南中的步骤操作http symfony com doc current cookbook deployment azure web
  • 将数组拆分为特定数量的块

    我知道array chunk 允许将数组拆分为多个块 但块的数量根据元素的数量而变化 我需要的是始终将数组拆分为特定数量的数组 例如 4 个数组 以下代码将数组分为 3 个块 两个块各有 2 个元素 1 个块有 1 个元素 我想要的是将数组
  • 如何从字符串中删除所有数字?

    我想删除字符串 0 9 中的所有数字 我写了这段有效的代码 words preg replace 0 words remove numbers words preg replace 1 words remove numbers words
  • PHP文件上传

    如果我想在文件名转到服务器的永久位置 而不是临时位置 之前更改文件名 我该如何执行此操作 代码如下
  • 检查文件权限

    我怎样才能检查file permissions 无需通过运行操作系统特定命令passthru or exec Use 文件权限 http php net fileperms功能 clearstatcache echo substr spri
  • 如何使用 Google 帐户对我们网站中的用户进行身份验证

    如何在我们的网站中使用 Google 帐户对用户进行身份验证 我希望用户重定向到谷歌登录页面 然后将他重定向到我的网站 我想要这个 PHP 实现 你要OAuth http code google com apis accounts docs
  • “pdo_mysql”已禁用,我无法启用它。我在 iMac 7.1 OSX 10.6.8 上安装了 MAMP v. 3.0.4

    pdo mysql 已禁用 我无法启用它 我在 iMac 7 1 OSX 10 6 8 上安装了 MAMP v 3 0 4 在我的 phpinfo 页面上 我可以看到唯一启用的 PDO 是 sqlite 如果我查看 php 5 5 10 扩
  • 如何在 Zend Framework 中处理移动设备?

    我接手了一个噩梦般的项目 我正在迁移一个写得很差的站点 并慢慢地将其迁移到 Zend Framework 应用程序中 不幸的是 我没有时间做补救工作 使这变得可以忍受 也许是一个或两个模型 我现在被告知该网站很快就会有移动版本 建议是克隆旧
  • PHP - 扩展 __construct

    我想知道你是否可以帮助我 我有两个类 一个扩展了另一个 B 类将由各种不同的对象扩展 并用于常见的数据库交互 现在我希望 B 类能够处理其连接和断开连接 而无需来自 A 类或任何外部输入的指示 据我了解 问题是扩展类不会自动运行其 cons
  • 如何将粘在一起的单词分开?

    我有很多命名不好的文件 videoofmegoingtoschool avi 是否有一个库或某种算法可以正确地将其分离 video of me going to school avi 我不认为那里有什么 我可以想象一个程序 它使用单词词典并
  • 在 Laravel 中动态设置数据库连接和语言

    我有 3 个域指向同一个Laravel应用 我想要的是每个人都连接到自己的数据库并根据 TLD 加载自己的语言文件 我可以在哪个文件中设置这些设置 我可以直接在配置文件中执行此操作 或者可以在加载配置之前执行某些事件 我拥有的是一个简短的函
  • 如何处理 AJAX 请求中的会话超时

    我相信你们都熟悉使用 AJAX 的投票系统 嗯 看那边 我有类似的东西 当你投票赞成或反对时 它使用 AJAX 从 votes php 请求新值 问题是我正在使用会话来获取用户 ID 因此一个人只能投票一次 如果他们在页面上坐了一个小时然后
  • 模拟/存根在 PHPUnit 中实现 arrayaccess 的类的对象

    这是我正在为其编写测试套件的类的构造函数 它扩展了 mysqli function construct Config c store config file this gt config c do mysqli constructor pa
  • 在 null laravel 上调用成员函数 save()

    大家好 我正在使用 laravel 5 多态关系将数据保存在数据库中 但我遇到了一些问题 当我尝试将数据保存在数据库中时 它会抛出此错误 对 null 调用成员函数 save 我不知道为什么我会遇到这个错误 我正在关注多态关系的本教程在 L
  • 具有更改用户代理上下文的 file_get_contents 不起作用

    我正在尝试获取页面的阅读数和点赞数 网址是 https mp weixin qq com s NPavBeHc8VdWXeSL6kfLRg https mp weixin qq com s NPavBeHc8VdWXeSL6kfLRg 您必
  • CSS 无法从带有 php“includes”的相对路径工作

    文件夹结构 index php includes header html css style css 我的主项目文件夹中有 2 个子文件夹 一个是名为 includes 的文件夹 另一个名为 css 我有我的 index php主文件夹中的
  • PHP 错误警告:参数 1 应该是引用

    我 熟悉 PHP 我的朋友的网站因错误而崩溃 Warning Parameter 1 to Some function name expected to be a reference value given in public html i
  • 如何确保在 PHP 的“foreach”循环中重置该值?

    我正在写一个简单的 PHP 页面和一些foreach使用了循环 以下是脚本 arrs array a b c foreach arrs as arr if substr arr 0 1 b echo This is b End of fir
  • 监听文件夹和文件(更改)

    可以直接在 PHP 或 Node 上监听文件夹和文件的更改 通过事件 还是我需要创建自己的方法来执行此操作 Example 我需要听文件夹 user 如果我将一些文件添加到该目录中 PHP 或 Node 会收到信息并运行PathEvent
  • 如何在 PHP 中从字符串类名实例化? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何创建返回方法名称的新实例 不幸的是我收到这个错误 错误 类名必须是有效的对象或字符串 这是我的代码 class Foo public f

随机推荐

  • 使用 XAMPP Server Linux (Ubuntu) 在 Laravel 4 上迁移时找不到驱动程序

    我已经安装了 Laravel 4 1 一切正常 但是当我尝试使用迁移时 它会抛出一个 PDO 异常 PDO异常 找不到驱动程序 我在 StackOverFlow 上找到了很多答案 但不幸的是 没有一个能解决我的问题 我尝试启用 pdo 扩展
  • 将 NaN 值替换为每列的特定值

    我有一个包含值以及一些 NaN 的数据框 现在我有了列的平均值 我想将特定列的平均值插入到 NaN 值中 例如 ColA 和 ColB 的 NaN 被替换为我有的平均值 https i stack imgur com vAr2p png 我
  • Java 11 迁移:可从多个模块访问包问题

    我正在将 Java 8 项目迁移到 Java 11 使用的 IDE 是 Eclipse 2020 09 我还没有模块化该项目 对于以下进口 import org w3c dom Document import org w3c dom Ele
  • 生成 parquet 文件 - R 和 Python 之间的差异

    我们已经生成了一个parquet文件输入Dask Python 并与Drill R 使用Sergeant包 我们注意到几个问题 的格式Dask i e fastparquet has a metadata and a common meta
  • 将由空格分隔的字符串中的单词分配给变量? C++ [qt] [重复]

    这个问题在这里已经有答案了 我只是想知道将空格分隔的字符串中的单词分配给变量的技术术语叫什么 这样我就可以查找它的教程 任何术语 链接或解释将不胜感激 你可以这样做 QString lineText some sample words QS
  • 在 Sitecore MVC 中的视图中获取媒体 url

    我有一个存储在媒体库中的 mp3 文件 它在项目的媒体字段中被引用 我可以通过在 Web 表单或类中执行 Sitecore Resources Media MediaManager GetMediaURL 来获取 URL 但是如何在 MVC
  • 在 smartGWT 中打开/保存文件

    我已经实现了 RPCService RPCServiceAsync 和 RPCServieImpl 单击按钮后 将调用服务器端的服务 它将从数据库中获取数据并创建文件 创建文件后 我需要在客户端打开该文件 并需要提示一个包含打开 保存选项的
  • ServiceStack - 依赖关系似乎没有被注入?

    我有以下存储库类 public class Repository
  • 微服务架构中的数据库位置

    我们有一个整体应用程序 现在正在使用容器将其转换为微服务架构 我们的微服务是stateful 即他们需要从数据库插入 检索数据 根据微服务架构 每个微服务应该有自己的数据 即我们案例中的数据库 我的问题是where应该部署每个微服务的数据库
  • 实体框架数据库优先与 Oracle 数据库

    我正在开发一个 ASP NET WebForms 应用程序 其中实体框架数据库优先与 SQL Server 连接 并且我想将相同的实体数据模型与 Oracle 数据库连接 我的担忧是 如何在我的开发机器上安装 Oracle 数据库引擎进行测
  • 使用用户定义的运行时属性的 UIView Shadow

    当我使用 用户定义的运行时属性 时 我很难显示阴影 如果我使用代码 它似乎工作完全正常 如下所示 func formatView view UIView cornerRadius Bool if cornerRadius view laye
  • Python Selenium Javascript链接点击无法执行

    我将 Selenium for Python 与 PhantomJS Ghost 驱动程序一起使用 以便单击 href 中包含 Javascript 的链接 例如来自this https structuredginniemaes ginni
  • MongoDB 根据 _id 统计每分钟新文档数

    我想创建每分钟存储多少新文档的统计数据 由于具有标准 ObjectID 的 id 字段已经包含文档创建的时间戳 我认为应该可以以某种方式使用它 在 Stackoverflow 上 我发现了以下映射归约代码 可以在有用于创建数据的专用字段时完
  • 从具有特定窗口坐标的命令行启动 Google Chrome

    我正在尝试找到一个 shell 命令 该命令将使用特定的 x 和 y 坐标打开 Google Chrome 以便我可以在窗口打开时设置窗口的位置 是否可以使用命令行参数来执行此操作 我需要修改以下命令才能实现此目的 google chrom
  • python中不均匀的子图

    在 python 中创建 3 3 子图矩阵的最佳方法是什么 第一列包含 3 个子图 第二列包含 3 个子图 第三列包含2 个次要情节 最后两个子图应具有相同的大小 这意味着它们将在其他两列的中间图的中间相遇 我尝试使用 gridspec 来
  • 当应用程序未处于焦点或位于另一个选项卡中时,WaitForSeconds 停止工作

    我用 Unity 制作了 WebGL 游戏 不需要每个帧都进行一些计算 因此我将它们放在协程中 但当游戏在后台运行时 协程的工作速度会比平时慢 并且会额外等待 5 10 秒 例如 士兵跑向我 我向他们发射子弹以杀死他们 当他们进入射程时 他
  • 引导程序上的下拉子菜单不起作用

    我只是想问为什么引导程序上的下拉子菜单不起作用 我只是按照此链接中的说明操作 http getbootstrap com 2 3 2 components html http getbootstrap com 2 3 2 component
  • 从 shell 脚本将密码输入 openssl 命令

    我正在尝试将 p12 从 shell 脚本转换为 pem 无需任何用户输入 我可以将密码作为脚本中的变量 所以当我打电话时 openssl pkcs12 in p12 out cert pem nodes 终端打印 输入导入密码 并等待输入
  • Jersey 2.x 自定义注入注释与属性

    我正在从 DropWizard 0 7 1 迁移到 0 8 1 这包括从 Jersey 1 x 迁移到 2 x 在我的 使用 Jersey 1 18 1 的实现 我有一个MyProvider 为了简单起见 更改了所有类名 实现Injecta
  • 如何避免SRP混乱?

    通过应用 SRP 原则 您必然会有很多课程 如果这对于小型项目来说效果很好 那么您如何处理和组织大型项目中的类数量 你如何组织文件夹结构 你怎么记得你建造了什么 你怎么知道其他人是否没有在其他类中构建相同的功能 这适用于所有类型的图书馆 不