数据模型的常量放在哪里?

时间:2019-07-14 13:05:01

标签: c# asp.net-core

我正在制作ASP.NET核心MVC项目。在一个解决方案中,我有一些程序集-.Data.Services.Web。在.Data中有模型(用于数据库),DbContext,迁移等。对于模型,我使用DataAnnotations,但是当有一些“不可思议”的数字,例如100(最大长度为(“名称”属性)),我更喜欢使用常量。 例如[MaxLength(CourseConstants.NameMaxLength)]。这些常量可以在“ .Web”程序集中使用。例如,当有人进行课程学习时,我可以使用“课程”模型中相同的常量来限制名称的最大长度。

所以我的问题是-将常量放在哪里?一种方法是在单独的类中(例如-“ CourseConstants”)。但是我认为,为了获得更好的内聚性,我应该将用于“课程”模型的常量放在“课程”类中。而且,如果需要在“ .Services”或“ .Web”中使用它们,则应从“课程”类中调用它们-例如Course.NameMaxLength

P.S。抱歉,如果我不遵循此站点和社区中的某些规则,这是我的第一个问题。

情况1:

public class Course
{
    public int Id { get; set; }

    [Required]
    [MaxLength(CourseConstants.NameMaxLength)]
    public string Name { get; set; }

    [Required]
    [MaxLength(CourseConstants.DescriptionMaxlenght)]
    public string Description { get; set; }

    public DateTime StartDate { get; set; }

    public DateTime EndDate { get; set; }

    [Required]
    public User Trainer { get; set; }
    public string TrainerId { get; set; }
}

public class CourseConstants    
{
    public const int NameMaxLength = 100;

    public const int DescriptionMaxlenght = 200;
}

情况2:

public class Course
{
    public const string NameMaxLength = 100;
    public const string DescriptionMaxlenght= 200;

    public int Id { get; set; }

    [Required]
    [MaxLength(NameMaxLength)]
    public string Name { get; set; }

    [Required]
    [MaxLength(DescriptionMaxlenght)]
    public string Description { get; set; }

    public DateTime StartDate { get; set; }

    public DateTime EndDate { get; set; }

    [Required]
    public User Trainer { get; set; }
    public string TrainerId { get; set; }
}

1 个答案:

答案 0 :(得分:0)

在不同项目中分离模型的常见原因是您可能希望将其重用于其他应用程序。例如,您有一个API,它以JSON格式返回一些模型,并且您希望在使用该API的应用程序中使用完全相同的模型,因为它是相同的。更好的是,当有人更改班级时,它也会在您的应用程序中得到更新。

不过,您的问题与数据访问层内部使用的数据模型有关。这些模型仅应在您的业务类别中使用,当然也应在DAL中使用。它们不应在DAL和访问数据的项目范围之外重复使用。如果要从外部使用它们,则可以将它们映射到与EF类不同的类的API模型。

也就是说,常量应该与EF数据类一起成为DAL项目的一部分,因为它们不应在其他任何地方重用。之所以将它们放在其他位置,唯一的原因是作为一个程序集,以便在具有PersonNameLength或EmailLength等常量的项目之间共享。