Net Core:私有成员与数据注解查数据的区别
Net Core: Difference between Private Members and Data Annotations for Data Checking
在 类 中使用私有成员和用于数据验证检查的数据注释有什么区别?一种方式通常比另一种方式更有好处,或者它们是一样的。我没有意见,只是好奇。
1)
例如这里,我需要私有成员(比检查少than/greater)。
public class PageModel
{
private int page;
public int Page
{
get => page;
set
{
if (value < 1 || value > 100) { throw new ArgumentException("Number should be between 1 and 100"); }
else page = value;
}
}
2)
public class PageModel
{
[Range(1,100, ErrorMessage="Number should be between 1 and 100")]
public int Page{get;set;}
}
数据注释和私有成员一样安全吗?
不对,差别很大
如果在 setter 中引发异常,则无法在不触发验证的情况下设置值。
如果您使用数据注释,您只需将元数据添加到 属性 以了解如何验证它。但是您需要一些东西来使用此元数据来进行验证。 EFCore 或 asp.net 使用此信息进行一些验证。
这意味着,如果您使用第一个实现,以下代码将抛出参数异常,但如果您使用数据注释,则执行。
new PageModel { Page = 300 };
要手动执行数据注释的验证,您必须调用 Validator.TryValidateObject。
在 类 中使用私有成员和用于数据验证检查的数据注释有什么区别?一种方式通常比另一种方式更有好处,或者它们是一样的。我没有意见,只是好奇。
1)
例如这里,我需要私有成员(比检查少than/greater)。
public class PageModel
{
private int page;
public int Page
{
get => page;
set
{
if (value < 1 || value > 100) { throw new ArgumentException("Number should be between 1 and 100"); }
else page = value;
}
}
2)
public class PageModel
{
[Range(1,100, ErrorMessage="Number should be between 1 and 100")]
public int Page{get;set;}
}
数据注释和私有成员一样安全吗?
不对,差别很大
如果在 setter 中引发异常,则无法在不触发验证的情况下设置值。
如果您使用数据注释,您只需将元数据添加到 属性 以了解如何验证它。但是您需要一些东西来使用此元数据来进行验证。 EFCore 或 asp.net 使用此信息进行一些验证。
这意味着,如果您使用第一个实现,以下代码将抛出参数异常,但如果您使用数据注释,则执行。
new PageModel { Page = 300 };
要手动执行数据注释的验证,您必须调用 Validator.TryValidateObject。