是否有某种设计模式推动 public 静态方法?
Is there some kind of a design pattern that pushes for public statics methods?
我想知道是否有一种设计模式,其中每个 class 都有静态 public 方法,您可以在代码中的任何地方使用它们。
如果遵循某种已知标准,这种模式是否被认为是安全的?
我个人使用依赖注入和命名空间,但是,我开始了一份新工作,他们的所有代码都是静态的 require
,我不喜欢它。
所以我正在寻找有关我是应该继续按照他们的方式工作还是说服他们转向不同方法的有效信息。
这并不常见,但我可以想象有人在考虑函数范式的情况下这样做,其中 classes 仅用于将相关函数分组在一起。
但是,如果其中任何一个 class 被实例化,具有状态并在全局范围内使用,那么这是一个糟糕的方法,因为它有很多副作用、不可测试性、耦合等。
如果所有代码都存在于静态方法中,而您没有使用 getters/setters,则它是 almost certainly a poor design。
面向对象设计的基本意图——与过程设计相反——是将数据和行为分配给对象。这意味着您始终可以在调用方法之前验证 "car" 对象是否有效,并且这样做的逻辑是一致的并且在一个地方。
使用静态方法,数据由调用应用程序代码而非对象有效管理。这意味着很快,对应用程序有效状态的理解被分发到许多不同的地方。
好处是老派 PHP 程序员更熟悉这一点,对于简单的应用程序来说,这已经足够了。
缺点是您失去了面向对象的大部分优势,尤其是 "everything lives in one place" 可扩展性和可维护性的优势。
我想知道是否有一种设计模式,其中每个 class 都有静态 public 方法,您可以在代码中的任何地方使用它们。
如果遵循某种已知标准,这种模式是否被认为是安全的?
我个人使用依赖注入和命名空间,但是,我开始了一份新工作,他们的所有代码都是静态的 require
,我不喜欢它。
所以我正在寻找有关我是应该继续按照他们的方式工作还是说服他们转向不同方法的有效信息。
这并不常见,但我可以想象有人在考虑函数范式的情况下这样做,其中 classes 仅用于将相关函数分组在一起。
但是,如果其中任何一个 class 被实例化,具有状态并在全局范围内使用,那么这是一个糟糕的方法,因为它有很多副作用、不可测试性、耦合等。
如果所有代码都存在于静态方法中,而您没有使用 getters/setters,则它是 almost certainly a poor design。
面向对象设计的基本意图——与过程设计相反——是将数据和行为分配给对象。这意味着您始终可以在调用方法之前验证 "car" 对象是否有效,并且这样做的逻辑是一致的并且在一个地方。
使用静态方法,数据由调用应用程序代码而非对象有效管理。这意味着很快,对应用程序有效状态的理解被分发到许多不同的地方。
好处是老派 PHP 程序员更熟悉这一点,对于简单的应用程序来说,这已经足够了。
缺点是您失去了面向对象的大部分优势,尤其是 "everything lives in one place" 可扩展性和可维护性的优势。