当你的团队在开发一个大型应用时,该应用的不同部分可能以不同的速度前进。比如,设想下面的场景:一个开发热源被分配 数据层 的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. magic_quotes_runtime 与 magic_quotes_gpc

    magic_quotes_runtime 与 magic_quotes_gpc 这两个函数都是管理是否对数据进行特殊符号转义,但是他们针对的处理对象不同: magic_quotes_gpc的设定值将会 ...

  2. SGU 107

    107. 987654321 problem time limit per test: 0.25 sec. memory limit per test: 4096 KB For given numbe ...

  3. setTimeout延时0毫秒的作用和问题

    一 作用 http://www.cnblogs.com/xieex/archive/2008/07/11/1241151.html 经常看到setTimeout延时0ms的javascript代码,感 ...

  4. 创建MySQL存储过程示例

    创建MySQL存储过程是学习MySQL数据库必须要掌握的知识,下文对创建MySQL存储过程作了详细的介绍,供您参考学习. AD:2013大数据全球技术峰会课程PPT下载 下文将教您如何创建MySQL存 ...

  5. 传说中的WCF(6):数据协定(b)

    我们继续,上一回我们了解了数据协定的一部分内容,今天我们接着来做实验.好的,实验之前先说一句:实验有风险,写代码须谨慎. 实验开始!现在,我们定义两个带数据协定的类——Student和AddrInfo ...

  6. C#加密算法汇总

    方法一: //须添加对System.Web的引用 using System.Web.Security; ... /// <summary> /// SHA1加密字符串 /// </s ...

  7. 用C语言简单加密解密

    使用char表示的字符型数据,在本质上与我们前面介绍的整型数据并无太大的区别,只是char类型占用的内存字节数更小,能够表示的数据范围更小而已.在使用上,char被专门用来表示C语言的字符集中的各种字 ...

  8. Sqoop详细介绍包括:sqoop命令,原理,流程

    一简介 Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS ...

  9. Java-马士兵设计模式学习笔记-责任链模式-FilterChain功能

    一.目标 增加filterchain功能 二.代码 1.Filter.java public interface Filter { public String doFilter(String str) ...

  10. C语言预处理程序[转]

    c语言预处理程序有三种,分别是: 1.包含头文件,如:#include <stdio.h> 2.宏定义(本质是字符串的替换) 如 :#define  宏名  串(宏体) #define   ...