1

永続性やビューなどに直接関係のない「ビジネス ロジック」をどこに格納するかについて、Silex の全体的なアイデアが正しいかどうかはわかりません。

例: 私の「デモ アプリ」では、n 個の一意の番号を生成する方法が必要でした。部分的なテンプレートを含めるには、テンプレートにこれらの数字が必要でした。x と y の間の n 個の数値を返すことができる RandomNumberServiceProvider を作成しました。私の $app-closure では、このサービスを使用し、小枝テンプレートに乱数を割り当てました。終わり。

より複雑な例: 「複雑な」インポート関数を開発する必要があるとしましょう。ディスクからデータを読み取り、データを検証し、何らかの方法で変換し、最終的にデータベースに保存する必要があります。この場合、他のサービスにアクセスする ImportServiceProvider も作成しますか (永続化のため...)?

4

1 に答える 1

3

そのようなもの、はい。

ただし、完全なサービスを注入する代わりに、工場だけを注入することをお勧めします。このようにして、アプリケーション ロジックがコントローラー (または同等のもの) でリークするのを防ぐと同時に、ドメイン オブジェクトを特定のタスクに集中させたままにすることができます。

$factory = new \My\ServiceFactory( /* ..dependencies */ );

// --- SNIP

$app->get('/foo/{bar}', function ($app, $bar) use ($factory) {

    $someService = $factory->build( ... );
    // do something with $someService

    return new Response(...);
});
于 2012-11-05T14:03:00.117 に答える