我有一个看起来像这样的现有类:
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
。
原因是,该类看起来是加载用户的一种方式,通常执行这些类型动作的类称为UserRepository
或UserProvider
,该类型的命名。
命名是主观的,所以请随时称其为您想要的任何东西,但我避免使用MyUser
。