DDD聚合根是否具有创建对象的静态方法是正确的

拥有这样的Create方法是否正确?还是应该在服务内创建用户。这会破坏DDD概念吗?


在这种情况下,最佳做法是什么?


注意:我也使用DI。


  public class User : HistoryBase, IAggregateRoot

    {

        private IEnumerable<Role> _roles = new List<Role>();

        public string Name { get; protected set; }

        public string Lastname { get; protected set; }

        public string Email { get; protected set; }

        public string Password { get; protected set; }

        public string EmployeeNumber { get; protected set; }

        public bool Active { get; protected set; }

        public int SiteID { get; protected set; }

        public IEnumerable<Role> Roles { get { return _roles; } }


        public static User Create(string name, string lastname, string email, string password, string employeeNumber, Site site)

        {

            var user = new User()

            {

                Name = name,

                Lastname = lastname,

                Email = email,

                Password = password,

                EmployeeNumber = employeeNumber,

                SiteID = site.ID

            };


            return user;

        }

    }


慕少森
浏览 187回答 3
3回答

一只甜甜圈

我会选择更清楚地说明您正在做什么的事情,而不是Create。您好像正在网站上注册员工。试着用措辞,好像将要使用该系统的人会说。如果他们说“嘿,您将创建此用户”。然后,您的方法就可以了。如果他们说:“嘿,您可以在我们的网站上注册此员工吗?” 然后,您应该使用:public static Employee RegisterOnWebsite(string name, string lastname, string email, string password, string employeeNumber, Site site){&nbsp; &nbsp; // Creation Code}由于您拥有员工编号作为财产。看来此用户将永远是雇员。您应该对此有所清楚,并以此命名。现在,您的方法将显示为Employee.RegisterOnWebsite(...)。
打开App,查看更多内容
随时随地看视频慕课网APP