加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

大型项目该如何分层架构,该和MVC说再见了

发布时间:2019-10-14 20:29:54 所属栏目:建站 来源:Limancheng123
导读:最近用laravel做本身的小我私人博客,进程中也思索了一些题目,怎样把本身的代码写的更优雅呢,为什么laravel没有models目次呢,逻辑代码,数据库查询代码要奈何安排呢? 我们一向以来都被贯注的计划头脑,即M-V-C,模子(Model)、视图(view)、节制器(Controller

举个例子,与其在营业逻辑类内里直接获取 Web 哀求,不如把 Web 哀求通过节制器转达给营业逻辑类。这个简朴的窜改会将你的营业逻辑类和「Web」层解耦,而且不必担忧怎么去模仿 Web 哀求,就可以轻松测试营业逻辑类:

  1. class BillingController extends BaseController 
  2.   
  3.  public function __construct(BillerInterface $biller) 
  4.  { 
  5.  $this->biller = $biller; 
  6.  } 
  7.   
  8.  public function postCharge(Request $request) 
  9.  { 
  10.  $this->biller->chargeAccount(Auth::user(), $request->input('amount')); 
  11.  return view('charge.success'); 
  12.  } 
  13.   

此刻 chargeAccount 要领更轻易测试了,因为我们不再必要在 BillerInterface 实现类中行使 User 和 Request 类,只需将用户和金额转达到该要领即可。

编写可维护性应用措施的要害之一,就是职责疏散。要时常搜查一个类是否管得太宽,知道一些它不应知道的。你要经常问本身「这个类是否必要体谅X?」假如谜底是否认的,那么就要把这块逻辑提取出来放到另一个类内里,然后用依靠注入的方法将其注入进来。

怎样判定一个类是否管得太宽?一个有效的要领就是搜查你为什么要改这块代码。举个例子,当我们想调解关照逻辑的时辰,是否必要修改 Biller 的实当代码?虽然不必要,Biller 实现只存眷付出,它与关照逻辑该当仅通过左券来举办交互。在处理赏罚代码时行使这种思绪,可以辅佐你快速找出应用中必要改造的处所。

对象都放哪儿?

当通过 Laravel 开拓应用时,你也许会狐疑于应该把各类「对象」放在那边。譬喻,帮助函数要放在那边?变乱监听器要放在那边?视图组件要放在那边?谜底也许出乎你的料想 —— 「任意,放哪儿都行!」Laravel 并没有许多关于这方面的文件体系上的约定。不外,这个谜底简直不能让人满足,以是下面我们就这个题目睁开接头,一路切磋这些「对象」毕竟可以放在那边。

帮助函数

我们可以在 app 目次下建设一个 helpers.php 文件,然后将自界说的帮助函数都放到这个文件中。虽然,因为这个文件内里包括的不是类,不得当通过定名空间引用个中的函数,必要在 composer.json 中全局注册它:

  1. "autoload": { 
  2.  ... 
  3.  "files": [ 
  4.  "app/helpers.php" 
  5.  ] 
  6. }, 

然后运行 composer dump-auto 从头注册自动加载映射相关。然后就可以在应用中行使 app/helpers.php 中界说的帮助函数了。

变乱监听器

变乱监听器虽然不应放到 routes.php 文件内里,以是我们要找其它的处所来存放。究竟上,在 Laravel 5.* 中,当我们通过 php artisan make:listener 呼吁建设时刻监听器时,体系会自动在 app 目次下建设 Listeners 子目次,并将天生的监听器类放到该目次下。以是我们对付自界说的变乱监听器类,放到该目次下即可。

错误处理赏罚器

在 Laravel 5.* 版本中,默认环境下全部的非常都是通过 AppExceptionsHandler 来处理赏罚的,你也可以通过自界说的非常类来处理赏罚,自界说非常类可以放到 app/Exceptions 目次下。

其他

凡是,只要遵循 PSR-4 类型就可以在应用目次布局中保持类的整齐。团结你今朝为止进修到的常识,对付什么代码要放在什么处所这个题目,该当可以给出一个有理有据的谜底了。但永久不要拒绝试验。Laravel 的美好之处就是你可以做出最得当你本身应用的约定。去试探和发明最得当你本身应用的布局吧,别忘了和他人分享你的看法!

譬喻,你也许受到我们之前例子的开导,在 QuickBill 中建设一个 Providers 目次来存放全部你自界说的处事提供者,目次布局相同这样:

  1. // app 
  2.  // QuickBill 
  3.  // Billing 
  4.  // Extensions 
  5.  //Pagination 
  6.  -> Environment.php 
  7.  // Providers 
  8.  -> EventPusherServiceProvider.php 
  9.  // Repositories 
  10.  User.php 
  11.  Payment.php 

留意上面的例子,我们有 Providers 和 Extensions 两个定名空间。全部你自界说的处事提供者都可以放到 Providers 定名空间下,而 Extensions 定名空间可以用来存放你对框架焦点举办扩展的类。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读