Hemmelere salam, gadyrly dostlarym we okyjylarym! Makalany ýazmazdan ozal, azajyk fon ... recentlyakynda bu ýerdäki telegram kanalymda gysgaça beýan eden Mapstruct kitaphanasy bilen işlemekde bir kynçylyk bilen ýüzbe-ýüz boldum . Teswirlerde ýazgy bilen baglanyşykly mesele çözüldi; öňki taslamadaky kärdeşim muňa kömek etdi. Şondan soň bu mowzukda makala ýazmak kararyna geldim, ýöne elbetde dar garamarys we ilki bilen tizlige ýetmäge synanyşarys, Mapstructyň nämedigini we näme üçin zerurdygyny düşüneris we hakyky mysal ulanarys öň ýüze çykan ýagdaýy we ony nädip çözmelidigini derňäň. Şonuň üçin hemme hasaplamalary iş ýüzünde başdan geçirmek üçin makalany okamak bilen paralel etmegi maslahat berýärin. Başlamazdan ozal, telegram kanalymy ýazyň , men ol ýerdäki işlerimi ýygnaýaryn, Java we umuman IT-de ösüş hakda pikirler ýazýaryn. Abuna ýazyldy? Gowy! Bolýar, indi gideli!
Mapstruct, fak?
Çalt görnüşli howpsuz noýba kartalary üçin kod generatory. Ilkinji wezipämiz “Mapstruct” -yň nämedigini we näme üçin bize mätäçdigini anyklamakdyr. Umuman, bu hakda resmi web sahypasynda okap bilersiňiz. Sahypanyň baş sahypasynda soraglara üç jogap bar: bu näme? Näme üçin? Nädip? Muny hem etmäge synanyşarys:
Bu näme?
“Mapstruct” käbir obýektleriň obýektlerini karta (karta, karta we ş.m.) kartalaşdyrmaga kömek edýän kitaphanadyr, interfeýsler arkaly beýan edilýän konfigurasiýalara esaslanan döredilen kody ulanyp, käbir subýektleriň obýektlerini beýleki guramalaryň obýektlerine öwürýär.
Näme üçin?
Köplenç köp gatlakly programmalary döredýäris (maglumat bazasy bilen işlemek üçin bir gatlak, iş logikasynyň bir gatlagy, programmanyň daşarky dünýä bilen gatnaşygy üçin gatlak) we her gatlagyň maglumatlary saklamak we gaýtadan işlemek üçin öz obýektleri bar. . Bu maglumatlary bir guramadan beýlekisine geçirmek arkaly gatlakdan gatlaga geçirmeli. Bu çemeleşme bilen işlemedikler üçin bu birneme çylşyrymly bolup görünýär. Mysal üçin, Talyplar bazasy üçin bir guramamyz bar. Bu guramanyň maglumatlary biznes logikasy (hyzmatlar) gatlagyna geçende, maglumatlary Talyplar synpyndan StudentModel synpyna geçirmeli. Ondan soň, iş logikasy bilen ähli manipulýasiýalardan soň, maglumatlary daşarda çykarmaly. Munuň üçin “StudentDto” synpymyz bar. Elbetde, “StudentModel” synpyndan “StudentDto” -a maglumatlary geçirmeli. Her gezek geçiriljek usullar el bilen ýazmak köp zähmet talap edýär. Üstesine, bu saklanmaly kod bazasyndaky goşmaça kod. Aalňyşlyk goýberip bilersiňiz. “Mapstruct” şeýle usullary düzmek tapgyrynda döredýär we olary döredilen çeşmelerde saklaýar.
Nädip?
Annotasiýalary ulanmak. Diňe kitaphanada bu interfeýsdäki usullaryň bir obýektden beýlekisine terjime edilip bilinjekdigini aýdýan esasy Mapper düşündirişi bolan düşündiriş döretmeli. Talyplar hakda öňem aýdyşym ýaly, biziň ýagdaýymyzda bu maglumatlary bir gatlakdan beýlekisine geçirmegiň birnäçe usuly bolan StudentMapper interfeýsi bolar:
Bu çemeleşmäniň gözelligi, meýdanlaryň atlary we görnüşleri dürli synplarda birmeňzeş bolsa (biziň ýagdaýymyzdaky ýaly), “Mapstruct” -yň sazlamalary düzmek tapgyrynda “StudentMapper” interfeýsine esaslanýan zerur ýerine ýetirişleri döretmek üçin ýeterlikdir. terjime eder. Onda eýýäm düşnükli boldy, şeýlemi? Geliň, “Bahar boot” programmasyndaky işi derňemek üçin hakyky mysal ulanalyň.
“Bahar boot” we “Mapstruct” -yň işleýşine mysal
Ilki bilen bize “Bahar boot” taslamasyny döretmek we oňa “Mapstruct” goşmak gerek. Bu meselede, GitHub-da ammarlar üçin galyplar bolan bir guramam bar we “Spring Boot” -yň başlangyjy şolaryň biridir. Şundan ugur alyp, täze taslama döredýäris: Indiki taslamany alarys . Hawa, dostlar, peýdaly diýip hasap eden bolsaňyz, taslama ýyldyz beriň , şonuň üçin muny biderek etmeýändigimi bilerin. Bu taslamada, işde alan we Telegram kanalymdaky ýazgyda beýan eden ýagdaýymyzy aýan ederis . Bilmeýänler üçin ýagdaýy gysgaça beýan ederin: kartalar üçin synaglar ýazanymyzda (ýagny, öň aýdyp geçen interfeýs amallary üçin) synaglaryň mümkin boldugyça çalt geçmegini isleýäris. Mappers bilen iň ýönekeý wariant, synag geçirilende “SpringBootTest” düşündirişini ulanmakdyr, bu bolsa “Bahar Boot” programmasynyň “ApplicationContext” -ini alar we synagyň içinde synag üçin zerur kartany sanar. Emma bu wariant köp serişde talap edýär we has köp wagt alýar, şonuň üçin bu biziň üçin amatly däl. Diňe islenýän kartany döredýän we usullarynyň garaşyşymyz ýaly işleýändigini barlaýan birlik synagyny ýazmalydyrys. Has çalt işlemek üçin näme üçin synaglar gerek? Synaglar köp wagt alsa, ähli ösüş prosesini haýalladýar. Synaglar täze kody geçýänçä, bu kody dogry hasaplap bolmaz we synag üçin kabul edilmez, bu önümçilige alynmajakdygyny we işläp düzüjiniň işini tamamlamandygyny aňladýar. Görnüşinden, näme üçin amaly şübhesiz kitaphana üçin synag ýazmaly? Şeýle-de bolsa, synag ýazmalydyrys, sebäbi kartany nädip dogry suratlandyrandygymyzy we garaşýan zadymyzy ýerine ýetirýändigini barlaýarys. Ilki bilen, işimizi aňsatlaşdyrmak üçin, pom.xml-e başga bir garaşlylyk goşup, taslamamyza Lombok goşalyň:
Taslamamyzda, daşarky dünýä bilen aragatnaşyk saklamak üçin ulanýan model synplarymyzdan (biznes logikasy bilen işlemek üçin ulanylýar) DTO synplaryna geçmeli bolarys. Simplönekeýleşdirilen wersiýamyzda meýdanlar üýtgemeýär we kartalarymyz ýönekeý bolar diýip çaklaýarys. Emma, isleg bar bolsa, “Mapstruct” bilen nädip işlemelidigi, ony nädip sazlamalydygy we peýdalaryndan nädip peýdalanmalydygy barada has jikme-jik makala ýazmak mümkin bolardy. Emma, bu makala gaty uzyn bolar. Geliň, gatnaşýan leksiýalaryň we lektorlaryň sanawy bolan bir okuwçymyz bar diýeliň. Geliň, nusga bukjasyny döredeliň . Şundan ugur alyp, ýönekeý bir model dörederis:
Indi leksiýa modelleriniň ýygyndysyny DTO leksiýalarynyň ýygyndysyna terjime etjek karta ýasalyň. Ilki bilen taslama Mapstruct goşmak. Munuň üçin olaryň resmi web sahypasyny ulanarys , hemme zat şol ýerde beýan edilýär. .Agny, ýadymyza bir garaşlylyk we bir plugin goşmalydyrys (ýadyň nämedigi barada soraglaryňyz bar bolsa, şu ýere gidiň, 1-nji madda we 2-nji madda ):
Kartalarda beýleki kartaçylara ýüzlenýändigimizi aýratyn bellemelidiris. Bu , StudentMapper-de bolşy ýaly, Mapper düşündirişindäki ulanyş meýdançasy arkaly amala aşyrylýar :
Bu ýerde leksiýalaryň sanawyny we lektorlaryň sanawyny dogry kartalaşdyrmak üçin iki karta ulanýarys. Indi kodumyzy düzmeli we nämäniň bardygyny we nädip bolmalydygyny görmeli. Muny mvn arassa kompile buýrugy ulanyp edip bolýar . , Öne, belli bolşy ýaly, kartalarymyzyň Mapstruct ýerine ýetirişleri döredilende, karta ýerine ýetirişleri meýdanlara ýazylmady. Näme üçin? Lombokdan Maglumatlaryň düşündirişini alyp bolmaýandygy ýüze çykdy. Bir zat edilmeli boldy ... Şonuň üçin makalada täze bölümimiz bar.
“Lombok” we “Mapstruct” -y baglanyşdyrmak
Birnäçe minut gözlegden soň, Lombok bilen Mapstruct-y belli bir derejede birikdirmelidigimiz ýüze çykdy. Mapstruct resminamalarynda bu barada maglumat bar . Mapstruct-dan döredijiler tarapyndan teklip edilen mysaly öwrenenimizden soň, pom.xml-i täzeläliň: Aýry-aýry wersiýalary goşalyň:
Ondan soň hemme zat netije bermeli. Geliň, taslamamyzy ýene bir gezek düzeliň. Mapöne Mapstructyň döreden sapaklaryny nireden tapyp bilersiňiz? Olar döredilen çeşmelerde: $ {projectDir} / maksat / döredilen-çeşmeler / düşündirişler / Indi Mapstruct ýazgysyndan göwnüçökgünligimizi duýmaga taýyn bolanymyz üçin, kartalar üçin synaglary döretmäge synanyşalyň.
Kartalarymyz üçin synaglar ýazýarys
Integrasiýa synagyny döredýän ýagdaýymyzda kartalaryň birini synap görjek we gutarýan wagty barada alada etmejek çalt we ýönekeý synag dörederin:
Bu ýerde, “SpringBootTest” düşündirişini ulanyp, “ApplicationContext” -iň hemmesini işe girizýäris we ondan “Awtomatiki düşündiriş” ulanyp, synag üçin zerur synpy çykarýarys. Synag ýazmagyň tizligi we aňsatlygy nukdaýnazaryndan bu gaty gowy. Synag üstünlikli geçýär, hemme zat gowy. Emma başga ýoldan gidip, kartaçy üçin birlik synagyny ýazarys, mysal üçin LectureListMapper ...
“Mapstruct” -yň döredýän amallary biziň taslamamyz bilen bir synpdadygy sebäpli, synaglarymyzda aňsatlyk bilen ulanyp bileris. Hemme zat ajaýyp görünýär - düşündiriş ýok, biz iň ýönekeý görnüşde zerur synpy döredýäris we hut şu. Theöne synagy geçirenimizde, onuň ýykyljakdygyna we konsolda NullPointerException boljakdygyna düşüneris ... Munuň sebäbi LectureListMapper kartasynyň ýerine ýetirilişiniň:
NPE-e seretsek (NullPointerException üçin gysga), başlamadyk bolup çykýan leksiýaMapper üýtgeýjisinden alarys. Implementationöne ýerine ýetirişimizde üýtgeýjini başlap biljek konstruktorymyz ýok. “Mapstruct” -yň kartany şeýle ýerine ýetirmeginiň hut şu sebäbi! Springaz paslynda, dürli usullar bilen sapaklara noýba goşup bilersiňiz, ýokarda görkezilişi ýaly, Awtomatiki düşündiriş bilen bir meýdana sanjyp bilersiňiz ýa-da konstruktor arkaly sanjyp bilersiňiz. Synag ýerine ýetiriş wagtyny optimizirlemeli bolanymda, işde şeýle kynçylykly ýagdaýa düşdüm. Bu hakda hiç zat edip bolmaz öýdüp, Telegram kanalymda agyrymy dökdüm. Soň bolsa teswirlerde maňa kömek etdiler we sanjym strategiýasyny düzüp boljakdygyny aýtdylar. “Mapper” interfeýsinde diňe iki sany gymmaty bolan “ InjectionStrategiýa ” adyny kabul edýän “InjectionStrategiýa ” meýdançasy bar: SÖELGI we Gurluşykçy . Indi muny bilip, geliň, bu sazlamany kartalarymyza goşalyň; mysal hökmünde LectureListMapper ulanyp görkezerin :
Goşan bölümimi goýy bilen belledim. Geliň, beýlekiler üçin bu opsiýany goşalyň we kartalaryň täze setir bilen döredilmegi üçin taslamany täzeden düzeliň. Bu zatlar ýerine ýetirilenden soň, “LectureListMapper” -iň kartasynyň ýerine ýetirilişiniň nähili üýtgändigini göreliň (bize gerek bolan bölegini goýy bilen görkezilýär):
Indi “Mapstruct” konstruktoryň üsti bilen mapper sanjymyny amala aşyrdy. Bu edil biziň gazanjak bolýan zadymyz. Indi synagymyz ýygnamagy bes eder, geliň täzeläliň we alalyň:
Indi synagdan geçsek, hemme zat garaşylşy ýaly işlär, sebäbi LectureListMapperImpl-de zerur LectureMapper-den geçýäris ... oryeňiş! Bu siziň üçin kyn däl, ýöne göwnüme degdi: Dostlar, hemme zat hemişeki ýaly, GitHub hasabyma , Telegram hasabyma ýazylyň . Şol ýerde işimiň netijelerini ýerleşdirýärin, hakykatdanam peýdaly zatlar bar) Men sizi telegram kanalynyň diskussiýa toparyna goşulmaga çagyrýaryn . Kimdir biriniň tehniki soragy bar bolsa, ol ýerde jogap alyp biler. Bu format hemmeler üçin gyzykly, kimiň nämäni bilýändigini we tejribe toplap bilersiňiz.
Netije
Bu makalanyň bir bölegi hökmünde Mapstruct ýaly zerur we ýygy-ýygydan ulanylýan önüm bilen tanyşdyk. Munuň nämedigini, näme üçin we nädip bolandygyny bildik. Hakyky mysal ulanyp, näme edilip bilinjekdigini we nädip üýtgedilip bilinjekdigini duýduk. Şeýle hem kartalary dogry barlamak üçin noýba sanjymyny konstruktoryň üsti bilen nädip sazlamalydygyna göz aýladyk. “Mapstruct” -yň kärdeşleri önümlerini ulanyjylara kartalary nädip sanjym etmelidigini anyk saýlamaga mümkinçilik berdiler, şonuň üçin olara şübhesiz minnetdarlyk bildirýäris. Springöne, Baharyň konstruktoryň üsti bilen noýba sanjym etmegi maslahat berýändigine garamazdan, Mapstruct-dan ýigitler meýdan boýunça sanjymlary bellediler. Näme üçin beýle? Jogap ýok. Diňe bilmeýän sebäplerimiziň bolup biljekdigine ynanýaryn we şonuň üçinem şeýle etdiler. Olardan bilmek üçin, resmi önüm ammarynda GitHub meselesini döretdim.
GO TO FULL VERSION