2

皆さん、こんにちは。

MVC サービス層の設計に関する多くの議論を調査して見つけましたが、正確な質問に対する答えは見つかりませんでした。サービス層の相互依存性に関する投稿には、私が考えていることを説明する画像がありますが、参照された投稿でカバーされているとは思えない追加の質問があります。

私のアプリケーションは、複数のコンテキストで人間とやり取りする非営利団体のデータを追跡します。その人間はクライアントだったのかもしれないし、アドバイザーだったのかもしれないし、敵だったのかもしれない。それらは複数にすることができます。クライアントは後で敵対者になる可能性があります (弁護士のクライアントを考えてみてください)。

私の考えでは、新しいクライアントまたは新しい敵対者を作成すると、常に 2 つのレコードが作成されます。1 つのレコードは person テーブルに、1 つのレコードは ancillary テーブルに作成されます。この背後にある私の考えは、ビジネスが特定の人物と過去にやり取りがあったかどうかを確認する場所 (人物テーブル) が 1 つあるということです。

私の質問は、エンティティをコントローラ レイヤと 1 対 0..1 の関係で表す場合、(1) クラスをビューに渡す前にクラスの結合と分割にコントローラを関与させる必要があるかどうかです。(2) そうでない場合、サービス層はビューモデルを構築する必要がありますか?

ここで1800 ライン コントローラに関する投稿を読みました。また、サービス レイヤーはビュー モデルについて認識すべきではないというこの投稿も読みました。これは、コントローラー レイヤーで生きて死ぬと考えさせられます。たとえば、サービス レイヤーがビューモデルに触れていない場合、 (3)オブジェクトの両方をコントローラーに返すのは適切な設計ですか?workerServicePersonWorker

ここに私のエンティティクラスがあります:

public class Record
{
    public DateTime datecreated { get; set; }
    public DateTime dateupdated { get; set; }
    public string Createdby { get; set; }
    public string Updatedby { get; set; }
}

public class Person : Record
{   
    public int ID { get; set; }
    public virtual Worker Worker { get; set; }
    publiv virtual Defendant defendant {get; set;}
    ...
}

public class Worker : Record
{
    public int ID { get; set; }
    public virtual Person person { get; set; }
    ...
}

public class Defendant : Record
{
    public int ID { get; set; }
    public virtual Person person { get; set; }
    ...
} 
4

1 に答える 1

1

「良いデザイン」と自分に合うものとのバランスを見つけてみるべきだと思います。

たとえば、私は を使用する MVC アプリケーションを持っていますASP.NET Membershipが、カスタム テーブルも持っておりUser、そこにユーザーの悪名や OpenID などを格納しています。その同じアプリケーションには、IAdminServiceユーザー管理に関するすべてを処理する があります。
コントローラーに返されるのは、次のようなAdminUserIAdminServiceクラスです。

public class AdminUser
{
    public string UserName { get; set; }
    public User User { get; set; }
    public MembershipUserWrapper MembershipUser { get; set; }
}

MembershipUserWrapperMembershipUserテストと一般的な柔軟性を可能にするデフォルトの単なるラッパーです。

AdminUserとにかく、それは実際にはビュー モデルであると主張することができますAdminUserIAdminService「サービスレイヤー」にあるという理由だけでを返さないと、不必要に問題が複雑になりAdminUserます。この場合、コントローラーが毎回「変換」を実行する必要はありませんUserMembershipUserWrapperAdminUser

workerService が Person オブジェクトと Worker オブジェクトの両方を Controller に返すのは良い設計ですか?

この場合は多分そうだと思います。Worker2 つの別個のサービスを用意することもできますが、aと aを取得するロジックのほとんどPersonはおそらく同じであるため、多くのコードを繰り返すか、共通のタスクを実行する 3 つ目のサービスを作成する必要があります。

適切な設計に注意を払う必要がありますが、KISSYAGNIも考慮に入れる必要があります。今すぐ理にかなったことを行い、必要に応じて適宜リファクタリングしてください。

于 2011-03-29T08:43:35.780 に答える