【发布时间】:2018-05-12 20:29:54
【问题描述】:
我正在使用 Lumen (Laravel) 为在线活动/活动应用程序创建一个 API,该应用程序处理各种活动的现场注册和礼品兑换等事情。有时,某些具有非常特定功能的事件需要它们自己的自定义逻辑。我想知道如何从架构/最佳实践的角度最好地处理此自定义代码。
这就是我所拥有的:我有一条像这样调用 CustomCampaignController 的路由:
$router->group([
'prefix' => 'v1'
], function () use ($router) {
// ..... other routes for standard activities
$router->post('customCampaigns', 'CustomCampaignController@runController');
});
在 App\Http\Controllers 下,我打开了一个目录来存储所有自定义活动的类。 customCampaigns 路由采用 activityId 参数,其值与活动类之一匹配。例如,如果客户端将 activityId="MyCustomActivity" 发布到 customCampaigns,我将实例化以下类:App\Http\Controllers\Custom\MyExampleActivity。
// app/Http/Controllers/CampaignController.php
public function runController(Request $request) {
$className = 'App\\Http\\Controllers\\Custom\\' . $request->input('activityId');
$customController = new $className;
return $customController->run();
}
然后自定义控制器会做它的事情并返回响应
// app/Http/Controllers/Custom/MyCustomActivity.php
namespace App\Http\Controllers\Custom;
class MyCustomActivity
{
public function __construct()
{
//
}
public function run()
{
// Custom logic here
return response('Response');
}
}
这是一种好方法还是可以被视为反模式?如果此类问题有其他模式,请告诉我。
【问题讨论】: