当你的团队在开发一个大型应用时,该应用的不同部分可能以不同的速度前进。比如,设想下面的场景:一个开发热源被分配 数据层 的backend工作,而另外一个开发人员做front-end和web/controller层面的工作。前端开发人员希望测试他的controller,但是后端的数据层却进展缓慢。然而,如果两个开发人员能够在他们之间的接口上预先达成一个协议(interface),也就是说后端数据层设计人员必须提供以下的数据访问接口,那么后端数据层开发即使进展不能和前端开发完全同步,那么也不会影响前端的开发工作:

interface OrderRepositoryInterface {
public function getMostRecent(User $user);
}

一旦这个接口规范被制定,即便是这时接口的具体实现还根本没有,那么前端工程师就可以测试他的contrller了!这种工作模式就允许应用的不同模块和组件可以以不同的速度向前走,而又能满足适当的unit test的需求。而且,这种工作方法即便我们彻底改变一个接口的实现模式(可能会有bug),也不会break掉其他我关的组件的工作。记住:这里无知便是福。我们不想知道也不应该知道我们所依赖的接口是如何实现的,我们只需要知道该接口提供什么功能即可。所以,既然现在我们有了清晰定义的接口,我们就可以写我们的controller了:

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'));
} }

前端工程师甚至可以写一个"dummy"的接口实现,这时应用的view就可以populate一些假的数据了。

class DummyOrderRepository implements OrderRepositoryInterface {

 public function getMostRecent(User $user)
{
return array('Order 1', 'Order 2', 'Order 3');
} }

一旦dummy implementation写出来后,我们可以bind到我们的ioc容器里面,这样我们的整个应用就开始使用这个Dummy implementation了。

App::bind('OrderRepositoryInterface', 'DummyOrderRepository');

经过上述绑定后,一旦一个真实的implmentation被后端工程师开发完成,比如RedisOrderRepository,那么IoC binding就可以非常方便地切换OrderRepoistoryInterface到这个实际的实现上去了,这时整个应用的功能就完整地开始使用村粗在Redis中的订单数据功能了!

正因为interface如此重要,因此在一个项目开发开始前,一定要在相关团队间讨论定义清晰的接口,大家随后可以独自工作,约定一个时间周期来做integration就好了。这就是一个比较ok的PHP 项目实践了

laravel下的团队开发的更多相关文章

  1. [.net 面向对象程序设计进阶] (24) 团队开发利器(三)使用SVN多分支并行开发(下)

    [.net 面向对象程序设计进阶] (24) 团队开发利器(三)使用SVN多分支并行开发(下) 本篇导读: 接上篇继续介绍SVN的高级功能,即使用分支并行开发.随着需求的不断变更,新功能的增加.特别是 ...

  2. 【社交系统研发日记】如何在 Laravel 中 “规范” 的开发验证码发送功能

    顺便发个小通知:7月15日ThinkSNS+开源版发布,同时非开源的APP也走出内测阶段,体验二维码也全面发布体验. 什么是ThinkSNS ? ThinkSNS(简称TS),一款全平台综合性社交系统 ...

  3. 【技术博客】使用PhpStorm和Xdebug实现Laravel工程的远程开发及调试

    目录 使用PhpStorm和Xdebug实现Laravel工程的远程开发及调试 简介 PhpStorm中的远程开发 1. 配置服务器 2. 配置路径对应 3. 配置同步 4. 进行代码同步 5. 优点 ...

  4. [.net 面向对象程序设计进阶] (27) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git

    [.net 面向对象程序设计进阶] (26) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git 本篇导读: 接上两篇,继续Git之旅 分布式版本控制系统 ...

  5. [.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit

    [.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit 读前必备: 接上篇: 分布式版本控制系统Git——使用GitS ...

  6. [.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境

    [.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境 本篇导读: 前面介绍了两款代码管理工具 ...

  7. [.net 面向对象程序设计进阶] (23) 团队开发利器(二)优秀的版本控制工具SVN(上)

    [.net 面向对象程序设计进阶] (23) 团队开发利器(二)优秀的版本控制工具SVN(上) 本篇导读: 上篇介绍了常用的代码管理工具VSS,看了一下评论,很多同学深恶痛绝,有的甚至因为公司使用VS ...

  8. [.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS

    [.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS 本篇要点:在进阶篇快要结束的时候说说源代码管理器,我们的开发,不是一个人可以完成的事,团队协作很重要,而且 ...

  9. Github团队开发集成以及eclipse集成

    温馨提示:本篇是用于团队开发协作的github,如果是单人的可以移步本系列另外一篇 集成eclipse较为简单 团队仓库目录结构 TestOrgName xxxsystem configs dbscr ...

随机推荐

  1. Intent.ACTION广播大全

    Intent.ACTION广播大全 Intent.ACTION_AIRPLANE_MODE_CHANGED; //关闭或打开飞行模式时的广播 Intent.ACTION_BATTERY_CHANGED ...

  2. function的prototype

    prototype只有function才有的属性. var a = function() { this.age = 12; this.name = "haha"; }; a.pro ...

  3. Form的用法

    提交页面: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w ...

  4. HDU4945 2048(dp)

    先是看错题意..然后知道题意之后写了发dp..无限TLE..实在是不知道怎么优化了,跑了遍数据是对的,就当作理论AC掉好了.. #pragma warning(disable:4996) #inclu ...

  5. 加载gif动态图的三种方式

    准备:本地图片资源,GifView

  6. 关于Try/Catch 代码块

    应当放在Try/Catch 代码块中的常见任务包括连接到一个数据库或与其交互.处理文件.调用Web 服务. 老实说,我这人很少有打破沙锅问到底的精神.不过昨晚听一技术人员跟他的项目经理说要在程序中使用 ...

  7. yum downloadonly

         有些时候集群中的机器无法联网,通过yum进行安装,这样就需要找一个相同内核的机器将rpm下载后再到相应的机器上进行安装,以解决这一问题.      yum 有相应的工具完成这一任务.     ...

  8. 欧拉工程第55题:Lychrel numbers

    package projecteuler51to60; import java.math.BigInteger; import java.util.Iterator; import java.util ...

  9. Spring框架学习之第3节

    model层(业务层+dao层+持久层) spring开发提倡接口编程,配合di技术可以更好的达到层与层之间的解耦 举例: 现在我们体验一下spring的di配合接口编程,完成一个字母大小写转换的案例 ...

  10. Python3缩进对逻辑的影响

    前话 我很佩服设计Python这门语言的人,因为这门语言的规则让我不得不写出美观的代码. Python的缩进要求是强制的,因为缩进不对直接影响了代码逻辑. 因为python写法相对其他编程语言简化许多 ...