跳转到主要内容
Drupal猎人 提交于 13 May 2014
原文地址:https://lastcallmedia.com/drupal-8-lessons-for-developers   几个月前,我们决定用Drupal 8重建我们公司的网站,我们在规划项目时,设定了两个标:

第一,我们希望我们的开发人员举出一些生活中的实际应用场景,来设定一些功能需求,但是我们知道建设一个实际的项目会与这有很大不同。

第二,证明我们可以不用任何其他第三方模块就可以用drupal 8本身构建一个完整功能的网站,在我看来,我们比较成功地达成了这两个目标。虽然在开发过程中还是有一些不太顺利的地方,但总体上来说还是一次比较愉快的开发体验。我想和大家分享一下这个项目中的一些主要开发经验。

1 . 更强的"主题开发"和"模块开发"角色划分。

Drupal 8整体已经进化到了面向对像开发,引入了新的内核,是的,这是一个很大的转变。

核心代码有大量的变化或移动。这对模块开发者来说,意味着你以前习惯于用hooks(钩子)实现的方式,你现在必须重新学习新的Routes(路由系统), Plugins(插件系统), Event Listeners(事件监听),等等其他新知识。

我想任何人都不会认为新的方式比以前更简单,但是我已经准备好了。我经历了从Drupal 6到Drupal 7的变革,当时那种感觉就像你走进一座你梦想中的黑屋子,你知道里面什么都有,但你就是不知道具体那些东西在哪儿。

Drupal 8变化如此之大,让人有点措手不及,在主题方面。系统采用了新的模板引擎:嫩枝(Twig),虽然你可能对它完全陌生,但是当你真正了解它之后,你就不会觉得它与以往的PHP template模板引擎有什么不同。而且我猜测,只要你学习了一些Twig的基础知识,我相信大多数人会觉得用Twig来工作会感觉比在PHP里编程更舒服。那么,从主题开发的角度来看,真正的改变有哪些?

没有很多。事实上,现在Drupal 8的研发团队正在努力使主题开发的方式与原来保持一致!

2 . 更少的冲突

我自己一直在用Features模块,也建议别人也使用它,但有一个问题总是让我感到畏缩: “在我们使用Features模块的时候,我们该怎样避免冲突/合并冲突? ”

我的回答通常是非常抽象的,我会建议用打包代码的方案,还有使用复杂的 push/pull/revert 命令。

但是现在, CMI已经集成到了Drupal 8里面了(config文件配置系统),这是我们一直想要的工具。CMI系统采用了把每一个配置对象写入一个单独文件,用这种方式替代以前Features把所有代码写进一个巨大的php文件里。这似乎听起来好像很复杂,但简单说就是,drupal8的文件配置系统可以防止一种冲突情况的发生,在以往的开发中,我们常常是把不同的views视图写在一个php文件里的,那么就很容易出现你和你的同事如果都在修改同一个文件,那么就会发生冲突,但这种情况在drupal 8 里不会再出现了,因为每一个views配置都保存在它自己的文件中。

3. 不会再有打包的噩梦

这和我前一点说明相似,但我试图教别人正确的方式,就必须要告诉他一大堆很复杂抽象的东西,如semantic grouping(语义分组)(因为这是我认为正确的方式)。

现在,我们有了一个真正的配置管理工具,我们不再需要担心打包。让我们仔细想一想,不再需要有元件捆绑成组。

对于那些已经被开发出来用 Features 维护的组件,你又不知道是谁做的,你不可能去找到原开发者帮你维护,不用担心。 Features 已经有了一个Drupal 8开发版本 ,它将会解决这一问题。

4. 你需要一个带自动完成功能的编辑器

对不起,Notepad++的爱好者,但你会希望有一个真正的IDE用于Drupal 8高级开发,现在我们正在使用大量的面向对象的代码,这些父类/接口可能有5-10层级深的文件路径。

如果能单击一个方法名称就直接去到它定义的文件 ,并跳转到相应的代码块位置,那将是非常方便的。当然如果你的编辑器能在你输入代码时为你自动完成补全方法名,那将是极好的,此外,更多的代码类型如YAML,JSON等,将在编辑器中有语法高亮显示,是不是很赞?

5. 放眼全球,立足本地

你是否知道,theme(), drupal_add_js(), and drupal_add_css() 函数都已经从Drupal 8中移除。取代的新方法是,会返回一个渲染数组。简短说就是,把相关的数据(CSS/JS)数组渲染到页面上,当你调用theme()函数时, 这些数据数组只是添加到一个存储全局变量的地方。这种方式在Drupal 7下能运行良好 ,但我们是一群有远见的人,我们希望有更好的方式,希望我们的网页能够处理子请求,就是使用多进程方式来渲染页面,这样有助于提高效率。

你猜怎么着?单独的进程不会共享全局变量。所以,当您返回输出HTML到页面时,你应该把你的CSS/JS数据用#attached属性来指定返回一个渲染数组

总之...

在我们团队深入学习Drupal 8时发现它是一个很大的乐趣。是的,没错,我说的乐趣。我们喜欢它,一方面是因为它是新的东西,也因为它是我们自己的项目。

虽然我们在做这第一个Drupal 8项目时,客户说时间紧迫,所以我们常常会感到强烈的紧迫感,但是我们依然能够专注于学习新的工作流程,修复bug,同时制定出最佳实现方案。

我们在去年十二月第一次为我们的Drupal 8项目发表了一个帖子子,点击这里

下面的附件一张我们为这篇帖子准备的墙纸大图。

Drupal 版本