避免优雅代码:使用这三个原则代替
互联网上 Joomla 用户的代码中存在数以万计的糟糕代码。这是因为 Joomla 作为一款可扩展应用程序的本质。这很棒,因为任何人都可以为其创建解决方案;这也很糟糕,因为任何人都可以为其创建解决方案。由于 Joomla 网站交织着来自不同时空的数百名开发者的努力和知识,其代码所能追求的最高美德就是简洁。如果你从未听说过被称为“简洁”的代码,那么它的本质就是代码易于阅读、编写和维护。在本文中,我们将探讨为什么应该避免优雅代码,以及三个编写良好、简洁的 Joomla 代码的简单原则。
优雅是一个糟糕的目标
大多数开发者都听说过其他程序员的代码被给予最高赞誉,“优雅”。程序员非常聪明,他们编写的代码非常高效。
优雅是一个糟糕的目标。
试图创建优雅的代码是一种自我满足的练习,创建一个反映你独特智能的巧妙系统。大多数时候,它会导致一个混乱的系统,只有你才能理解,甚至一年后你自己也不会理解。
相反,首先编写简洁的代码,并通过重构的过程,只有在需要和必要时才出现优雅的解决方案。
编写更干净、更好的 Joomla 代码的三个简单原则
以下是一些编写更干净 Joomla 代码的原则。
#1 原子化。
你的代码中的每一部分都应该分解为其组成部分。你希望你的方法和类只做一件事。这就是我们为什么称之为原子化:你不能进一步分解它。
例如,如果你有一个表示活动的模型,它应该只包含处理单个事件的方法:保存事件、删除事件、更新事件、添加参与者。
添加参与者是活动需要做的事情。而更改参与者姓名是应该在参与者模型中做的事情,因为它与活动本身无关。同样,列出所有事件的列表方法不应该在事件模型中,因为它涉及多个事件,而不是单个事件。
这种方法组织会使您在扩展中添加更多类。然而,这对方法的影响更为显著。当一个方法只能做一件事时,它比您在自然界中看到的方法要短得多、密集得多——通常只有8到12行。如果您有一个40多行的方法,您有信心它正在做不止一件事,并且需要将其重构为其原子部分。
某些方法将做的一件事是管理所有只做一件事的其他方法。
例如,添加参与者可能需要获取参与者ID、在数据库中将其保存为已注册,并发送通知电子邮件。添加参与者的方法将分别调用这三个方法,而不是将它们挤进一个大的方法中。
当每个类、方法和函数只做一件事时,清晰的组织结构开始出现。多余的代码消失。您看到的不再是能工作的黏糊糊的一团,而是一种类似乐高积木的东西,具有特定的部件,构成一个清晰易懂的整体。
2. 仔细命名。
如果您将类和方法组织成原子部分,那么您只是做到了清晰的一半。另一个关键方面是经过深思熟虑的名称。当查看一个方法、属性、函数或类时,应该立即清楚它做什么。简短和笼统是敌人。您希望明确具体。
- 一个差劲的方法名称:function srtitems($b)
- 一个好的方法名称:function remove_unpaid_participants ($participant_list)
方法应该像句子一样阅读。如果您在句子中发现“和”,那么方法很可能不是原子的,需要将其重构为多个方法。
重要他人测试
一旦您实施了这两项建议,您应该能够执行我所说的“重要他人测试”。
干净代码背后的理念是,您应该能够离开它一年,然后回来进行任何必要的更改而不会头疼。遗憾的是,因为时光机不存在,这是一个难以测试的假设。
相反,您可以做的就是让您的非编码配偶、男朋友或重要他人阅读您的代码。他们应该能够告诉您代码做什么,即使他们无法解释它是如何完成的。(如果您的代码如此丑陋以至于无法吸引伴侣,任何外行人都可以:邻居、朋友、未成年人……只要他们有半颗脑袋,并且不知道如何编程。)
3. 依照惯例。
Joomla 有惯例的原因:使用它们。不要创建自己的模板系统、观察者模式或输入验证。这不仅浪费了您的时间,因为它们已经被发明,而且使其他开发者难以接手您的工作,并消除了 Joomla 惯例提供的所有灵活性和功能。
例如,我看到一些使用自己的模板系统来生成前端显示条目的目录扩展。这保证了任何需要的更改都必须通过更改扩展来完成。 这将其锁定在特定版本上,并要求开发者执行扩展的每个更新。如果开发者遵循 Joomla 惯例并使用视图和布局,那么简单的布局覆盖就足够了。
接下来是什么?
如果您对提高您编写的代码质量感兴趣,#1和#2基本上是比我更聪明的人的一些提示。 查看以下书籍,以获得“Uncle Bob”关于干净编码的深入指南。
一旦您对编写干净代码感到舒适,单元测试和测试驱动开发是必不可少的后续主题。
为了结束本次讨论,请记住,优雅的代码是美丽的,但美丽并非软件的目标:实用才是。因此,不要努力成为一名艺术家,而是要努力成为一名工匠。
《Joomla社区杂志》上发布的一些文章代表了作者对特定主题的个人观点或经验,可能并不与Joomla项目的官方立场一致。
通过接受,您将访问https://magazine.joomla.net.cn/之外的第三方外部服务
评论