如何避免SRP混乱?

时间:2010-12-09 18:17:50

标签: php oop

通过应用SRP原则,您必然会有很多课程。如果这对小项目工作正常,你如何处理和组织大型项目的课程数量?

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

3 个答案:

答案 0 :(得分:5)

这适用于所有类型的库。不只是SRP。

课程/功能的组织可能很令人头疼,但实际上你需要记住的只有一些事情。

  1. 计划。
  2. 定义并保持正确的命名 文件,类的约定, 文件夹,方法/功能和 变量
  3. 将您的班级分成名称空间 或者至少进入子文件夹 该系统的主要肌群。
  4. 文件:内部(好评, 文件标题和公共方法 列表)和外部(维基, readmes,excel,something)
  5. By 2我的意思是:/library/muscleGroup/useType_nameOfClass.php用于文件/文件夹,其中useType类似于“factory”“abstract”“data / dto”或您正在使用的任何模式。然后,在每个文件中,类应该与nameOfClass完全相同,并且每个方法名称应严格遵循模式。 [Action][on what][with what conditions]并保留一份行动清单和“最新情况”并严格遵守这些行为。

    这样做,您无法复制功能,因为您可以轻松找到所需内容的正确类和方法。由于它们具有逻辑名称,例如Get_User_ByIdGet_Transactions_ByNewestCombine_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
    

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

    • 获取
    • 删除
    • 移动
    • 合并
    • 联合

    样本列表“On What”:(应该是特定于应用程序的)

    • 用户
    • 成分
    • 配方
    • 测量
    • 权限
    • 品牌
    • 广告

答案 1 :(得分:3)

取决于项目,但如果它有很多没有太多实际业务规则的CRUD,我会选择一个简单的结构,脚本文件支持该决定。我过去做过这个,它速度超快,但变化缓慢。通常称为Eric Evans的Smart UI反模式:

  

“将所有业务逻辑放入   用户界面。切断申请   进入小功能和实施   它们作为单独的用户界面,   将业务规则嵌入到   他们。使用关系数据库作为   共享数据存储库。使用   最自动化的UI构建和可视化   编程工具可用[埃文斯   第77页]。“

如果您正在制作具有大量实际业务规则并且有更多时间的东西,或者您希望它具有较长的使用寿命:

  1. 弄清楚系统的任务,并尝试将这些任务作为更高级别的命令来实现。
  2. 让那些更高级别的命令操纵低级核心类,并从ui调用。我一直在使用Zend Framework,我让控制器调用这些高级命令,但这在大多数地方真的太过分了。我将这些类存储在Application文件夹中,除以模块(会计,电子邮件等)。
  3. 较低级别的类保存在Domain文件夹中,该文件夹也分为与Application文件夹相同的模块。 Domain类表示正在处理的对象(Email,ClassCredit)。它们很小,只能完成对这个概念有意义的任务。
  4. 至于可以进一步帮助您的资源,请查看Bob Martin的Clean Code和Eric Evans的域驱动设计(不能发布其他链接)。这两本书都很精彩,分别提供战术和战略步骤来解决这些混乱局面。

答案 2 :(得分:1)

文件夹结构

Zend Framework按功能组织他们的类,并将其命名为。例如,课程Zend_Controller_Action_Helper_AjaxContext位于/library/Zend/Controller/Action/Helper/AjaxContext.php

这有两个目的:文件夹组织和功能的逻辑分离。你总会遇到“记住你构建的东西”的问题,但是通过应用SRP并将功能置于逻辑上“最正确”的地方,你可以减少混乱。

IDE

在处理很多课程时,智能IDE至关重要。允许开发人员在项目中的任何位置快速查找类,文件名和方法的快捷方式使得处理数千个类几乎是微不足道的。

使用与上面相同的示例,应该能够以各种方式找到该类:

  • 查找班级名称。在EclipsePDT中,查找类(类型)就像ctrl+shift+T一样简单。 (注意:老实说,我不知道这是eclipse的功能还是PDT插件的补充)。
  • 同样,您可以使用ctrl+shift+R(资源)按文件名查找。
  • 或通过班级ctrl+shift+m
  • 中的方法