我正在使用 asp.net mvc 3。我有这样的场景:
- 我有用户模型和组模型。一个用户可以有很多组,一个组可以有很多用户。因此,它是多对多的关系。
- 我有一个 UserController 和一个 GroupController。
- 用户可以创建一个新组。
- 我有存储库模式中描述的 UsersRepository 和 GroupsRepository。
- GroupController 有一个 Create(Group newGroup) 动作。
- 一个用户不得拥有超过 10 个组。
- 组名必须是唯一的。
问题 1:要处理限制 6,我必须在类 User 上实现 IValidatableObject,如果 User 有超过 10 个组,则生成验证错误。但是,由于 GroupController 的 Create 操作仅接收 Group 作为参数,因此模型绑定器将永远不会调用 User.Validate()。
问题 2:处理限制 7 的唯一方法是针对 Groups 存储库中已经存在的所有 Groups 验证新组名。因此,此验证必须在 GroupsRepository 中。我说得对吗?
毕竟,我觉得我做错了什么。我的问题是:在我的场景中,实现现有用户创建新组的最佳方式是什么?我应该创建像 UserGrougViewModel 这样的视图模型并将其传递给 GroupController 的 Create 操作吗?或者我应该保持 Create(Group newGroup) 操作不变,并在 UserController 上添加一个 CreateGroup(User user) 操作以根据规则 6 验证用户,然后重定向到 GroupController 的操作 Create(Group newGroup)?