自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

超方便!掌握依賴注入5大原則,無需額外編代碼

人工智能 深度學(xué)習(xí)
如果是第一次接觸這個概念,可能會一時沒有頭緒,網(wǎng)上的各種解釋可能會讓你更加混亂,并覺得它沒那么簡單。其實(shí)依賴注入本身是單純、簡單的。

 如果是第一次接觸這個概念,可能會一時沒有頭緒,網(wǎng)上的各種解釋可能會讓你更加混亂,并覺得它沒那么簡單。其實(shí)依賴注入本身是單純、簡單的。

[[287085]]

簡單來說,依賴注入是一種方式、方法或者說手段,是讓被注入者和注入者之間建立關(guān)聯(lián)的手段。

依賴注入的目的是松耦合,是交互對象之間的松耦合。

今天,小芯帶來的文章主要描述了關(guān)于進(jìn)行依賴注入(dependency injection,DI)的五大原則,具有強(qiáng)大的實(shí)用性。

遵循這五大基本思想,在進(jìn)行DI時,你就無需額外花功夫于編寫代碼啦,超方便。

五大基本原則

一、保持簡單的構(gòu)造函數(shù)

構(gòu)造函數(shù)應(yīng)該保持簡單。類的構(gòu)造函數(shù)不應(yīng)該做任何工作——也就是說,除了檢查null、創(chuàng)建可創(chuàng)建類和存儲依賴項(xiàng)供以后使用之外,它們不應(yīng)該做任何事情。

它們不應(yīng)該包含任何編碼邏輯。一個類構(gòu)造函數(shù)中沒有檢查null的if子句,那么這個類就會被分成兩個類。(有不涉及if語句檢查nil-value參數(shù)的方法。)

復(fù)雜的構(gòu)造函數(shù)表明類做的工作太多。保持構(gòu)造函數(shù)簡短、簡單且無邏輯。

二、不要假設(shè)接口是抽象的

接口很不錯,我一直對它贊不絕口。然而,重要的是要認(rèn)識到并非每個接口都是抽象的。

例如,如果接口是公共部分類的精確表示,實(shí)際上并沒有抽象任何東西,對嗎? (這些接口被稱為頭接口,類似于c++的頭文件)。從類中提取的接口可以很容易地單獨(dú)與該類緊密耦合,使得接口作為抽象類毫無用處。

最后,抽象類可能是有漏洞的——也就是說,它們可以揭示關(guān)于實(shí)現(xiàn)類的特定細(xì)節(jié)。有漏洞的抽象類通常也與特定的實(shí)現(xiàn)類綁定在一起。

 

三、不要對實(shí)現(xiàn)類做任何假設(shè)

當(dāng)然,如果沒有實(shí)現(xiàn)類,接口是毫無用處的。但是,作為開發(fā)人員不應(yīng)對實(shí)現(xiàn)類做任何假設(shè)。

只該根據(jù)接口生成的契約進(jìn)行編碼。你可能已經(jīng)編寫了實(shí)現(xiàn),但不應(yīng)該在考慮實(shí)現(xiàn)的情況下針對接口編寫代碼。換句話說,針對接口的代碼就好像一個全新的、更好的接口實(shí)現(xiàn)。

一個設(shè)計(jì)良好的接口會告訴你需要做什么以及如何使用它。該接口的實(shí)現(xiàn)對你使用該接口是無關(guān)緊要的。

四、針對抽象類而非實(shí)現(xiàn)類的代碼

該短語出自“四人幫”之一的埃里希·伽瑪(Erich Gamma)(《設(shè)計(jì)模式》一書的作者),是一個重要的想法。如果只能教給新的開發(fā)者一件事,那就是這句格言。

抽象類是靈活的——通常是接口但不總是(見下文)。

接口(或抽象類)可以通過多種方式實(shí)現(xiàn)。可以在實(shí)現(xiàn)完成前對接口進(jìn)行編碼。如果對實(shí)現(xiàn)進(jìn)行編碼,將創(chuàng)建一個緊密耦合且不靈活的系統(tǒng)。不要把自己限定在單一的實(shí)現(xiàn)中。相反,使用抽象,編出可擴(kuò)展、可重用及靈活的代碼。

五、永遠(yuǎn)不要創(chuàng)建不該創(chuàng)建的東西

類別應(yīng)該遵循單一職責(zé)原則——即一個類只做一件事。

如此,就不應(yīng)再創(chuàng)建事物,否則是做了兩件事。相反,應(yīng)根據(jù)其所需的功能創(chuàng)建和提供該功能。

可創(chuàng)建類 vs 可注入類

那么應(yīng)該創(chuàng)建什么呢?

我們應(yīng)該關(guān)注兩種不同的對象:可創(chuàng)建類和可注入類。

可創(chuàng)建類指應(yīng)該繼續(xù)創(chuàng)建的類。是常見的運(yùn)行庫或?qū)嵱贸绦蝾悺?/p>

通常運(yùn)行庫中的類被認(rèn)為是可創(chuàng)建類。這些類應(yīng)該被創(chuàng)建,而非注入。它們的使用期限很短,通常不超過一種方法的范圍??蓜?chuàng)建類在所有類中是必不可少的,可以在構(gòu)造函數(shù)中創(chuàng)建。一個可創(chuàng)建類只能傳遞給構(gòu)造函數(shù)的另一個類。

另一方面,可注入類是我們永遠(yuǎn)不想直接創(chuàng)建的類。也是不希望硬編碼依賴項(xiàng)的類,應(yīng)始終通過DI傳遞。

在構(gòu)造函數(shù)中,它們通常被作為是依賴項(xiàng)。根據(jù)以上規(guī)則,可注入類應(yīng)該依賴接口注入的類,而非實(shí)例。

它通常是作為業(yè)務(wù)邏輯而編寫的類。隱藏在抽象類后,通常是接口。還要注意,可注入類可在構(gòu)造函數(shù)中請求其他的可注入類。

適當(dāng)使用DI對代碼的意義重大。做好這件事并不難,但確實(shí)需要有遠(yuǎn)見、計(jì)劃和設(shè)計(jì)。

但是,在維護(hù)代碼時,小小的工作將帶來大大的回報(bào)。修復(fù)松散耦合的代碼是維護(hù)人員的夢想,我們要努力編寫這樣的代碼,相信事后會收獲滿滿。

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2012-03-07 10:40:19

Java設(shè)計(jì)模式

2010-09-14 13:49:38

CSS代碼

2012-03-15 11:15:13

Java設(shè)計(jì)模式

2012-03-07 11:03:13

Java設(shè)計(jì)模式

2010-08-31 09:52:45

CSS優(yōu)化

2012-03-05 13:58:34

設(shè)計(jì)模式里氏置換

2012-03-08 10:57:00

Java設(shè)計(jì)模式

2024-10-14 09:52:39

軟件項(xiàng)目開發(fā)軟件項(xiàng)目估算

2011-09-07 09:21:01

設(shè)計(jì)模式

2010-03-31 17:26:52

SaaS

2015-09-24 08:52:53

API設(shè)計(jì)原則

2012-02-01 13:24:37

2015-09-23 17:12:18

API設(shè)計(jì)原則

2020-06-09 07:00:00

面向?qū)ο?/a>編程編程原則

2011-09-15 13:05:26

2016-02-26 18:03:17

搜狐

2017-07-11 05:03:54

數(shù)據(jù)分析大數(shù)據(jù)數(shù)據(jù)

2010-09-09 13:54:06

DIV CSS

2012-03-12 16:10:26

Java設(shè)計(jì)模式

2011-06-29 15:44:19

SEO
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號