假设你会使用Issue &项目跟踪软件,如Jira,为您的下一个即将到来的项目的规划。
你决定使用像Laravel这样的PHP web框架,按照模型-视图-控制器(MVC)架构模式开发web应用程序。
你把你的问题写成用户故事,添加一些细节,等等。
[用户专用-组件]
- 作为用户,我希望能够管理用户。
- 作为一个用户,我希望能够注册一个新用户。
- 作为用户,我希望能够删除现有用户。
…
[消息特定-组件]
- 作为一个用户,我希望能够进行对话。
- 作为一个用户,我希望能够发送消息给用户。
- 作为一个用户,我希望能够接收来自用户的消息。
- 作为一个用户,我希望能够在消息中使用表情符号。
- 作为用户,我希望能够将文件附加到消息中。
…
[任务特定-组件]
你明白了吗?!在这一点上没问题。有些故事甚至可以分解成更小的故事,然后再分解成一些任务,然后再分解成一些小任务。
- 作为一个用户,我希望能够有一个任务板。
- 作为一个用户,我希望能够添加一个新的任务。
- 作为用户,我希望能够分配任务给用户。
- 作为一个用户,我希望能够标记任务为完成。
…
让我们更进一步:你使用像github这样的源代码协作平台,结合鱼眼,并决定使用智能提交来解决转换问题。您的问题和提交结构良好,易于跟踪。(美丽的想法)
如果你在框架中遵循指南,你将有不同的任务要遵循:
- 数据库(含关系)
- 模型(含关系)
- 控制器
- 路线(API)
- 视图(UI) <
- 验证/gh>
- <
- 验证/gh>
- 错误/异常/日志
- …
必须完成这个,甚至更多的任务,以确认组件已完成。我所说的组件是指上面定义的组件,如User、Message、Task。它们都有一些共同点,你会一遍又一遍地重复。但是,您仍然希望使用完成问题所需的源代码填充问题。
User.php (模型关系)
use Illuminate'Database'Eloquent'Model;
class User extends Model
{
/**
* Get the message record associated with the user.
*/
public function message()
{
return $this->hasOne('App'Message');
}
/**
* Get the task record associated with the user.
*/
public function task()
{
return $this->hasOne('App'Task');
}
}
Task.php (模型关系)
use Illuminate'Database'Eloquent'Model;
class Task extends Model
{
/**
* Get the user that relies the task.
*/
public function user()
{
return $this->belongsTo('App'Task');
}
}
Message.php (模型关系)
use Illuminate'Database'Eloquent'Model;
class Message extends Model
{
/**
* Get the user that relies the message.
*/
public function user()
{
return $this->belongsTo('App'Message');
}
}
以上代码只是确保组件完成所需任务的一部分。这看起来与其他任务类似。(db-migration, controller, view, validation, events等)
那么,如果您计划一个遵循框架指导方针的项目,您将如何考虑这一点呢?
目标是确保组件在被确认为完成之前包含所有提到的任务。
敏捷的原则之一是:
我们的首要任务是让顾客满意通过早期和持续的交付有价值的软件。
如何做到这一点取决于开发团队。如果你发现一个PHP web框架可以帮助你实现有价值的软件的早期和持续交付,那就太好了。
敏捷方法中没有规定应该使用哪些技术方法。关键是专注于传递价值,而不是建立大量的技术基础。这使您能够快速调整以适应变化(无论是需求变化还是技术变化)。