0

我正在设计一个系统。 ,它有一个非常灵活的结​​构来代表组织,这是非常重要的。设计系统组织结构表示

基本的要求很简单:

  1. 有集装箱的层次结构(组织单位)
  2. 容器将包含其它实体(包括其它容器),实体,如:
    • 组可以包含用户
    • 日历
    • 等...
  3. 还有一个要求,以便根据结构的许可和注册过程。
  4. Users \ Groups可以向其他容器注册不同的角色和权限,并且将授予他们对所有其他实体具有相同角色的权限,还可以定义组和日历的管理员。

初始想法:

  1. 使用 “复合” 设计模式来表示的实体:
    • [[接口]] IEntity - > INT ID,字符串名称...
  2. 每个实体将实现相同的接口
  3. 容器实体将持有将引用这些实体的子项列表。
  4. 每个实体都将持有一个“权限树”,用于在叶子上保存用户列表,该树将表示用户向实体注册为管理者的角色和方式。即,如果用户是注册为通过一组一个所有者的树将显示:拥有者 - >组别1 - >用户1.

沉思:

  1. 如果每个实体具有一个删除\自己添加方法?在接口级定义,或者应该有一个不同的类某种“EntitiesManager”来处理添加编辑和删除实体的所有任务。
  2. 我应该如何建模我的数据库来保存许可树信息?

我很乐意听到关于该主题的任何想法,更正,经验教训或建议。

在此先感谢...

回答

1

为了您的沉思,我建议如下:

  1. 假设你现在不知道的所有实体,他们可能有 非常不同的结构,你应该更好的封装 创建的逻辑/删除的实体类。使用默认实现更常见的超类 将是一个好主意。
  2. 关于权限树。您是否已经完成了 这个实体模型?对于你的情况最好的办法是自上而下的,这是相当多 直接的实体模型映射到数据库模型,当你 已经拥有了它:)
+0

谢谢..只是为了看看我的理解......你建议使用特定的实体类使用CRUD操作。所以如果我想添加另一个容器,它会看起来像这样:MyContainer.Add(),并将他添加到数据库。我以为使用某种FACADE的域管理器类可以帮助我创建实体,例如DomainManager.AddEntity(theEntity,ParentEntity)。 – Mortalus 2012-08-14 19:37:52

+0

是的。如果CRUD逻辑对于所有实体都是非常简单的,那么这种方法是最好的。但让我们考虑一下当你有50个具有非常特定的CRUD逻辑的不同实体时。我不是说可以在数据库级别上执行级联删除。我的意思是像'请为这个新用户创建默认权限集'。你的DomainManager类将被炸毁。另一方面,在实体的典型操作中,您将始终可以轻松访问CRUD逻辑,而无需获取DomainManager实例。 – 2012-08-15 05:12:04