2

私はコントローラーを薄く、完全に1つのサービスコールにしようとしています。だから私は私の行動を書く:

public function actionDoSomething($request, $arg1, $arg2)
{
    $result = $someService->doSomething($arg1, $arg2);

    if ($result === true)
        return 'Done';

    return 'Failed, but cannot say why';
}

今、私は疑問を持っています:

  1. サニタイズ/フィルタリング/検証なしで、ユーザー入力がサービスに直接渡されても問題ありませんか? 必ずしもそれを呼び出す必要があるとは限りません (たとえば$arg1、整数であると予想されますが、ユーザーは 1.25 を入力しました)。

  2. サービスは、コントローラーが知らない多くの作業を行う場合があります。サービスから返される型は何ですか? ブール値、整数、SomeResult クラス、配列、混合? 失敗した場合、どのデータを返す必要がありますか? const 値、メッセージの配列? 返信に必要です。採用できる標準またはベストプラクティスはありますか?

4

1 に答える 1

0
  1. サービス層に渡すデータの形式は、サービス層自体によって決定される必要があります。HTML、REST、コマンド ラインなど、いくつかの種類の UI を使用できます。それぞれ、ユーザーとのデータ交換が異なります。これらすべての種類のコントローラーは、ユーザー データを解析し、それを理解できる形式でサービス層に渡す必要があります。逆もまた同様です。つまり、サービス層からデータを取得し、UI の種類に従ってフォーマットします。

    無効なデータが通過しないことを確認するために、サービス レイヤーで最終的な検証を行うことができますが、検証エラーをよりわかりやすい方法でユーザーに報告するのに役立つ場合は、コントローラーから検証サービスを呼び出すこともできます。

  2. サービス層が返すデータのタイプは、呼び出しているメソッドが何をするかによって異なります。たとえば、データ保存メソッドは何も返さない可能性がありますが、データ取得エンティティは必要な形式または好みの形式でデータを返します。

    すべきでないことは、サービス メソッド (またはその他のメソッド) の操作の成功を、それが返す値によってチェックすることです。PHP の例外はそのためのものです。つまり、例外がスローされない限り、すべてがスムーズに進んだとします。

于 2013-09-10T18:19:14.493 に答える