【问题标题】:Where to store static methods in OOP?在 OOP 中哪里存储静态方法?
【发布时间】:2009-12-24 19:08:02
【问题描述】:

我有一个 Blog 类,它完全按照你的想法做......创建一个对象并处理它。那部分很好很干净。

我现在需要一个函数来快速返回我数据库中所有博客的数量(不一定与博客对象相关)。因此,我认为静态方法是一个不错的选择。

我的问题是,我应该将这个静态方法存储在哪里?以下是我能想到的几个选项:

  • 将其作为静态方法存储在 Blog 类中(可能很臭,因为它与类创建的对象无关?)

  • 为博客静态函数新建一个类(好像过分了)

  • 找到一个更好的方法来解决这个问题(是的,但是什么?)

【问题讨论】:

    标签: php oop static


    【解决方案1】:

    创建一个名为BlogService 的类/接口,其中将包含count 方法。其他方法如findAllfindById等。

    【讨论】:

    • 这样就不会是静态的了?
    • 是的。静态成员使代码不那么面向对象并且难以进行单元测试。例如,静态方法不能被覆盖。
    • 我喜欢这个解决方案,但不是因为静力学的性质。我通常编码的方式是,我有一个“服务”类,它管理多个相同类型的模型,并负责对模型组的操作,以便我的模型类代表单个业务对象或实体。我发现这样做可以让我轻松地将对象的所有“管理”抽象为一个组,让模型只处理单个业务对象。
    【解决方案2】:

    大概是管理您创建的多个博客对象?如果没有,应该有,这就是方法所属的地方 - 不需要它是静态的。

    【讨论】:

    • 确实......我的控制器(MVC)管理它......但我将在几个页面上重用这个功能的需要......从我读过的内容来看,最好将它本地化功能性,对吧?
    • MVC 解决方案中的控制器(我个人认为 MVC 是裤子)应该没有业务级别的知识 - 它应该使用业务级别的对象来完成工作,而业务级别的对象是你的函数应该驻留。
    • 又名,型号?对不起......如果不清楚......我肯定会进入一个新世界
    • 而且,如果是这样的话...我想如果我正在创建一个业务级别的对象,这就是我要问的。我是把它放在 Blog 对象中,还是创建一个新对象?
    • 再一次,MVC 解决方案中的模型应该引用业务级别的对象。这意味着您可以在非 MVC 设计中使用业务级对象。我建议使用可怕的“经理”类型的对象,但您似乎需要一个“BlogManager”类。
    【解决方案3】:

    您还可以将数据库访问封装在一个类中并在其中添加新方法。

    【讨论】:

      【解决方案4】:

      找到一个更好的方法来解决这个问题 完全(是的,但是什么?)

      模型视图控制器

      在此阶段将您的博客转换为“控制器”

      创建一个可以处理所有数据库方法的“模型”

      根据需要从 Class Blog 调用模型(此时还建议重构所有数据库请求以进入模型)。

      (对于 MVC 的非常好的介绍,请搜索 CodeIgniter)。

      【讨论】:

        【解决方案5】:

        你不需要静态方法,而是静态变量。静态方法只是对象中的函数,不接受对象,只接受外部变量。

        【讨论】:

          猜你喜欢
          • 2012-01-13
          • 2021-03-18
          • 1970-01-01
          • 1970-01-01
          • 2021-08-17
          • 2019-07-05
          • 2015-11-03
          • 1970-01-01
          相关资源
          最近更新 更多