向POCO添加方法或创建单独的类来更新POCO的值是一种好的做法吗?

use*_*672 17 c# asp.net-mvc poco

将方法添加到POCO或创建单独的类来更新POCO的值是否是一个好的做法,以防我们需要?

例如,

public class ForUser
{
    [Required]
    public int Depratment { get; set; }

    public List<SelectListItem> DepartmentsList { get; set; }

    [Required]
    public int Role { get; set; }

    [Required]
    [StringLength(200, MinimumLength = 3, ErrorMessage = "Length Of The First Name Should  Be More Than Three Letters")]
    public string FirstName { get; set; }

    [StringLength(200, MinimumLength = 3, ErrorMessage = "Length Of The Mid Name Should  Be More Than Three Letters")]
    public string MidName { get; set; }

    [Required]
    [StringLength(200, MinimumLength = 3, ErrorMessage = "Length Of The Last Name Should  Be More Than Three Letters")]
    public string LastName { get; set; }

    [Required]
    [EmailAddress(ErrorMessage = "Invalid Email Address")]
    public string Email { get; set; }

    [StringLength(14, MinimumLength = 10 , ErrorMessage = "Length Of The Mid Name Should  Be More Than Nine Letters and Less than fourteen Letters")]
    [RegularExpression(@"^[+]?[0-9]*", ErrorMessage="Phone Number is not correct")]
    public string PhoneNumber { get; set; }

    [Required]
    public string Password { get; set; }


    public int UserId { get; set; }
    public int Company { get; set; }
    public int Country { get; set; }
    public List<SelectListItem> Roles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我只是用它来保存数据以更新数据model entity或将数据返回到视图.有时我需要在发送object到视图之前更新一些属性,就像Roles上面示例中调用的列表一样,所以我想知道是否应该将方法添加到POCO类中,还是更好地创建一个类来更新属性?

Moh*_*mad 18

在这里,您将找到问题的答案:

POCO不是DTO.POCO代表Plain Old CLR Object,或Plain Old C#Object.它基本上是POJO的普通旧Java对象的.Net版本.POCO是您的业务对象.它包含数据,验证以及您希望放在其中的任何其他业务逻辑.但POCO没有一件事,那就是它成为POCO的原因.POCO没有持久性方法.如果您有一个Person类型的POCO,则不能使用Person.GetPersonById()方法或Person.Save()方法.POCO仅包含数据和域逻辑,没有任何类型的持久性逻辑.你会听到这个概念的术语是持久性无知(PI).POCO是持久无知的.

我喜欢阅读整篇文章,而不是仅仅得到的回答你的问题,但也明白之间的差别POCODTO.


Mig*_*oso 5

在这种情况下,POCO具有ViewModel角色,因此,恕我直言,它应该只是一个数据传输对象(DTO),并且只有最小的代码.

可能是一些验证方法,可能是属性之间的一些基本计算,应该是它.