在我与Bitrix一起工作的所有时间里,我都有机会从事很多在我之前开发的项目。 这里有一些小的改进,各种错误的修复和逻辑错误,网站重新设计以及对现有功能的全局更改。 而且,像任何其他开发人员一样,我讨厌耙别人的垃圾,拐杖和“临时”补丁,而实际上,该补丁在其他8版产品中都被记住。
在这里,我将尽量避免在PHP编程时不关注标准的“最差做法”,例如无视变量名和函数的选择,循环中过多的数据库查询,缺少表单中的用户数据检查,忽略注释等。 我将尝试确切地介绍Bitrix开发中固有的时刻,随后这些时刻将避免因必须与您的代码一起工作的程序员而引起的愤慨和诅咒。 是的,当您完全忘记了为什么在这里插入这个或那个拐杖时,通常您会在一年或更长时间里成为自己的程序员。
“编写代码,好像它会伴随着一个知道您所住地的暴力心理变态者一样。”(c)John F. Woods
在我看来,第一个也是最重要的-出于天堂的考虑,请
使用本地文件夹 。 使用版本控制系统时,这非常重要-您需要做的就是将/ bitrix /文件夹添加到异常中。 仅此而已。 此外,几乎所有的开发都仅在其中进行。 这极大地简化了以后对必需文件和组件的搜索,有助于避免不必要的文件阻塞存储库,并且的确如此-它使项目树看起来更简洁,更“人性化”。
不要修改内核 。 即使您确定它不会被更新。 即使速度更快。 即使你很懒。 忘掉这个噩梦。 如果您需要更改标准组件的逻辑,请将其转移到新的名称空间/本地/组件/修改/并使用它。 业务流程的模块,小工具和活动也是如此。
不要乱扔init.php文件 。 组合用于特定模块的功能或类中的功能,将整个类写入单独的文件中,而init.php中仅包括这些文件并编写事件处理程序。 我遇到了每个大小为500Kb的init.php文件,其中的函数,常量的定义,类和处理程序的初始化混杂在一起。 当然,当我不得不理解这些文件时,我诅咒了我的前任。
下一段与目标市场的现成解决方案开发无关,后者的目标是从公共部分为最终用户提供最可定制的功能。 如果您正在处理特定项目,请在特定ToR上进行操作-
不要在所有情况下都尝试为该组件创建统一的模板 。 就我个人而言,我坚持一种哲学-最好有一些简单的模板用于不同的目的,而不是一个通用的模板,但是在这种情况下,魔鬼稍后会摔断腿。 当然,在每种情况下,您都需要以内容为基础-职权范围,实施选项等,但是您不应忘记Occam的Razor。 举例来说,我将给一个租赁公司的一个项目,我碰巧对其进行了编辑。 当然,该项目本身是可怕的实施;真正令人恐惧的是,它在服务目录的某个部分的页面中。 五个部分中的每个部分都有其自己的布局,在该布局上,块在页面上的位置以及原则上它们中某些块的存在都不同。 在所有五个页面中,一个模板与一堆if-else,重复的组件调用,连接样式和脚本一起使用,此外,它们彼此之间会定期发生冲突。 结果-一个巨大的文件,其中“没有一品脱”的理解就像死亡。 尽管看起来,是什么导致您无法制作5个不同的模板而又没有突然产生困难?
使用API 。 不要在不需要的地方重新发明轮子。 使用文档-完整描述了整个产品,并且每个功能都可以在bxapi.ru上进行详细查看。
避免直接数据库查询 。 这是上一段的特殊情况-使用API。 仓促,不安全的请求可能导致数据损坏,丢失甚至破坏。
不要从站点的根目录使用CNC组件 。 通常,后果很可悲,因为CNC使用地址处理程序文件,因此从根目录使用该文件很容易破坏其他组件以及404页的地址。 如果您将文章发送到/ article /文件夹,并且产品相对于/ catalog /,则不会有任何问题。
使用API连接CSS和JS。 我仍然到处都看到使用html标签的脚本和样式表。 使用类对象\ Bitrix \ Main \ Page \ Asset和函数addJs()和addCss()。 这将允许合并文件,然后单击主模块设置中的复选框,将其缓存
最后,该错误不仅涉及Bitrix,而且对于与之相关的问题,我已经非常痛苦。
检查选择结果是否使数组无效 。 例如,我上次遇到此问题是在一家在线商店中工作。 投诉:页面有时会加载16秒。 连接的是不清楚的。 通过反复试验,我发现只有当纸篮为空时,这些页面才被装载得很长。 看来,为什么呢? 事实证明,在悬停时,篮子中会出现一个弹出窗口,其中显示了放在篮子中的货物图像。 好吧,以前的开发人员做了什么? 我获取了“小篮子”组件的结果,并在result_modifier.php文件中进行了GetList()调用,以使商品从产品ID数组中选择带有过滤器的图片,然后将来自选择结果的src图片添加到相应产品的数组中。 结果,当购物篮中没有货物时,过滤器就空了,整个商品目录都进入了选择范围。 好吧,然后每个人都有一个周期……我们拥有我们所拥有的。 显然,在测试15个产品的开发阶段这是难以察觉的,而且战斗条件中已经出现了问题。 尽管似乎值得将支票留空($ arResult ['ITEMS'])...
这是我结束有关Bitrix开发的个人最高“最坏做法”的地方。 如果至少有人获得此信息将有助于避免将来出现错误并改善他们的开发风格,那么它就白费了。