当你的团队在开发一个大型应用时,该应用的不同部分可能以不同的速度前进。比如,设想下面的场景:一个开发热源被分配 数据层 的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. .net深入体验与实战精要--ASP.NET开发大杂烩(转)

    转自:http://www.cnblogs.com/sunhan/p/3371337.html 正巧今天遇到一个获取动态生成table中的一个动态生成的TextBox的值的时候总是findcontro ...

  2. IT架构之IT架构标准——思维导图

    参考: [日] 野村综合研究所系统咨询事业本部. 图解CIO工作指南. 周自恒译 人民邮电出版社,2014

  3. 驱动笔记 - file_operations

    #include <linux/fs.h> struct file_operations { struct module *owner; loff_t (*llseek) (struct ...

  4. mysql死锁,等待资源,事务锁,Lock wait timeout exceeded; try restarting transaction解决

    前面已经了解了InnoDB关于在出现锁等待的时候,会根据参数innodb_lock_wait_timeout的配置,判断是否需要进行timeout的操作,本文档介绍在出现锁等待时候的查看及分析处理: ...

  5. Sqli-labs less 49

    Less-49 本关与47关基本类似,区别在于没有错误回显,所以我们可以通过延时注入和导入文件进行注入. 利用延时注入 http://127.0.0.1/sqli-labs/Less-49/?sort ...

  6. 通过登入IP记录Linux所有用户登录所操作的日志

    通过登入IP记录Linux所有用户登录所操作的日志 对于Linux用户操作记录一般通过命令history来查看历史记录,但是如果在由于误操作而删除了重要的数据的情况下,history命令就不会有什么作 ...

  7. MEAN实践——LAMP的新时代替代方案(下)

    在本系列文章的第一部分旨在介绍一些应用程序的基础技术细节和如何进行数据建模,而这个部分文章将着手建立验证应用程序行为的测试,并会指出如何启动和运行应用程序. 首先,编写测试 首先定义一些小型配置库.文 ...

  8. Error Code: 1175 Mysql中更新或删除时报错(未带关键字条件)

    SET SQL_SAFE_UPDATES = 0; SQL_SAFE_UPDATES = {0 | 1} 如果设置为0,则MySQL会放弃在WHERE子句或LIMIT子句中不使用关键字的UPDATE或 ...

  9. hdu 3658 How many words

    思路: 构造矩阵,矩阵快速幂!!! 代码如下: #include<cstdio> #include<vector> #include<cmath> #include ...

  10. SQL Server 脚本

    创建数据库: --创建数据库 CREATE DATABASE Accounting -- 新数据库的名称 ON --主文件 ( NAME = 'Accounting', --文件名 FILENAME ...