0
public class PageRoleService
{
public void SetRoles(Page page, User activeUser)
{
var rb = page.Project.ProjectType.GetRoleFor(activeUser.UserType);
page.RolesForPage.Add(activeUser, rb);
var managers = GetAllManagersOf(activeUser);
foreach (var m in managers)
{
page.RolesForPage.Add(m, rb);
}
}
}
public class Project : Entity
{
public ProjectType ProjectType { get; set; }
public IList<Page> Pages { get; set; }
}
public class Page : Entity
{
public string Name { get; set; }
public Project Project { get; set; }
public IDictionary<User, RoleBehaviour> RolesForPage { get; set; }
}
public class ProjectType : Entity
{
public IQueryProcessor QueryProcessor { get; set; }
public IList<RoleBehaviour> RoleBehaviours { get; set; }
public RoleBehaviour GetRoleFor(USerType userType)
{
var behaviour = return QueryProcessor.Execute(new GetRolesByUserAndProjectTypeQuery() {
ProjectType = this,
UserType = userType
});
// Filter behaviour attributes for project type properties, business rules, etc...
// FilterBehaviour(behaviour);
return behaviour;
}
}
public class GetRolesByUserAndProjectTypeQuery
{
public UserType UserType { get; set; }
public ProjectType ProjectType { get; set; }
}
public class GetRolesByUserAndProjectTypeQueryHandler
{
public Db Db { get; set; }
public RoleBehaviour Execute(GetRolesByUserAndProjectTypeQuery query)
{
return Db.FirstOrDefault(r => r.UserType == query.UserType && r.ProjectType == query.projectType);
}
}
public class RoleBehaviour : Entity
{
public Role ROleForArea1 { get; set; }
public Role ROleForArea2 { get; set; }
public UserType UserType { get; set; }
public ProjectType ProjectType { get; set; }
public IDictionary<string, string> Attributes { get; set; }
}
public enum UserType
{
A,
B,
C,
D
}
public class Role : Entity
{
public IList<string> Permissions { get; set; }
}
我不使用存储库,也不需要数据抽象,我使用CQRS进行crud操作。 (CreateProjectCommand,GetRolesByUserAndProjectTypeQuery等)。 用户关联了很多项目和页面。用户对每个页面实体的角色不止一个,并且在用户(客户端)请求获取所有项目页面或单个页面项目时动态创建。DDD/CQRS,实体有权访问Query,Command?
我的页面角色服务确定活动用户及其管理者的页面角色。我的MVC控制器使用PageRoleService。
- PageRoleService是应用程序服务或域服务或.....?
- QueryProcessor in Entity(ProjectType)is invalid approach?如何处理这个/他们的问题没有懒惰或急切加载?
- RoleBehaviour是实体还是值对象?
- PageRoleService是域中的服务还是业务逻辑?
“我使用CQRS进行粗碎作业。”为什么? –
@DennisTraub我不使用存储库模式,我更喜欢使用应用程序服务中的数据访问。另外我的应用程序具有基于命令的UI。所有操作都是命令。 – oguzh4n
您不需要任何CRUD存储库。而且你也不需要CQRS。如果解决方案比您想要解决的问题更复杂,那么可能会稍微偏离一些问题。 –