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