私は最近、MVC アプリでフォーム データを最適に処理する方法についてのディスカッションで、Jani Hartikainenによってサービス レイヤーについて紹介されました。いくつか読んだ後、私はこのアプローチの利点を本当に見ることができます. 私の質問はこれです:
サービス クラスはどのように構成する必要がありますか?
- まず、モデル
user_service()
に適切なクラス名user()
はありますか、それとも別の標準がありますか? - 私のサービスのメソッドは 1 つのタスクしか実行しないため、これらは常に
static function
. サービス クラスはデータを表すのではなく、一連のアクションであるため、これは適切なようです。 - サービス メソッドは 1 つだけを受け入れる必要
argument
がありarray
ます。
ユーザーデータを保存するために、フォームがコントローラーにデータを投稿したとします。
<?php
class form_controller extends controller
{
public function process_submit()
{
if(user_service::update_preferences($_POST))
{
echo json_encode(array('success' => true));
}
else
{
echo json_encode(array('success' => false));
}
}
}
class user_service
{
// Accepts array()
public static function update_preferences($fields)
{
// Check for required fields
if((
isset($fields['firstname']) and
isset($fields['lastname']) and
isset($fields['email'])
) == false
{
return false;
}
// Update user
try
{
$s = new user();
$s->set_firstname($fields['firstname']);
$s->set_lastname($fields['lastname']);
$s->set_email($fields['email']);
$s->update();
return true;
}
catch(Exception $e)
{
return false;
}
}
}
次の理由から、これは良いアプローチだと思います。
controller
フォームに別のフィールドを追加できます。更新する必要はありませんservice
。コントローラーは、渡されたデータが何であるかを気にする必要はなく、単に渡されたということは正しいようです。これにより、コントローラーが小さくなり、モデルのロジックが小さくなります。- を渡さなかった場合
array
、複数の引数を持つ関数をセットアップできました。たとえば、私の機能はupdate_preferences($firstname, $lastname, $email)
. ただし、これは 20 を超える引数を持つ関数 (大きなフォームの場合) を作成する可能性があり、その順序は操作するのがひどくなります。 - を渡すこともできますが
object
、それは意味がありますか? オブジェクトを作成している場合、それはそれが表すオブジェクト (この場合はユーザー) である必要がありますよね? しかし、コントローラーがユーザー オブジェクトをインスタンス化することに意味があるでしょうか。そもそもそれがサービス層の要点ではないでしょうか? - おそらく、複数の引数を持ついくつかのメソッド (1 つから 3 つしかない場合) と、配列を受け入れるいくつかのメソッド (多数のフィールドがある場合) を持つための議論があるかもしれません。特定のメソッドが何を求めているかを知るには、常にクラスを参照する必要があるため、これは悪夢のように思えます。
ここで行うべき正しいことについて誰か意見がありますか? 私は正しい軌道に乗っていますか?過去に何をしましたか?どうもありがとう!