将逻辑放到Approval用户的位置?

时间:2011-10-08 13:12:05

标签: asp.net-mvc-3 architecture tdd repository-pattern

在我的申请中得到:

public class User
{
    [Key]
    public Guid Id { get; set; }
    public string Name { get; set; }
    public bool IsApproved { get; set; }
}

public class DataContext : DbContext
{
     DbSet<User> Users { get; set; }
}

public class Repository
{
    DataContext db = new DataContext();

    public bool ApproveUser(User usr) //This is correct place?
    {
        usr.IsApproved = true;
        db.Attrach(usr);
        return db.SaveChanges() > 0;
    }
}

问题

在哪里放置逻辑批准用户?

在存储库中?在自己的班级?

我问这个是因为今天是存储库,一旦批准是存储库中存储库中的生产逻辑而不是假的,我就很难对其进行测试。

1 个答案:

答案 0 :(得分:1)

存储库是写入数据访问的地方。用户批准更可能是业务流程,因此最好将其与数据访问分开。我会这样做(下面的代码更像是伪代码,而不是完整的生产就绪的东西

public interface IUserRepository
{
    bool Save();
}

public class UserRepository : IUserRepository
{
    public bool Save(User user)
    {
        db.Attrach(user);
        return db.SaveChanges() > 0;
    }
}

public interface IUserService
{
   bool Approve(User user);
}

public class UserService : IUserService
{
   readonly IUserRepository _userRepository;

   public UserService(IUserRepository userRepository)
   { 
      _userRepository = userRepository;
   }

   public bool Approve(User user)
   {
     user.IsApproved = true;
     return _repository.Save(User user);
   }
}

现在,这已经是可测试代码