我正在构建一个 Yii 应用程序,其中要求给定模型应该能够与任何现有的相同类型模型进行比较,并且基于比较,导入的数据要么更新现有模型,要么创建一个新模型,或者什么都不做。Yii 框架论坛有一篇关于实现Compare
行为的好帖子,它提供了一半的方程式。
我对放置特定于每个模型的“评分”方法的适当位置感到困惑。例如,我可能会遍历所有现有模型并迭代compare($each)
到给定模型,但这只会吐出属性之间的差异。可能对于一个模型,我关心,name
而对于另一个模型,我关心birthday
和color
。
我是否应该重写行为以使其特定于每种类型的模型,或者这是否违背了从行为开始的目的(然后,所有这些行为子类都将绑定到模型类)?
我的其他想法包括:
- 使用“可评分”的模型可能符合的
IScorable
接口getScore()
- 实施策略模式,将许多具体策略与特定于模型的场景相关联