这是一个很好的设计吗?我怎样才能做得更好?

时间:2016-12-30 09:21:46

标签: c#

我有一个现有的类,如下所示:

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);

现在,它工作正常,但我的问题是:这是以一种好的方式写的吗?可以更好吗?如果是的话怎么样? 提前谢谢。

3 个答案:

答案 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等内容。

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

命名是主观的,所以请随意调用它,但我不会使用MyUser