0

私はこのテーマについて検索してきましたが、私が欲しいものを正確に見つけられませんでした. 基本的に、私はすべての UML 要素、ユース ケース、クラス ダイアグラム bla bla を含むプロジェクトの計画を開始しました。次に、ASP.NET MVC を使用することにしました。アプリケーションは一種の O-Desk または Elance です

ユーザー、契約者、会社、モデレーター、管理者がいます。

モデルがこのユーザーを表す方法と、asp.net mvc 機能で特権とロールを設定する方法について少し混乱しています。

通常のアプリケーションでは、それらのそれぞれにクラスがあり、おそらくユーザー名、パスワード、および電子メールを持つ User を拡張します。

請負業者クラスには、請負業者に関するすべての情報があります。たとえば、彼が応募した仕事、履歴書などです。

Company クラスには、投稿されたオファー、会社名などがあります。

では、これを行うためのベストプラクティスは何ですか? ここにコードがあります

 public class User
 {
    [Key]
    public string UserID { get; set; }

    [Required(ErrorMessage = "Email is required")]
    [DataType(DataType.EmailAddress, ErrorMessage="Email Format is wrong. Example: user@user.com")]
    [Remote("doesEmailExist", "Contractors", HttpMethod = "POST", ErrorMessage = "Email already exists. Please enter a different one.")]
    public string Email { get; set; }

    [Required]
    [Remote("doesUserNameExist", "Contractors", HttpMethod = "POST", ErrorMessage = "User name already exists. Please enter a different user name.")]
    public string Username { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    public string Password { get; set; }
}

ちょっとした疑問ですが、ContractorID を取得する必要がありますか? またはユーザーIDを取得しますか?生成後のDBがどのようになるか分からないので質問します。とにかくこれからやってみます。

public class Contractor extends User
{
    [Key]
    public int ContractorID { get; set; }

    [Required(ErrorMessage = "First Name is required")]
    [StringLength(20, ErrorMessage = "First Name max length is 20 characters")]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Required(ErrorMessage = "Last Name is required")]
    [StringLength(20, ErrorMessage = "First Name max length is 20 characters")]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }
}


public class Company extends User
{
    [Key]
    public int CompanyID { get; set; }

    [Required(ErrorMessage = "Name of the Company required")]
    public string CompanyName { get; set; }

    private List<Offer> Offers;

    public void AddOffer (Offer offer) {
        Offers.Add(offer);
    }
    public void RemoveOffer(Offer offer)
    {
        Offers.Remove(offer);
    }

}

提供されたヘルプやヒントに感謝します! よろしく。

4

1 に答える 1

0

モデルですべてを行うことは避けます。モデルはデータ トランザクション用であり、データベースを反映する必要があります。

そこには2つのことがあります。-1 つは、データをプリミティブな状態で保存するために使用できるモデルです -もう 1 つは、その情報を表示する必要があるビューです

じゃあ何をすればいいの??簡単です。最初にモデルを作成し、viewModel を作成します。viewModel はビューとそのルールを反映するため、各ビューと部分ビューには 1 つがあります。そこに書かれている方法でモデルを簡単に使用しますが、ビューからのものを取り除きます(exe:[Required(ErrorMessage = "Last Name is required")])そのために、そのものを保持する別のクラスを作成します、たとえば、2 種類のユーザーが存在するビューを作成できます。そのために、次のようなものを作成できます。

public class CompanyView
{
    private company= new Company();
    private contractor = new Contractor();

    [Display(Name = "Contractor Name")]
    public string ContractorName{ get{return contractor.FisrtName+ contractor.LastName;} }

    public int CompanyID { get{return company.CompanyID;} set{company.CompanyID = value;}}

    [Required(ErrorMessage = "Name of the Company required")]
    public string CompanyName { get{return company.CompanyName;} set{company.CompanyName = value;}}

    private List<Offer> offers;
    public SelectList Offers{ get { return new SelectList(offers, "OfferID", "OfferName", ""); } }

}

またはそのようなもの。ポイントは、離れていないビューを表すクラスを作成できるようになったことです。これは、データベースで表示されるものとまったく同じです。これを行うと、ビューを拡張し、モデルを使用してユーザーに表示可能で自動入力されるものを作成できます。たとえば、ユーザーがViewModelを返すビュー情報を含むフォームを投稿すると、すでに入力されています。ビューモデル内にあるすでに満たされたモデルをプライベートとして使用して、必要なものを保存できます。

ビューモデルのすべての請負業者フィールドを使用したことに注意してください。会社の詳細を変更するときに、請負業者の名前を表示する必要がある場合を想像してください。その場合、請負業者から何も保存するつもりはありません。彼の名前を表示するだけでよく、ビューモデルでは表示するために彼の名前を入力するだけでよく、必要な検証などは必要ありません。十分であることを示すだけです。データは、ビューモデルを作成するときにコンストラクター、ファクトリー、または必要なものに入力できるクエリから取得されます。

紛らわしいですが、何かわからないことがあれば、後で改善しようとします。「まあまあ」の英語も申し訳ありません

于 2013-02-06T14:11:15.810 に答える