如何计划和构建一个使用框架的敏捷项目


How to plan and structure an agile project that uses a framework?

假设你会使用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框架可以帮助你实现有价值的软件的早期和持续交付,那就太好了。

敏捷方法中没有规定应该使用哪些技术方法。关键是专注于传递价值,而不是建立大量的技术基础。这使您能够快速调整以适应变化(无论是需求变化还是技术变化)。