我有一个现有的类,如下所示:
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);
现在,它工作正常,但我的问题是:这是以一种好的方式写的吗?可以更好吗?如果是的话怎么样? 提前谢谢。
答案 0 :(得分:3)
我更喜欢将模型与业务逻辑和Db分开,因此我最终将模型命名为User
public class User
{
public string Id { get; set; }
public bool Status { get; set; }
}
并有另一个名为UserRepository的类,UserService ..无论
public class UserService {
public User GetUser(string param1, string param2)
{
//make db call based on param1 and param2 and pupulate MyUser object
return user;
}
}
并使用Dependency Injection注入DbContext以及稍后的UserService类
答案 1 :(得分:1)
您的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);
答案 2 :(得分:0)
我建议的唯一更改是将MyUser
重命名为UserRepository
等内容。
原因是,该类看起来是一种加载用户的方式,通常执行这些类型操作的类称为UserRepository
或UserProvider
,这种类型的命名。
命名是主观的,所以请随意调用它,但我不会使用MyUser
。