【问题标题】:Designing Systems Organizational Structure Representation设计系统组织结构表示
【发布时间】:2012-08-09 00:34:43
【问题描述】:

我正在乞求设计一个系统。 并且它必须有一个非常灵活的结​​构来代表组织。

基本要求很简单:

  1. 具有容器层次结构(组织单位)
  2. 容器将包含其他实体(包括其他容器),实体例如:
    • 可以包含用户的组
    • 日历
    • 等等……
  3. 还要求根据结构促进许可和注册过程。
  4. 用户\组可以注册到其他容器的不同角色\权限,这将授予他们对所有其他实体具有相同角色的权限,还可以为组和日历定义管理器。

初步想法:

  1. 使用“复合”设计模式来表示实体:
    • [[Interface]] IEntity --> int ID, string Name ...
  2. 每个实体都将实现相同的接口
  3. 容器实体将保存一个子项列表,这些子项将引用这些实体。
  4. 每个实体都将拥有一个“权限树”,该树将在叶子中保存用户列表,该树将代表用户作为经理注册到实体的角色和方式。即,如果用户通过组注册为所有者,树将显示:所有者 --> 组 1 --> 用户 1。

沉思:

  1. 每个实体都应该有自己的 Delete\Add 方法吗?在接口级别定义,或者应该有一个不同的类,某种“实体管理器”,它将处理添加编辑和删除实体的所有任务。
  2. 我应该如何为我的数据库建模以保存权限树信息?

我很高兴听到有关该主题的任何想法、更正、经验教训或建议。

提前谢谢...

【问题讨论】:

    标签: design-patterns database-design data-structures architecture structure


    【解决方案1】:

    为了您的沉思,我建议您遵循以下建议:

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

    【讨论】:

    • 谢谢.. 只是想看看我是否理解...您建议使用特定实体类的 CRUD 操作。所以如果我想添加另一个容器,它看起来像这样:MyContainer.Add(),这会将他添加到数据库中。我想使用某种门面的域管理器类来帮助我创建实体,例如DomainManager.AddEntity(theEntity, ParentEntity).
    • 是的。如果 CRUD 逻辑对于所有实体来说都是完全简单的,那么这种方法是最好的。但是让我们考虑当您有 50 个具有非常特定 CRUD 逻辑的不同实体时的情况。我不是说可以在数据库级别实现的级联删除。我的意思是“请为这个新用户创建一组默认权限”。您的 DomainManager 类将被炸毁。另一方面,在实体的典型操作中,您将始终可以轻松访问 CRUD 逻辑,而无需获取 DomainManager 实例。
    猜你喜欢
    • 2017-05-23
    • 2023-03-17
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    相关资源
    最近更新 更多