这是一个很好的设计吗?如何使它变得更好



我有一个看起来像这样的现有类:

public class MyUser
{
 public string Id { get; set; }
 public bool Status { get; set; }
 public MyUser GetUser(string param1, string param2)
 { 
  var user=new MyUser();
  //make db call based on param1 and param2 and pupulate MyUser object
  return user;
  }    
}

现在,当我尝试访问此方法时:

 var myUser = new MyUser();
 myUser =myUser.GetUser(param1, param2);

现在,它运行良好,但是我的问题是:这是很好的方式吗?可以更好吗?如果是的话?预先感谢。

我更喜欢在业务逻辑和DB上分开模型,因此我将最终拥有名为user的模型

public class User
{
  public string Id { get; set; }
  public bool Status { get; set; }  
}

并有另一个名为UserRepository的类

public class UserService {
 public User GetUser(string param1, string param2)
 { 
     //make db call based on param1 and param2 and pupulate MyUser object
     return user;
  } 
}

并使用依赖注入来注入DBContext,然后您的UserService类

您的GetUser()方法就像工厂一样。问题是,为什么需要实例化MyUser才能获取另一个MyUser对象?

所以我建议将GetUser()成为static方法:

public class MyUser
{
    public string Id { get; set; }
    public bool Status { get; set; }
    public static MyUser GetUser(string param1, string param2)
    { 
       var user=new MyUser();
      //make db call based on param1 and param2 and pupulate MyUser object
      return user;
    }    
}

然后您可以这样使用:

var myUser = MyUser.GetUser(param1, param2);

我建议的唯一更改是将 MyUser重命名为 UserRepository

原因是,该类看起来是加载用户的一种方式,通常执行这些类型动作的类称为UserRepositoryUserProvider,该类型的命名。

命名是主观的,所以请随时称其为您想要的任何东西,但我避免使用MyUser

最新更新