作者bill42362 (酒池肉林夜夜生科)
看板OOAD
标题Re: [请益] 这种情况有比 Decorator 更好的模式吗?
时间Mon Oct 14 16:38:46 2013
: : A {
: : display();
: : zoom();
: : }
: : B {
: : display();
: : play();
: : }
: : C {
: : display();
: : copy();
: : }
: 权限决定是否加上的 share(), vote(), edit(), delete()
: 比如甲因为是作者,所以为他加上 edit() 和 delete()
: 同一个物件乙看到时可能只有 vote()
: 而丙因为是甲的好友,所以可以 share(), vote()
: 推 legendmtg :你应该先考虑把share() vote edit()这些function 10/13 04:24
: → legendmtg :做成接收A B C这些type的non-member function 10/13 04:25
: 推 tails32100 :个人想法:就算动态加上去一样,在调用时一样要判断 10/13 12:28
: → tails32100 :直接把要用的function全写进去,判断写在里面会比较 10/13 12:29
: → tails32100 :单纯好懂 Orz 10/13 12:30
: 推 qrtt1 :看起来没有动态的必要,这是有没有权限的问题啊xd 10/13 20:18
: → qrtt1 :你需要的是一个好的权限架构吧(思 10/13 20:33
: 推 legendmtg :提供set/get function就好了啊 为什麽要做成public? 10/13 21:10
小弟这个系统目前是实作在网页上
所以先试着从Q大的权限架构这个点来思考
权限我想到的实作方法有两种
1) 让 ABC 都拥有 share(), vote(), ...method,
将执行的动作送至伺服器,由伺服器判断权限并回传结果。缺
点是流量会非常大,伺服器不够好可能会有点辛苦。
这其中又分为两种作法:
i. 使用 non-member function 或是建立另一个接受 ABC 为
参数的物件专门处理这些行为。
ii. 将所有的 ABC 物件都加上这些 methods,但这样会造成大
量重复的程式片段,以後要增修都很麻烦,暂不考虑。
2) 将权限判断放在 client 端,藉以减少流量,但事实上为了防
止伪 client,还是要在 server 端再判断一次。
这也分两种方法:
i. 在 new 物件时同时向伺服器取得权限资讯,并只为物件加
上允许的 methods。可惜在各种搜寻下都找不到适合的设计
模式,这部份还请大大多多帮忙。TT
ii. 使用类似 1) 的方法,但是在取得权限资讯後将不允许的
行为从 UI 部分锁住。
目前感觉 2-ii 的方法是可行性最高的,也可以达到节省流量的效果。
To L 大: 印象中有看过一篇文章,建议 set/getter 除非是有再处
理效果,如: setValue(a) { this.a = a/2; }。不然如果成对出
现时语意上跟直些设成 public 差别不大。所以我遇到这种情况通
常都是设成 public 比较多。 @@"
不知道小弟这样的想法有没有再改进的空间,感谢大大协助!!
--
想你的时候 不一定能告诉你
如果不告诉你 也能会意
那我们就是有 真正的默契
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 121.215.129.5
1F:→ qrtt1 :不用单独加在 A, B, C 内,写一个 decorator 10/14 18:10
2F:→ qrtt1 :ModificationSupported() 把它们包在里面 10/14 18:10
3F:→ qrtt1 :method 内只是多个 if(!isOwnner()) return; 10/14 18:11
4F:→ qrtt1 :流入的量应该远比流出的小,还是你有特别的应用@@ 10/14 18:13
5F:→ qrtt1 :这样功能的变动都在哪一层支援修改的功能 10/14 18:16
6F:→ bill42362 :目前大部分功能变动都希望在 client 端完成 10/15 01:15
7F:→ bill42362 :减少流量其实是希望反应可以及时一点,不希望使用者 10/15 01:17
8F:→ bill42362 :点按钮要等 server 回应,权限不足的操作直接显示不 10/15 01:20
9F:→ bill42362 :ModificationSupported() 的方式就是 1-ii的物件版 10/15 01:22
10F:→ bill42362 :吗? 感谢回覆 我会再想想~ 10/15 01:23
11F:→ qrtt1 :你没办法只选择做一边,权限这种事是 server 的责任 10/16 09:04
12F:→ qrtt1 :client 只是为了使用者体验做的 :P 10/16 09:04
13F:→ bill42362 :同感!! 想过之後就发现两边都不能省 XDD" 10/16 09:49
14F:→ dlikeayu :先画uml图吧,不用用写code的方式去看,滑鼠拉一拉 12/14 01:31
15F:→ dlikeayu :关系搞不好你要的东西就突然出来了 12/14 01:32