从百草园到三味书屋 (三)接口约定

Interface As Schematic 接口就是大纲

  1. 接口在开发程序的“骨架”时非常有用。

  2. 在设计组件时,使用接口进行设计和讨论都是对你的团队有益处的。

  3. 比如定义一个BillingNotifierInterface,然后讨论他有什么方法。在写任何实现代码前先用接口讨论好一套好的API!

  4. 记住,接口实际上不真正做任何事情。它只是简单的定义了类们必须实现的一系列方法。

A Contract Example 约定的范例

  1. 接口就是约定。

  2. 接口不包含任何代码实现,只是定义了一个对象应该实现的一系列方法。

  3. 如果一个对象实现了一个接口,那么我们就能确信这个接口所定义的一系列方法都能在这个对象上使用。因为有约定保证了特定方法的实现标准,通过多态也能使类型安全的语言变得更灵活。

Interfaces & Team Development 接口与团队开发

  1. 一旦建立了约定,就算约定还没实现,前端开发者也可以测试他的控制器了!

  2. 这样应用中的不同组件就可以按不同的速度开发,并且单元测试也可以做。而且这种处理方法还可以使组件内部的改动不会影响到其他不相关组件。

  3. 要记着无知是福。我们写的那些类们不用知道别的类如何实现的,只要知道它们能实现什么。

//根据定义好的约定,再来写控制器
class OrderController {
    public function __construct(OrderRepositoryInterface $orders)
    {
        $this->orders = $orders;
    }
    public function getRecent()
    {
        $recent = $this->orders->getMostRecent(Auth::user());
        return View::make('orders.recent', compact('recent'));
    }
}

//前端开发者甚至可以为这接口写个“假”实现,然后这个应用的视图就可以用假数据填充了:
class DummyOrderRepository implements OrderRepositoryInterface {
    public function getMostRecent(User $user)
    {
        return array('Order 1', 'Order 2', 'Order 3');
    }
}

//一旦假实现写好了,就可以被绑定到IoC容器里,然后整个程序都可以调用他了:
App::bind('OrderRepositoryInterface', 'DummyOrderRepository');

原文链接:https://my.oschina.net/zgldh?tab=newest&am...

本作品采用《CC 协议》,转载必须注明作者和本文链接
写的不好,就当是整理下思绪吧。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!