implementace rozhraní v JavaScriptu s implementací.js

Josh J
Josh J

Sledovat

Nov 7, 2017 · 5 min čtení

V tomto blogu vám představím koncept rozhraní a jak mohou být užitečné i v dynamických jazycích. Budu také používat implementaci knihovny.js, aby koncept do JavaScriptu, a ukázat vám, jak získat nějaký další nástroj z rozhraní.

Google definuje rozhraní jako “ bod, kde jsou dva systémy, subjekty, organizace atd. seznamte se a komunikujte, “ a tato definice platí pro rozhraní v programování. Ve vývoji softwaru je rozhraní strukturou, která vynucuje specifické vlastnosti objektu — ve většině jazyků je tento objekt třídou.

zde je příklad rozhraní v Javě:

Ve výše uvedeném příkladu, Car rozhraní popisuje třídu, která má dvě metody s žádný typ návratu, z nichž oba se jeden celočíselný argument. Podrobnosti o implementaci každé funkce jsou ponechány na třídě, proto metody nemají žádné tělo. Zajistit třída implementuje Car rozhraní, můžeme použít implements klíčové slovo:

Jednoduché

Rozhraní v Javascriptu

Rozhraní nejsou věc v Javascriptu, ne úplně stejně. JavaScript je dynamický jazyk, kde typů se mění tak často, že vývojář nemusí mít vůbec uvědomil, protože toto lidé tvrdí, že není třeba pro rozhraní, které mají být přidány do ECMAScript standardu, že JavaScript je založen na.

JavaScript se však masivně rozrostl jako backendový jazyk ve formě uzlu.js, a s tím přicházejí různé požadavky a jiný dav, který může mít jiný názor. Chcete-li k tomu přidat, jazyk se rychle stává nástrojem front-end; dostal se do bodu, kdy mnoho vývojářů zapíše drtivou většinu svého HTML uvnitř .soubory js ve formě JSX.

Tak jako jazyk roste na více rolí, je užitečné, pak se ujistěte se, že jeden z našich nejdůležitějších datových struktur je to, co jsme očekávali, že je. JavaScript může mít class klíčové slovo, ale ve skutečnosti je to jen uninstantiated funkce konstruktoru, a kdysi nazval je jednoduše objektu. Objekty jsou všudypřítomné, takže je někdy výhodné zajistit, aby odpovídaly určitému tvaru.

v Poslední době v práci jsem našel případ, kdy developer očekával majetku vrácena jako součást API odpověď true, ale místo toho dostal "true", což způsobuje chybu. Snadná chyba a ta, které by se také dalo vyhnout, kdybychom měli rozhraní.

ale počkejte, je toho víc!

rozhraní, s několika drobnými úpravami, by mohla být použita k přetvoření objektů. Představte si implementaci „přísného“ rozhraní, kde nejsou povoleny žádné vlastnosti mimo rozhraní, mohli bychom tyto vlastnosti smazat nebo přejmenovat, nebo dokonce hodit chybu, pokud se s nimi setkáme.

Takže teď máme rozhraní, které nám řekne, kdy nám chybí určité vlastnosti, ale také až budeme mít neočekávané vlastnosti, nebo pokud vlastnostmi typy nejsou to, co očekáváme. To přidává další možnosti, například refaktorování odpovědi z API a přidání další vrstvy bezpečnosti nad standardní chování rozhraní. Mohli bychom také použít rozhraní v jednotkových testech, pokud je necháme házet chyby.

implementovat.js

implementovat.JS je knihovna, která se pokouší přinést rozhraní do JavaScriptu. Myšlenka je jednoduchá: definujte rozhraní, definujte typy jeho vlastností a použijte jej k zajištění toho, aby objekt byl tím, co očekáváte.

nastavení

nejprve nainstalujte balíček:

npm install implement-js

dále vytvořte .js souboru a import implementInterfacetype:

