Asp.net mvc 3 在哪里将逻辑提交给用户审批?

Asp.net mvc 3 在哪里将逻辑提交给用户审批?,asp.net-mvc-3,architecture,tdd,repository-pattern,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 cla

在我的申请中:

课程

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;
    }
}
公共类用户
{
[关键]
公共Guid Id{get;set;}
公共字符串名称{get;set;}
公共布尔值已批准{get;set;}
}
公共类DataContext:DbContext
{
DbSet用户{get;set;}
}
公共类存储库
{
DataContext db=新的DataContext();
public bool ApproveUser(用户usr)//这是正确的位置吗?
{
usr.IsApproved=真;
db.Attrach(usr);
返回db.SaveChanges()>0;
}
}
问题: 将逻辑批准用户放在哪里

在存储库中?在我们班


我这样问是因为今天是存储库,一旦批准是存储库中的生产逻辑而不是伪造的,我就很难测试它。

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


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

您是在使用
SqlMembershipProvider
还是您自己的自定义成员资格系统?自定义。我定制了类
会员资格提供者
它帮了我很多!只是个问题。。例如:创建新用户时,我必须为其添加一些角色<代码>变量角色=(从db.Roles中的r开始,其中r.Name==“Couple”选择r)。SingleOrDefault()
user.Roles.Add(角色)这个逻辑将在哪里?这只适用于新用户。您应该在某种业务层中这样做,在我的情况下,相同的UserService类将非常适合。添加默认角色是业务流程,所以应该在业务层中完成。存储库应该只负责将提供的用户按原样保存到数据库。所以我必须在我的服务层中创建一个新的Add方法,并放置业务规则?是的,这就是您必须回答的问题,我保证!在我的应用程序中,我总是使用我的服务层来处理数据吗?我从不直接使用我的存储库?或者在更复杂的情况下,我是否使用我的服务层?我之所以这样做,是因为我的应用程序将在服务层实现utlize(使用更复杂的业务规则),而在只需要存储库的情况下,其他点最简单。
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);
   }
}