日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > vue >内容正文

vue

vue 混入对象_特性和混入不是面向对象的

發(fā)布時間:2023/12/3 vue 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue 混入对象_特性和混入不是面向对象的 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

vue 混入對象

讓我立刻說,我們將在這里討論的功能是那些迫切需要進行放線手術(shù)的人帶給面向?qū)ο缶幊痰募兇獾亩舅?,就像David West在他的《 Object Thinking》一書中所建議的那樣。 這些功能具有不同的名稱,但是最常見的是traits和mixins 。 我很不明白,當(dāng)具有這些功能時,如何仍可以調(diào)用面向?qū)ο蟮木幊獭?

Terry Gilliam的《拉斯維加斯的恐懼與厭惡》(1998年)

首先,簡而言之就是它們的工作方式。 讓我們使用Ruby模塊作為示例實現(xiàn)。 假設(shè)我們有一堂課Book :

class Bookdef initialize(title)@title = titleend end

現(xiàn)在,我們希望Book類使用一個靜態(tài)方法(一個過程)來做一些有用的事情。 我們可以在實用程序類中定義它,然后讓Book調(diào)用它:

class TextUtilsdef self.caps(text)text.split.map(&:capitalize).join(' ')end end class Bookdef printputs "My title is #{TextUtils.caps(@title)}"end end

或者我們可以使它更加“方便”,并extend我們的模塊以便直接訪問其方法:

module TextModuledef caps(text)text.split.map(&:capitalize).join(' ')end end class Bookextend TextModuledef printputs "My title is #{caps(@title)}"end end

如果您不了解面向?qū)ο蟮木幊毯挽o態(tài)方法之間的區(qū)別 ,那似乎很好。 而且,如果我們暫時忘記了OOP的純度 ,即使我的字符較少,這種方法實際上對我來說也不太可讀。 很難理解caps()方法從何而來,就像#{caps(@title)}而不是#{TextUtils.caps(@title)} 。 你不覺得嗎

當(dāng)我們include它們include進來時,Mixins開始發(fā)揮更好的作用。 我們可以將它們結(jié)合起來以構(gòu)造我們要查找的類的行為。 讓我們創(chuàng)建兩個mixin。 第一個稱為PlainMixin ,將按PlainMixin打印書的標(biāo)題,第二個稱為CapsMixin ,并大寫已打印的內(nèi)容:

module CapsMixindef to_ssuper.to_s.split.map(&:capitalize).join(' ')end end module PlainMixindef to_s@titleend end class Bookdef initialize(title)@title = titleendinclude CapsMixin, PlainMixindef printputs "My title is #{self}"end end

沒有附帶的mixin的Call Book將按原樣打印其標(biāo)題。 添加include語句后, to_s的行為將被覆蓋,方法print產(chǎn)生不同的結(jié)果。 我們可以組合mixin來產(chǎn)生所需的功能。 例如,我們可以再添加一個,將標(biāo)題縮寫為16個字符:

module AbbrMixindef to_ssuper.to_s.gsub(/^(.{16,}?).*$/m,'\1...')end end class Bookdef initialize(title)@title = titleendinclude AbbrMixin, CapsMixin, PlainMixindef printputs "My title is #{self}"end end

我確定您已經(jīng)了解它們都可以訪問Book類的私有屬性@title 。 他們實際上可以完全使用課堂上的所有內(nèi)容 。 從字面上看,它們是“代碼段”,我們將其注入到類中以使其更加強大和復(fù)雜。 這種方法有什么問題?

這與注解 , DTO , getter和實用程序類相同 —它們將對象拆開并將功能塊放置在對象看不到它們的地方。

對于mixin,該功能位于Ruby modules ,該modules對Book的內(nèi)部結(jié)構(gòu)進行了假設(shè),并進一步假設(shè)程序員在內(nèi)部結(jié)構(gòu)更改后仍將了解Book的內(nèi)容。 這樣的假設(shè)完全違反了封裝的思想。

mixins和對象私有結(jié)構(gòu)之間的這種緊密耦合不會導(dǎo)致無法維護和難以理解的代碼。

mixin的非常明顯的替代品是可組合裝飾器 。 看一下文章中給出的示例:

Text text = new AllCapsText(new TrimmedText(new PrintableText(new TextInFile(new File("/tmp/a.txt")))) );

它看起來與我們上面使用Ruby mixins所做的非常相似嗎?

但是,與mixin不同,裝飾器使對象較小且具有凝聚力,從而在它們之上分層附加功能。 Mixins的作用恰恰相反—它們使對象變得更復(fù)雜,并且因此使對象的可讀性和可維護性降低。

老實說,我相信他們只是毒藥。 發(fā)明它們的人距離理解面向?qū)ο笤O(shè)計的哲學(xué)還有很長的路要走。

您可能還會發(fā)現(xiàn)這些有趣的相關(guān)文章: 責(zé)任的縱向與橫向分解 ; 復(fù)合名稱是代碼氣味 ; 不變性的梯度 ; OOP中的反模式 ; 不可變對象如何具有狀態(tài)和行為? ;

翻譯自: https://www.javacodegeeks.com/2017/03/traits-mixins-not-oop.html

vue 混入對象

總結(jié)

以上是生活随笔為你收集整理的vue 混入对象_特性和混入不是面向对象的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。