[在现等]一个程序的架构问题?

品茶识书香 2011-08-10 04:27:59
加精
现在公司安排我做个企业层级管理的媒体服务器的项目。

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


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

想请教一下做过类似,或有一些自己看法的高人们给点建议。急,在线等,先谢过了
...全文
1977 111 打赏 收藏 转发到动态 举报
写回复
用AI写文章
111 条回复
切换为时间正序
请发表友善的回复…
发表回复
xujianglun 2011-08-20
  • 打赏
  • 举报
回复
jf..
moheng1 2011-08-19
  • 打赏
  • 举报
回复
学习...
码事 2011-08-19
  • 打赏
  • 举报
回复
拿分走人。
tjji23 2011-08-19
  • 打赏
  • 举报
回复
路过,不会,顶一下,
wentingChang 2011-08-19
  • 打赏
  • 举报
回复
兄弟们,觉得我应该拿分的,就顶一个,我自己顶一个先。哈哈!!!
wentingChang 2011-08-19
  • 打赏
  • 举报
回复
LZ 在下的方案如下:

1、首先用树结构来描述各部门(或细分至人员)之间的基本组织架构和关系,以此来定义每个部门的权限大小,另外,再设立一个优先级别(优先级别的定义也是按照部门树的层次来的)。这个优先级别在普通情况下与权限等同,在特殊情况下(即下级部门比某几个上级部门高,或某个部门中某个人员级别高,比如财务通知大家可领工资了,哈哈,顺便开个玩笑。)可以将优先级别设定到所需要的高度。(注:本人觉得这样设计在具体实施时可灵活设定说话优先级别,又不会使部门级别和权限混乱。)部门在程序中可以用散列表(或表)的方式存放,通过权限、优先级可对其进行升序、降序排列。

2、LZ的程序应该是C/S吧,若是,可继续看下去。先说S端,将说和听分开,说话部分采用对象池的管理方式。当有新部门对象要进入池中说话时,先对该对象与池中的部门对象的权限+优先级别(个人觉得也可以只比优先级)进行比较,情况有以下三种:a 池外对象优先级高于池内对象。b 池外对象优先级等同于池内对象。c 池外对象优先级低于池内对象。那么情况a 可将池内部门对象说话权切断,池外对象打开说话权加入池中进行管理。情况b 池外对象排队,先来后到。情况C就不用我说了吧。

然后是听话部分,听话部分可采用广播的方式,广播列表应该动态产生比较好。

在说说C端 当S端发来广播,就禁用本地的说话功能,直到广播结束即可。

3、写了这么多,LZ一定要给分啊。
ploik500 2011-08-18
  • 打赏
  • 举报
回复
好,米萨承认法国人
wanglipo 2011-08-17
  • 打赏
  • 举报
回复
不错,学习了
yuanwza 2011-08-17
  • 打赏
  • 举报
回复
学习......
xiao0915 2011-08-16
  • 打赏
  • 举报
回复
两个功能其实还是一个功能,某能说话,往下走,全听。check能不能说话就是是不是在收听了。
丁小贝 2011-08-16
  • 打赏
  • 举报
回复
重复的数据维护
[Quote=引用 98 楼 ring2004 的回复:]

有想法,顶一个!
引用 25 楼 batmanlf 的回复:
其实每一个部门都分成3级 一个是上级部门, 一个是本部门,一个是下级部门,
每个部门都维护自己的这三级部门。
[/Quote]
cena_jin 2011-08-15
  • 打赏
  • 举报
回复
学习~~!
一老六一 2011-08-15
  • 打赏
  • 举报
回复
怎么感觉大家讨论的都是树形等解决问题的算法,而标题是架构。

我认为LZ可以通过思维导图将各个场景全罗列出来。
然后划分功能模块,数据流,内部接口,外部接口。

至于部门上下级关系有很多CRM系统都涉及到,找找论文或案例,比如电信BSS系统。
算法基于性能要求,还要参考你使用的技术路线,是数据库,还是内存。。。

个人意见,请pp
ring2004 2011-08-15
  • 打赏
  • 举报
回复
有想法,顶一个!
[Quote=引用 25 楼 batmanlf 的回复:]
其实每一个部门都分成3级 一个是上级部门, 一个是本部门,一个是下级部门,
每个部门都维护自己的这三级部门。
[/Quote]
zhangxinre 2011-08-14
  • 打赏
  • 举报
回复
必须画图纸 哈哈~~太复杂了
哈哈王戈多 2011-08-14
  • 打赏
  • 举报
回复
学习学习学习
alfredtofu 2011-08-14
  • 打赏
  • 举报
回复
我想法很简单啊,树(不用图,这样优先级才好确定)+优先级队列(不过得先确定有多少个部门才能确定优先级)。
树正如你们说的,用来记录他们之间关系,有了优先权其实都很好办对吧?要说话先进队列,队列一更新马上进行调度。

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

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


其实如果是问实际上来做,如果不考虑空间复杂度,我会开若干个很大的数组去管理。
lijie123qqq 2011-08-14
  • 打赏
  • 举报
回复
gfd gfd gfd gfd gf fd
sldsdfjjj 2011-08-14
  • 打赏
  • 举报
回复
太复杂了。看不懂。你们都是高手。
zzl_acg 2011-08-14
  • 打赏
  • 举报
回复
每个部门给个权限优先级不行吗。。
然后按照优先顺序来

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

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

程序运行只要比较优先级就行了
加载更多回复(89)

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