Naše první rozhraní

K vytvoření rozhraní, jednoduše zavolejte Interface a předat řetězec jako název rozhraní — to není doporučeno, ale pokud vynecháte jméno, unikátní ID bude generován. Tato možnost vrátí funkce, která přijímá objekt, v němž jsou vlastnosti type objekty, druhý argument může také být předány s možností zobrazit varování, házet chyby, odstranit nebo přejmenovat vlastnosti, zajistit pouze vlastnosti rozhraní jsou přítomny, nebo rozšířit existující Interface.

zde je rozhraní, které popisuje auto:

seats vlastnost, která by měla být typu číslo, cestující pole, které obsahuje objekty, které musí sami provádět Passenger rozhraní, a obsahuje beep nemovitosti, která by měla být funkce. errorstrict volby byly stanoveny na hodnotu true, což znamená, že chyby bude vyvolána, pokud je vlastnost rozhraní chybí, a také, když nemovitost není na rozhraní je našel.

Prováděcí naše rozhraní

Nyní chceme implementovat naše rozhraní, v jednoduchém příkladu jsme se vytvořit objekt pomocí objektu doslovný a uvidíme, jestli jsme schopni implementovat naše rozhraní.

za Prvé, jsme se vytvořit Ford objekt, pak se budeme snažit realizovat to proti naší Car rozhraní:

Jak vidíme z komentáře výše, to vyhodí chybu. Podívejme se zpět na naše Car rozhraní:

můžeme vidět, že zatímco všechny vlastnosti jsou přítomny, přísný režim, je také pravda, což znamená, že další vlastnost fuelType způsobí chybu být hozen. Navíc, i když Máme vlastnost passengers, není to pole.

aby bylo možné správně implementovat rozhraní, odstraníme fuelType a změňte hodnotu passengers tak, že je pole obsahující objekty, které implementují Passenger rozhraní:

„Ale JavaScript není Objektově Orientovaný jazyk!“

je pravda, že zatímco rozhraní jsou typicky spojené s objektově orientovaných jazyků, a JavaScript je multi-paradigmatický jazyk, který používá prototypal dědičnost, rozhraní může být stále velmi užitečné.

například pomocí implement-js můžeme snadno refaktorovat odpověď API a zároveň zajistit, že se neodchýlila od toho, co očekáváme. Zde je příklad použitý ve spojení s redux-thunk:

za Prvé, jsme se definovat TwitterUser rozhraní, které rozšiřuje User rozhraní, jako objekt s twitterIdtwitterUsername vlastnosti. trim je pravda, což znamená, že budeme zrušit všechny vlastnosti, které nejsou popsány v TwitterUser rozhraní. Protože naše API vrací vlastnosti v nepřátelském formátu, přejmenovali jsme vlastnosti z twitter_username a twitter_id na verze camelcase.

dále musíme definovat asynchronní akce s redux-thunk akce aktivace volání API, a můžeme použít naše TwitterUser rozhraní vyřadit vlastnosti, které nechceme a aby bylo zajištěno, že implementuje vlastnosti očekáváme, s správné typy. Pokud dáváte přednost, aby se vaše akce tvůrců pure(er) nebo nepoužívejte redux-thunk, možná budete chtít zkontrolovat rozhraní uvnitř twitterService.getUser a vrátí výsledek.

Poznámka: při rozšíření možnosti rozhraní nejsou zděděny

testy jednotek jsou také vhodným místem pro použití rozhraní:

shrnutí

Jsme viděli, jak rozhraní může být užitečné v Javascriptu: i když to je vysoce dynamický jazyk, kontrolovat tvar objektu, a to jsou vlastnosti určitého datového typu nám dává další vrstvu bezpečnosti jsme, jinak by přišli. Tím, že jsme navázali na koncept rozhraní a použili implement-js, jsme také mohli získat další nástroj navíc k přidanému zabezpečení.

Posted on

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.