作者 | Manik
译者 | 苏本如,责编 | 屠敏
以下为译文:
在开发应用程序时选择使用哪个框架,这将取决于很多因素。和其它任何应用程序框架一样,Laravel框架也有其优缺点。撇开那些令人憎恶的缺点不谈,这篇文章我们将把重点放在使用Laravel框架的优点上。在我开始讨论Laravel的神奇之处之前,我想先花点时间讨论一下为什么我们要使用框架来开发应用程序。而不使用已有的框架,自己开发构建一个应用程序所需一切的潜在风险是什么?
不使用框架来构建应用程序有什么问题?
为了理解在不使用框架的情况下开发一个应用程序的潜在风险,让我们假设,我们必须构建一个使用MVC(模型-视图-控制器)架构模式的应用程序。当你开始设置架构时,我们需要根据应用程序的结构,从很多种架构模式中做出合适的选择。当我想到如果我自己需要开发一套完整的应用程序体系架构时,我马上想到了几个问题。
首先,我应该从应用程序的哪个组件开始着手处理呢?是先安装所有的第三方依赖项和库吗?从应用程序的可扩展性来考虑,我应该使用什么样的模型类(model class)库来和数据库进行交互?是使用PDO类呢,还是有更好的选择?我将如何管理依赖注入?考虑到后期会有更多的开发人员在同一个应用程序上工作,我应该如何对这个体系结构做一个完整的记录?
这些问题看起来很难回答,但是我想告诉你这些仅仅是个开始。很明显,如果你不是一个熟悉MVC体系架构的编程者,那么这些问题本身对你来说都是新问题。如果你以前没有使用过任何框架,你可能从来没有问过这些问题。如果是这样的话,那么这个理由本身就足以让你采用Laravel框架进行应用程序开发。Laravel框架将为你处理所有这些低级的细节,并为你提供一个简洁和实用的架构模式。同时,Laravel框架将为你处理模型、视图和控制器之间的无缝交互。并且还将为你提供许多内置在框架中的不同功能,以便你可以专注于编写应用程序的业务逻辑。最终,你因为不必花费时间寻找这些低级问题的解决方法,而节省大量的时间和精力。
框架提供了一致性和灵活性
让我们试着想象一下这样一种情形:你正在开发一个庞大的应用程序,但是没有使用任何现成的框架或者使用自己构建的框架。当用户数量增加或需要添加更多功能时,你将需要更多的开发人员来开发和维护这个应用程序。在新开发人员入职期间,你除了向他们介绍你的开发团队需要遵循的软件开发的所有流程步骤和方法之外,你还必须向他们讲解你所构建的整个应用程序结构。
由于这个原因,新的开发人员必须通过一个高的学习曲线来理解你开发的新体系结构。但是如果你使用Laravel框架,这类问题将不复存在,因为这个框架会带给你应用程序开发的一致性。Laravel框架有详细的文档,新开发人员不必经历使用新框架的学习过程。因为你可以很容易地聘请到一个熟悉Laravel框架的开发人员,并能让他很快开始工作。
当一个团队使用标准化框架(比如Laravel)来构建应用程序时,向团队中添加其他开发人员就会变得很容易。这是因为:当你雇佣了一个熟悉Laravel框架的开发人员,他能够理解这些代码,因为所有代码都遵循相同的模式。
使用Laravel框架的好处
如果上面这些听起来已经很有趣,并且足以鼓励你在你开发下一个应用程序时使用框架,那么接下来让我分享一下Laravel框架相对于其它PHP框架所具有的一些优势。这些优势无疑使Laravel框架成为最佳PHP框架的主要竞争者之一。
1.开箱即用的用户身份验证
Laravel框架提供了开箱即用的用户身份验证功能。任何现代的web应用程序都需要用户身份验证,使用Laravel框架,你几乎不需要做任何事情就可以将它设置好。当你设置用户身份验证时,Laravel框架会创建所有重要的组件,如用户模型、注册和登录控制器,以及相应的视图。而且在将来,根据应用程序所需的业务逻辑,将这些组件扩展到新添加的功能上也是非常容易的。
除此之外,Laravel框架还提供了Socialite package(扩展包),它使你的应用程序能够使用各种社交网络(如Facebook, Google Plus和Twitter)对用户进行身份验证。要使它工作正常,你只需进行最低限度的配置。
2. 约定优于配置(也称作按约定编程)
Laravel框架同样采用“约定优于配置”的方法。这基本上意味着,如果遵循了不同组件的命名约定,就几乎不必关注配置工作。如果你遵循了命名约定,Laravel框架自身就会帮你处理许多低级的细节,而且一切都会神奇地开始工作。如果你一直使用传统的PHP编程,这在一开始可能会让您感到难以忍受。但一旦你尝到了甜头,你就再也不想回头了。
3.轻松使用的电子邮件功能
很难想象一个现代的应用程序会没有电子邮件功能。使用Laravel框架,实现电子邮件发送功能非常容易。除了SMTP和Php邮件功能外,Laravel框架还支持各种各样的电子邮件通知服务,如Mailgun,Mandrill,SparkPost,Amazon SES,SendMail等等。这些服务可以使你能够快速开始通过本地或基于云的服务发送邮件。你还可以使用Nexmo通过Slack和SMS发送通知。所有这些服务在Laravel框架中都是开箱即用的。
Laravel框架还在电子邮件模板中支持Markdown(译者注:Markdown是一个文本到HTML(text-to-HTML)的转换工具),它能够使你在很少的时间内完成电子邮件的创建工作。
4.Artisan命令
对我个人而言,Artisan命令行是Laravel框架提供的最简练和最有用的功能。Artisan是Laravel框架的命令行接口,它帮助开发人员使用命令行本身自动化许多任务。Artisan命令可以在应用程序本身中使用,开发人员也可以创建额外的Artisan命令。
你能够想到的所有常见任务,都能找到一个Artisan命令与之对应。例如,创建一个模型、创建一个控制器、创建一个数据库种子、迁移数据库等等。这个列表是无穷无尽的。我之所以说它“简练”,是因为你所要做的就是传递命令,剩下的工作全交给Laravel框架来处理。
5.“测试驱动开发”的测试自动化
Laravel框架自带对PHPUnit的支持,使得采用“测试驱动开发”模式的PHP应用程序的测试变得非常容易。为应用程序编写单元测试变得很简单,而且确保事情按照你希望的方式进行。
6.简洁的依赖注入
一旦你开始使用Laravel框架工作,你很快就会意识到Laravel框架是从Ruby on Rails和更多的函数式语言中获得的灵感,而不是从Java。这一点从Laravel框架处理依赖注入的方式就可以轻易地看出这一点。尽管实现依赖注入可以采取复杂的模式,但Laravel框架采取的做法与之相反,它提供了创建全局助手函数的简单方法。借助于全局函数和Faade静态代理,我们就可以在任何需要的地方轻松地实现依赖注入。
7.业务逻辑和显示代码的分离
Laravel遵循模型-视图-控制器(MVC)架构模式,将业务逻辑与视图分离。这种方法有很多优点。而要真正了解它优点,你需要了解什么是MVC模式,以及你的应用程序是否需要这样的体系架构。
8. Eloquent ORM(对象关系映射)实现
Eloquent是Laravel提供的ORM(对象关系映射)实现。更多信息可以参考维基百科中的链接(https://en.wikipedia.org/wiki/Object-relational_mapping)。Eloquent使得从数据库中获取数据变得非常容易。创建表之间的关系并从这些表中获取数据也变得很简单。Eloquent还允许你在表中创建各种连接,并提供许多帮助函数,使与数据库的交互变得非常简单。你几乎不必编写SQL查询语句或函数。因为有了Eloquent ORM,Laravel框架就可以为下面这些数据库提供开箱即用的支持:
MySQLPostgreSQLSQLiteSQL Server你真是说对了,这基本上意味着只要你使用Eloquent,你就不必担心与上述任何数据库的兼容性。从一个数据库切换到另一个数据库也非常容易。现在试着想象一下这给你的应用程序带来的可扩展性,不妨让我用一个例子来解释这一点。假设你有一个应用程序,这个应用程序在开始时有一个很小的用户群。由于用户数量较小且应用程序处于初始阶段,因此你决定使用MySQL作为数据库。一段时间过后,你的应用程序的用户数量增长到了相当高的级别,现在你可能需要切换到SQL Server数据库。因为使用了Eloquent,这个切换现在变得非常简单,就像更改Laravel框架中的特定配置详细信息一样容易。
9.队列(Queue)和调度器(Scheduler)
在开发应用程序时,通常会有一些耗时的任务。这些任务需要推迟到稍后的时间执行,这样它们就不会给用户的流程造成阻塞。这类任务的一个完美例子可能是生成一个统计用户请求创建CSV文件的PDF报告。Laravel框架的队列服务提供了一个统一的API,用于将这些任务推迟到应用程序的稍后时间处理。
谈到Laravel框架的命令调度器,它是那些繁琐的定时任务(Cronjob)的完美替代品。在很多时候,开发人员必须为特定的任务设置定时作业。这种任务的一个完美例子是向所有订阅用户发送他们订阅的每周简讯(Newsletter)。为了设置这个定时作业,开发人员必须使用SSH命令登录到服务器并在操作系统级别设置这个定时作业。这在一段时间内会成为一个麻烦,因为这些定时作业不能成为GIT和其它版本控制系统管理的一部分。但是Laravel框架的命令调度器使用内置函数提供了一个干净的API来调度各种各样的任务。这样,你就不必使用SSH命令登录到服务器的终端,并且所有这些被调度的作业都成为代码的一部分而纳入版本控制系统管理的范围。
10.简洁的路由
Laravel框架处理路由的方式简单直观。有一个单一的web.php文件来处理所有的web路由。如果某些路由需要公共中间件,它们可以很容易地在Laravel中分组。
路由的一个完美的应用场景是:应用程序中的某些页面,在用户可以查看它们之前,这些页面需要用户身份验证。Laravel框架可以将所有这些页面分组,并且经过Auth中间件检查,以确保只有登录到系统的用户才能查看这些页面。Laravel框架还提供了一个简洁的路由模型绑定(route model binding),其中模型(model)可以绑定到路由。有了这个帮助,视图可以直接从路由本身返回,甚至不需要访问控制器。
11. Composer管理依赖关系
Laravel框架使用Composer管理依赖关系和自动加载。Composer可以帮助你安装Laravel扩展包,这使得依赖管理变得轻而易举。在任何时候,你都可以检查package.json文件来查看你的应用程序正在使用的所有依赖项。Composer还让你能够使用单个Composer命令更新依赖项。
12.Blade模板引擎
Blade是Laravel框架的模板引擎。Blade可以让你在分离视图和业务逻辑上领先一步。它能让你的视图代码保持非常干净。一旦你对MVC架构模式和Laravel对它的实现有了清楚的了解,你就会更加清楚地认识到Blade模板引擎的重要性。Blade还提供了模板继承,因此你可以将最近使用的模板划分为多个部分,并让其它视图文件继承这些部分。有了Blade的帮助,你就可以创建一些逻辑较小的视图部分,然后可以包含这些小的部分以形成完整的视图。
13.文档
这是一个有点灰色的区域。当我最初开始使用Laravel框架的时候,我在查找文档时确实遇到了问题。当时所有的一切都没有文档,但是在某个时刻我突然发现有些事情开始神奇地工作,那就是大家始遵循命名规范的那个时刻。现在,有一些API文档列出了Laravel框架中声明的每个类和方法。一旦你掌握了如何使用它,并且知道如何使用Laravel文档来为你的利益服务,我保证你不会再有任何抱怨。
14.活跃社区
Laravel确实有一个活跃的社区。当你遇到任何问题时,你都可以搜索,而且肯定会查到许多针对你的问题的StackOverflow帖子。除了在StackOverflow上有一个活跃的社区外,还有一个叫做Laracast的讨论论坛。你可以免费注册成为Laracast论坛和社区的一部分,那个社区现在非常活跃。
我认为这些优势足以让你对Laravel框架感到兴奋。尽管把它定义为完美肯定是夸大其词了,但我可以肯定的是,Laravel框架绝对是最好的PHP框架之一。
原文: https://hackernoon.com/14-reasons-why-Laravel-is-a-contender-for-the-best-php-framework-6h5f31rp
本文为 CSDN 翻译,转载请注明来源出处。
扫码关注旭宓科技服务号