创建Magento扩展时的最佳做法是什么,以避免与加载到商店的其他扩展冲突。我知道如何使用override方法,观察者方法以及如何以首选方式执行此操作的详细信息进行编码。这仍然不能阻止你与其他模块发生冲突并升级。
Alan Storm,如果您读到这篇文章,我也会阅读您最近关于覆盖和可升级性的帖子。这是考虑这种情况的最佳方式吗?我还看到人们创建的扩展和文章允许多个类扩展同一个类。答案 0 :(得分:11)
避免此问题的最佳方法是尽可能使用Magento中内置的Observer模式。它不是在足够的地方,但是当你有选择时,使用它可以让你玩得很好,即使是其他表现不佳的扩展。
接下来,尝试覆盖最小数量的类。这听起来很明显,但有时候我认为有必要覆盖每一个运费计算器类(代码很简单,但需要重复)。通过一些更多的工作,我可以覆盖一个类,并为自己节省一些维护问题,以便启动。
执行此操作时,您可能仍会遇到与覆盖相同类的其他扩展名冲突的问题。遗憾的是,这并不是Magento解决的问题,除了联系相关人员并提出解决方案之外,没有其他方法可以解决这个问题。
最后,对于可升级性问题,我在人们的代码中看到的一个常见问题是,他们在没有考虑的情况下,在没有必要的情况下覆盖整个函数。所以你明白了:
function doSomethingUseful() {
// ...100 lines of parent code...
unset($result['badKey']);
// ...100 lines of parent code...
return $result;
}
当您升级网站时,可能会导致200多行代码。艰难时期!相反,这样的事情经常起作用(并且很容易改进):
function doSomethingUseful() {
$result = parent::doSomethingUseful();
unset($result['badKey']);
return $result;
}
它更快,更易读,更不容易出错,每个人都赢了!
希望有所帮助!
谢谢, 乔