日期:2014-05-16  浏览次数:20763 次

[在现等]一个程序的架构问题?
现在公司安排我做个企业层级管理的媒体服务器的项目。

  功能主要就是:
1、一个部门说话,包括本部门在内,以及本部门管辖的所有下级部门都可以听到语音。当有上级部门说话执行功能2的情况
2、当在部门说话的期间,有上级部门发话,这时直接挂断本部门的话语权,这时上级部门执行功能1的情况。

  起初认为是简单的树状结构。后来细细一想并不是简单的树状结构。有可能一个结点(部门)的子结点(下属部门)指向所有兄弟结点(同级部门)的子结点(下属部门)。这样子与我的设计之初就有了出入,最开始想的就是一个简单的树状结构,每个结点(部门)都有一个父结点(上级部门)。每个子结点(下级部门)只隶属于自己的结点(部门),这些子结点不同时隶属于兄弟结点(同级部门)。
  从现在来看是不能像普通树的做法来做了,想问一下现在应该用什么样的框架来管理这些企业内部的关系网络。我现在想的方法是有两个,一个是用有向图来管理,另一个是为每个部门维护一个自己的树状结构。但是这两个架构都是有一个小问题就是无法快速定位上级部门是否有话语权,可能都需要遍历大边的结点才能得知是否有上级部门在说话。

  想请教一下做过类似,或有一些自己看法的高人们给点建议。急,在线等,先谢过了
 

------解决方案--------------------
你这样就没法弄了,最后程序会乱。
尝试把两个功能分开呢?
1 部门管理本身就是树形
2 业务相关的通过其它模块控制
------解决方案--------------------
能不能2个人同时说话
还有例如 1 2 3 属于 A的下属部门 3 4 5 属于 B 的下属部门
当A B 同时有人说话 那部门3 有什么反应
------解决方案--------------------
如果是我,用最笨的方法
直接每个部门建立一个上级部门库,和一个下级部门库

这样就可以了,除非这个公司很庞大,几百上千个部门,导致这个单独建库的方法比用树和图算法花费的时间和精力还多。
用不用算法,在我看来要计算投入和收益才决定
------解决方案--------------------
依照我来看,直接用HASH表存储节点(存取快一些),节点中有一个关于权限的成员变量。
说话的时候谁的权限大就允许谁说话
想不出来用什么树来解决,部门少的话可以考虑。
------解决方案--------------------
http://www.wmis.com.cn/wmis/index_new2/cpjs_01.html
------解决方案--------------------
菜鸟,个人觉得什么图,什么树要是麻烦的话,直接部门编码得了

比如:董事会 是最高部门 01;总经理0101,技术部010101 ,etc

编码两位一个等级,这样的话通过编码来判断说话人的等级,

例如:技术部的人在说话,系统存入他们的等级编码,当另外一个要说话的时候直接判断编码

只要位数比她少的。直接切断,让老大说话。呵呵
------解决方案--------------------
每个部门给个权限优先级不行吗。。
然后按照优先顺序来

权限设计可以这么作:首先建立一个有向无圈图,然后找到一个极大元,权限设最高,然后剔出这个节点。

迭代计算便可获得所有部门的优先级

程序运行只要比较优先级就行了
------解决方案--------------------
我想法很简单啊,树(不用图,这样优先级才好确定)+优先级队列(不过得先确定有多少个部门才能确定优先级)。
树正如你们说的,用来记录他们之间关系,有了优先权其实都很好办对吧?要说话先进队列,队列一更新马上进行调度。

你说的那个下级部门可能可以管理上级部门的情况可以加一个标记,每次对队列进行调度的时候通过标记+优先级进行调度。

不过要注意的是,树需要有两个指针,一个是指向当前节点能管理的部门(部门低管理部门高的),另外一个也一样,不过是从部门高到部门低,有这种情况就需要加标记。


其实如果是问实际上来做,如果不考虑空间复杂度,我会开若干个很大的数组去管理。