0

我一直在搜索这个主题,但没有找到我想要的。基本上我开始计划一个包含所有 UML 内容、用例、类图等等的项目。然后我们决定使用 ASP.NET MVC。该应用程序是一种 O-Desk 或 Elance

我有用户、承包商、公司、版主和管理员。

我有点困惑模型应该如何表示这个用户以及如何使用 asp.net mvc 功能设置权限和角色。

在一个普通的应用程序中,我会为他们每个人设置一个类,并且他们可能会扩展 User,它会有用户名、密码和电子邮件。

在承包商课程中,我拥有有关承包商的所有信息,例如他申请的工作、他的简历等。

在公司类中,我发布了报价、公司名称等。

那么最好的做法是什么?我这里有一段代码

 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?只是问,因为我不知道数据库在生成后会是什么样子。无论如何,我现在要试试这个。

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

我会避免用模型做所有事情。模型用于数据事务,需要反映您的数据库。

你有两件事。-一个是模型,您可以使用它来存储原始状态的数据 -另一个是您需要显示该信息的视图

那么该怎么办??很简单,先做de model,做viewModel。viewModel 将反映视图及其规则,因此每个视图和局部视图都有一个。让它变得简单,按照它写在那里的方式使用你的模型,但去掉视图中的东西(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。他们可以使用视图模型中已填充的模型作为私有模型来保存您需要的任何内容。

请注意,我注意到在视图模型中使用了所有承包商字段。想象一下,当您更改公司详细信息时,您只需要显示一些承包商名称。在这种情况下,你不会从承包商那里保存任何东西,你只需要显示他的名字,并且在视图模型中你只需要输入他的名字来显示,你不需要所需的验证等。只需显示它是 enouth。数据将来自一个查询,您可以在创建视图模型时将其填充到构造函数、工厂或任何您想要的内容中。

这很令人困惑,但我希望它有所帮助,如果您不理解某些内容,我稍后会尝试使其变得更好。也对不起“如此”的英语

于 2013-02-06T14:11:15.810 回答