噓 pttuser: 去看看aws等大廠怎麼作pub/sub的啦,看看現在實作的產品01/05 09:15
→ pttuser: 怎麼區別pub/sub和observer吧01/05 09:15
推 Trick: 好痛01/05 09:15
推 aws9527: 哈哈哈 好腫01/05 09:17
推 femlro: 好多書喔XD01/05 09:18
買書月光族...
→ femlro: 推推01/05 09:18
噓 pttuser: 再不濟就去參加pycon or jcconf這種entry level型的討論01/05 09:18
→ pttuser: 看看現實生活中實作面為何盡量區分兩者的不同01/05 09:18
推 srxrrr: 我是不了解這個技術 但p大火氣也太大了吧 人家好心分享01/05 09:19
→ srxrrr: 如果覺得有誤 就好好討論 拼命噓做啥...01/05 09:19
噓 pttuser: 一天到晚只會糾結名詞,現實實作中早已經把兩者分開談了01/05 09:20
推 dreamnook: ww01/05 09:20
推 Trick: 糾結名詞的是誰啊01/05 09:21
噓 pttuser: 還好痛咧,我是擔心哪天某個新人被要求作pub/sub,結果01/05 09:22
→ pttuser: 看你的文章寫出sync observer結果下場就很慘了01/05 09:22
→ pttuser: 你的文章有講到async和sync差別?新人光看你文章只會被你01/05 09:23
→ pttuser: 誤導就是sync01/05 09:23
ok 的確有可能
((雖然我一再強調 Observer 沒有 sync 規範...
我稍晚會在補充進內文
以免誤導他人 謝大大指教^^
→ pttuser: 真是笑話,這種實際面早已區分的作法居然被你混為一談01/05 09:25
敝人認為
其實就只是名詞重用
並非混為一談
內文討論的範疇 就是 Observer 無誤
推 jack0204: 發一篇文章來讓大家看看你的觀點阿01/05 09:27
→ femlro: 冷靜冷靜,討論不要生氣01/05 09:30
噓 pttuser: 叫我寫就寫?你哪根蔥?林北要來gdb了不陪你們練校話 01/05 09:34
推 wix3000: 看起來跟腦羞有87%像01/05 09:35
→ dreamnook: 那我只好放個激醬了 寫不出來只好噓01/05 09:36
→ dreamnook: 你要牛肉還是豬肉?01/05 09:36
→ robler: 哈哈哈 惱羞成怒囉 講不出東西來就顧左右而言他 裝忙XD01/05 09:37
噓 pttuser: 林北是不用上班膩?當我跟你們一樣都是學生嗎01/05 09:38
小弟開工中
晚上再補充~
→ robler: 不懂在那邊裝懂 被打臉了就假裝要上班沒空 哈哈01/05 09:38
→ dnabossking: 一大早火氣就這麼大,也是不簡單01/05 09:38
→ dreamnook: 我也有上班呀 只是不會閒到可以一直噓而已01/05 09:38
推 ripple0129: 過度探討名詞解釋是不健康的01/05 09:41
沒錯..爭名詞超沒意義阿阿啊
推 loveflames: 如果這麼忙,怎麼有時間一直噓01/05 09:42
推 vn509942: 最喜歡看論戰了01/05 09:43
→ kightkids: 我偏向支持pttuser. observe pattern 只有1對多.01/05 09:53
→ kightkids: 但pub/sub是可以多對多的概念.01/05 09:54
→ kightkids: 可以說pub/sub有observe的概念,但反過來說aka就不行。01/05 09:55
的確,現今實務中的 pub/sub ,類似把 observer 當實做子集的概念。
但我文中所指的是更高的抽象層次
謝謝討論:)
推 elements: 常有人說 xxx 只是工具,重要的是背後的腦袋01/05 10:06
→ elements: 名詞..很重要.. 但知道某些名詞被重用也是你的能力之一01/05 10:08
沒錯! 其實就只是名詞重用
→ elements: 事實上詞彙指的常常是一片東西 而不是一個東西01/05 10:08
→ elements: 真要挑語病 挑不完的01/05 10:10
→ elements: 至於 GoF 的公信力... 我個人是覺得還好.. 也就本書01/05 10:11
因為我在探討的
就是該書阿 xd
推 vencil: 糾結名詞又惱羞01/05 10:11
→ elements: 我剛畢業的時候也很注重名詞.. 但你發現幾個強者講的不01/05 10:13
→ elements: 一樣,就漸漸覺得應該要學習能夠穿過詞彙去懂那個想法 01/05 10:14
有感,許多名詞提出時,抽象層次高
一有普遍實務做法,就容易被混淆重定義
要爭爭不完..
推 gn01838335: 一直狂噓xdd01/05 10:17
→ pttworld: 認為是另一個名字、稱呼,路過。01/05 10:28
感謝:)
推 Ekmund: 等等 observer有規定只能一對多?01/05 10:39
→ Ekmund: subject完全可以擴展吧01/05 10:41
沒錯
噓 sing10407: 連討論都不討論就說打臉別人? 我還以為是覺醒青年版01/05 11:26
這不是在討論嘛o.o
推 ug945: 戰技術不錯啊 XD01/05 11:31
推 gn01838335: Subjet擴展違背原則啊xdd01/05 11:38
→ gn01838335: 戰這個每個人有很多意見xdd 01/05 11:40
→ gn01838335: 我可以加入戰局嗎 01/05 11:40
其實我也覺得蠻有趣的 xd
我說一下我的看法
用個比較爛的例子:
「就像資料庫的概念
多對多,其實就是兩個反向一對多」
原著中有提到一個 Observer
是可以觀察多個 Subject 的
一對多僅為單一抽象觀念的兩個層面
→ Ekmund: 可以 我只寫過pub/sub 是真的不懂在求教01/05 11:41
原著有說明
當遇見複雜的情形
可以在引入 中介者模式的變化
或再結合 單例模式
Observer Pattern
本身抽象程度高、變形之廣
可想而知@@
推 Sirctal: pttworld幹嘛火氣那麼大 大家都要上班阿...01/05 11:49
→ Sirctal: 你可以晚上寫一篇pub/sub 跟 observer的差異吧... 01/05 11:49
→ dreamnook: 欸 是同一個人嗎XD01/05 11:50
應該不是吧 xd
→ Sirctal: 既然你都提出來問題 發表一下不為過吧 能力越大 責任越大01/05 11:50
※ 編輯: Jasonzheng (42.72.156.63), 01/05/2017 12:02:42
推 chocopie: 奇怪pttworld只是剛路過啊,你說的是pttuser吧?XD01/05 11:56
推 gn01838335: 寫code太久眼睛花了嗎?01/05 11:57
推 gotptt: 感覺observer是包含了pub/sub啦 更大的軟體架構01/05 11:59
→ gotptt: 就好像pipeline包含data double buffer01/05 12:00
推 gn01838335: 樓上正解01/05 12:00
求轉載兩位言論 xd
不然好像我很主觀 qq
推 Frozenmouse: 我覺得現代的pub/sub就是observer的變形應用啊XD01/05 12:00
我也覺得..
→ gn01838335: 但是要做到很困難01/05 12:00
→ gn01838335: 所以才有pub sub誕生 01/05 12:01
→ gn01838335: 若要乾淨的原則來講本來就是包含pub sub01/05 12:01
→ gn01838335: 但做不到啊01/05 12:02
→ dreamnook: 我是覺得好像變成在爭執設計上跟應用的差異01/05 12:02
真的! 設計跟實務
本來就差很多..
→ dreamnook: 能夠釐清更好 我也不懂為啥Subject增加違反原則XD01/05 12:03
推 Sirctal: XD 看錯了 開頭都是ptt01/05 12:03
※ 編輯: Jasonzheng (42.72.156.63), 01/05/2017 12:06:01
推 gn01838335: 我們不是學者,做出有意義可維護高的東西可擴充,異 01/05 12:12
→ gn01838335: 懂的東西就好。比較來到實價不是嗎xdd 01/05 12:12
→ gn01838335: 我也覺得你的分享很棒啊,但設計模式怎麼用是團隊共 01/05 12:14
→ gn01838335: 識。解耦,不過份鬆散,可擴充,彈性 01/05 12:14
推 gn01838335: 原則掌握好大家都是設計大師 01/05 12:15
→ gn01838335: 說真的我工作那麼多年看過很多家公司很少強調要什麼 01/05 12:16
→ gn01838335: 模式xddd 01/05 12:16
推 gn01838335: 直接打開code解釋概念和想法,能說服teammember最重要 01/05 12:18
→ gn01838335: 重點是你的code人家改不改得多,而不是講一堆天花亂墜 01/05 12:19
→ gn01838335: 名詞 01/05 12:19
→ gn01838335: 公司同事不是來做模式研討的 01/05 12:20
推 chupiggy: 有人只會噓 也沒看到分享什麼東西出來 01/05 12:23
推 louise13: 感謝分享 01/05 12:42
推 nichinichi: 感謝作者帶起一股討論技術的新氣象 01/05 13:06
噓 pttuser: 變形是在變啥?抽象程度高有比作春夢的抽象還高嗎? 01/05 13:20
→ pttuser: 現在就是一堆人實作搞混或是認為抽象程度比玉山高 01/05 13:21
→ pttuser: 實作上亂七八糟,討論變形討論不完啦 01/05 13:21
→ pttuser: 每個人都能自己亂變一通 01/05 13:21
→ pttuser: 所以實作上把observer界定就是sync , one-to-many 01/05 13:21
→ pttuser: 把pub/sub界定就是async , many-to-many 01/05 13:21
→ pttuser: pub/sub實作上被廣泛應用的是mqtt 架構 01/05 13:21
→ pttuser: MQTT不是GOF所寫的observer pattern 01/05 13:21
→ pttuser: 原po你自己想想,你寫的observer怎麼實作facebook messag 01/05 13:21
→ pttuser: er? 01/05 13:21
噓 pttuser: 林北喜歡噓是不行膩?林北又要來gdb了 01/05 13:25
→ dreamnook: 所以你的立場就是observer只能sync 只能1-to-many 01/05 13:27
→ dreamnook: 激醬也只能加牛肉或加豬肉 不能牛豬混合這樣 01/05 13:28
噓 pttuser: 你要加個event driven作obsever async, one-to-many也沒 01/05 13:34
→ pttuser: 人反對阿,反正抽象嘛,變形嘛,高興就好了阿哈哈哈哈 01/05 13:34
→ robler: 開始語無論次了耶 01/05 13:36
→ robler: 實作上界定是誰界定 你自己嗎? 01/05 13:37
→ robler: 講話一點根據都沒有 你怎麼不講講你怎麼實作FB msger 01/05 13:38
推 wix3000: 壞掉了 50收 01/05 13:38
噓 pttuser: robler我這樣語無論次?看來你程度不高,真的不懂我在說 01/05 13:39
→ pttuser: 啥? 01/05 13:39
→ pttuser: 不說啦,反正不關我的事,掰啦哈哈哈哈 01/05 13:39
→ dreamnook: 所以你的立場的確就是激醬只能加牛肉或豬肉沒錯 01/05 13:41
推 m1309050: 只有自己是對的,在職場碰到這種人真的是災難 01/05 13:42
→ robler: 真的是惱羞成怒耶 笑死人 講不出道理就胡扯一通 01/05 13:45
→ robler: 講的東西半點根據都沒有 不是寫一堆專有名詞就叫懂好嗎 01/05 13:47
→ dreamnook: 是不是把network層和software層混在一起了(′・ω・‵) 01/05 13:51
推 tpstyle: 在職場碰到這種人真的是災難+1。 01/05 13:52
→ tpstyle: 原po加油,持續期待你的技術分享 01/05 13:53
噓 pttuser: dreamnook我講的是架構不是協議,看清楚……… 01/05 13:54
→ dreamnook: 我當然看不清楚呀 所以我才一直在講激醬牛豬肉飯XD 01/05 13:56
→ dreamnook: 你有個根據也好 來源也行 回文也可以 01/05 13:57
→ dreamnook: 但我程度低只覺得你是observer就1-to-many sync固定 01/05 13:58
推 ns1234: 有分享有推 總比有人。。嗯 01/05 14:00
→ dreamnook: 這篇就有在implementation表現出Observer與Pub/Sub不同 01/05 14:08
→ dreamnook: 我快速閱覽過的理解是Observer是直接針對Subject 01/05 14:09
→ dreamnook: Pub/Sub則是有個middle man在中間(broker) 01/05 14:10
→ dreamnook: 詳細解釋就看誰程度比較高了 我繼續苦勞去XD 01/05 14:12
推 gmoz: 這就是火大模式 01/05 14:15
推 Argos: 哈哈哈 開始了開始了 又是這種空泛的爭論 學模式學到走火入 01/05 14:18
→ Argos: 魔就是這種下場 哈哈哈 01/05 14:18
→ Argos: 某p還裝忙 明明閒得要死吧?噓文都快比原文字數多囉 01/05 14:20
推 kurtsgm: 其實我覺得sync/async根本不是重點吧...... 01/05 14:25
推 tw88: 有看有推 感謝分享 01/05 14:26
→ ggBird: pttuser別笑破人覽趴了 01/05 15:15
推 gn01838335: 這一次我挺pttuse乾淨的code的確是樣 01/05 16:05
→ gn01838335: 但是要大家一致實作是很困難 01/05 16:06
→ dreamnook: 你的實作很困難是指Observer Pattern實作困難還是? 01/05 16:10
推 ripple0129: Observer是廣義的pub-sub,pub-sub是更具體化實際做法 01/05 16:18
→ ripple0129: ,兩個都沒對錯,看的是廣義與狹義罷了。講白了就是吵 01/05 16:18
→ ripple0129: 的是白馬非馬的概念。 01/05 16:18
推 ripple0129: 怕產生誤解的是我叫你買飯桌(pub-sub),結果你買的是 01/05 16:21
→ ripple0129: 桌子(observer),是桌子沒錯但不是我要的飯桌,這時就 01/05 16:21
→ ripple0129: 產生了名詞上造成的誤解。 01/05 16:21
推 gn01838335: 我覺得pttuser很care實作細節的精緻的。應該功力很強 01/05 16:24
→ gn01838335: 可否跪求大大的code 01/05 16:24
推 Frozenmouse: 結果連實作上是誰界定也講不清楚 01/05 16:36
推 blackie1019: 蠻認同pttuser是有料的。但要讓大家懂真的辛苦... 01/05 16:40
→ kightkids: 站在Subject得add(Observer)這點,覺得跟pub/sub不一樣 01/05 16:42
推 Frozenmouse: 我就不懂為何要執著於大廠怎樣,GoF當初把pub-sub當 01/05 16:50
→ Frozenmouse: 成observer別名,和現代的pub/sub怎麼實作,兩者到底 01/05 16:50
→ Frozenmouse: 有什麼衝突啊XD 01/05 16:50
推 Frozenmouse: 而且也不是天差地遠的那種,本質上也都還是訂閱啊… 01/05 16:53
→ dreamnook: 我是覺得多個Middle Man你還是要add(sub) 01/05 16:56
→ dreamnook: 只是這個middle man不負責產生notification 01/05 16:56
→ dreamnook: 而是負責把別的人給的notification(pub)傳給sub 01/05 16:57
→ dreamnook: 但把關係圖畫完後不會只有observable-observer的關係 01/05 16:59
→ dreamnook: 而是pub-middle man(broker)-sub 因而不同 01/05 16:59
→ dreamnook: 只是再打下去我覺得我只會產生更大的混亂了XD 01/05 17:01
推 Frozenmouse: 同樓上,概念還是subject->observer這樣,只是透過中 01/05 17:11
→ Frozenmouse: 間人介接XD 01/05 17:11
推 stosto: Pattern只是人家整理出來最長遇到問題而衍生出的樣板解法 01/05 18:38
→ stosto: 而已,dp哪個是打從娘胎就有的 01/05 18:38
→ gn01838335: 其實userptt講了應該用產品決定設計模式 01/05 18:52
推 ADYex: 推分享。設計模式重要的是它的精神,而不是死板板的說怎樣 01/05 19:09
→ ADYex: 怎樣寫才是什麼什麼模式。 01/05 19:09
推 frank11118: 推分享,但某人學到走火入魔了 01/05 19:14
推 Argos: 真的有料 就不會用那種態度這樣討論設計模式 有的大概只是 01/05 19:14
→ ADYex: 重構—向範式前進 第28頁。 01/05 19:15
→ Argos: 半點料 然後就自以為是 看那種狂噓人家的風格 是有多自卑 01/05 19:15
→ ADYex: 雖然這裡主要是講結構圖,但其實就是指同樣的設計模式並不 01/05 19:16
→ ADYex: 會只有一種實作方法。 01/05 19:16
→ Argos: 本來就是心法的東西 大觀念樓主也沒寫錯啥 硬要在那邊爭 所 01/05 19:18
→ Argos: 以我說走火入魔了 心已經容不下任何東西了 寫code寫到這樣 01/05 19:18
→ Argos: 也是蠻悲哀的 01/05 19:19
推 ADYex: 設計模式是拿來跟人溝通、改善程式、解決問題用的,不是拿 01/05 19:25
→ ADYex: 來死背名稱用的。 01/05 19:25
推 locklose: 要戰就發一篇,推文不易追蹤。 01/05 19:30
→ remmurds: 吵什麼 design pattern 名字實在很無聊 01/05 19:36
→ anr2: 程式能動比啥都重要 01/05 23:11
推 loveme00835: xD 能不能反射性地用出來才是關鍵 01/05 23:28
推 Csongs: 私心求pttuser發一篇幫助我們了解,小弟只能p幣贊助 01/06 08:18
推 Schaos: 糾結名詞真的有差嗎?理解後能靈活運用才是重要的。 01/06 09:14
推 sdyy: 糾結在名詞 狂噓人 01/07 10:01
噓 brucetu: 我認為pub/sub在程式及時間上解藕發佈與接收者,一般講觀 01/07 17:28
→ brucetu: 察者並不會要求你做個中間人來分離這兩者,我想pttuser 01/07 17:28
→ brucetu: 對於你將兩者說成是一樣東西不能認同原因也在此。 01/07 17:28
→ brucetu: 當然你可以說我的觀察者模式通常還會放個中間人做異步, 01/07 17:30
→ brucetu: 我的發佈訂閱也不一定非同步。就好像我牛肉炒飯通常改用 01/07 17:30
→ brucetu: 豬肉還芶芡,我豬肉燴飯有時候不芶芡。 01/07 17:30
推 KeySabre: 討論的時候求名詞精確 其實是好事 實作時當差不多先生的 01/07 17:43
→ KeySabre: 只是把債延後還 01/07 17:43
→ Jasonzheng: 其實觀察者一直都可用中間人啦... 01/07 17:49
→ Jasonzheng: 而且這不是我差不多先生 或是 「反正抽象、彈性」 01/07 17:50
→ Jasonzheng: 而是 原著就有提到這樣的用法喔 01/07 17:51
→ Jasonzheng: 但原著有提到 這是借鑒了 mediator 模式的觀念 01/07 17:52
→ Jasonzheng: 因此我當初撰文時並未補充 01/07 17:53
→ Jasonzheng: 而是想在未來的文中提及 01/07 17:55
→ Jasonzheng: 很抱歉..我的疏失造成各位誤會 01/07 17:56
→ Jasonzheng: 我這陣子會再補充進內文 01/07 17:56
→ KeySabre: 我沒說你是唷 別亂坐 XD 有人整理分享激發討論 我都很感 01/10 23:29
→ KeySabre: 激的 01/10 23:29