【问题标题】:How do I modelize my two classes knowing one needs the method of the other?我如何建模我的两个类知道一个需要另一个的方法?
【发布时间】:2011-01-15 16:41:00
【问题描述】:
我有这两个类,Retrodoc 类需要知道 versionPath() 来执行它的方法 run($versionId)。那么最好的建模是什么?我是否在方法中实例化版本,然后我可以使用方法 getVersionPath()?
【问题讨论】:
标签:
php
oop
class
design-patterns
【解决方案1】:
如果版本路径在依赖对象的整个生命周期内保持静态,则在 Retrodoc 中创建一个成员变量,并通过实例化版本对象并在 构造函数 中调用 getter 来初始化它。然后,当构造函数超出范围时,对象将被销毁,您在对象中拥有方便的值,并且您只进行一次函数调用加上一次对 __construct 的调用和一次对 __destruct 的调用。版本路径以单一原始类型存储。
如果路径会从一次调用 run 更改为另一次调用,那么您可以将版本对象设为类成员。然后在每次运行该函数时调用 getter,但不是每次都创建和销毁它。每次调用仍然只有一次构造函数调用和一次析构函数调用以及对 getter 的一次调用。
这是一种具有-a 类型的关系 从UML 设计的角度来看,Retrodoc 对象具有-a 版本。这称为组合。尝试选择对具有时间成本(包括构造和销毁)的函数调用和具有比原语更高的内存成本的对象最有效的设计。