هيلو هرڪو، منهنجا پيارا دوست ۽ پڙهندڙ! ان کان اڳ جو اسان مضمون لکون، ٿورو پس منظر... مون تازو ئي Mapstruct لائبريري سان ڪم ڪندي هڪ مسئلو پيش آيو ، جنهن کي مون پنهنجي ٽيليگرام چينل ۾ مختصر طور بيان ڪيو آهي . تبصرن ۾، پوسٽ سان مسئلو حل ڪيو ويو؛ پوئين منصوبي کان منهنجي ساٿي هن سان مدد ڪئي. ان کان پوء، مون هن موضوع تي هڪ مضمون لکڻ جو فيصلو ڪيو، پر يقينن اسان هڪ تنگ نظر نه ڪنداسين ۽ پهرين رفتار کي وڌائڻ جي ڪوشش ڪنداسين، سمجھو ته Mapstruct ڇا آهي ۽ ڇو ضروري آهي، ۽ هڪ حقيقي مثال استعمال ڪندي. اڳ ۾ پيدا ٿيندڙ صورتحال جو تجزيو ڪيو ۽ ان کي ڪيئن حل ڪجي. تنهن ڪري، آئون مشق ۾ هر شيء کي تجربو ڪرڻ لاء آرٽيڪل پڙهڻ سان متوازي طور تي سڀني حسابن کي ڪرڻ جي صلاح ڏيان ٿو. شروع ڪرڻ کان اڳ، منهنجي ٽيليگرام چينل کي سبسڪرائب ڪيو ، مان اتي پنهنجون سرگرميون گڏ ڪريان ٿو، جاوا ۽ آئي ٽي ۾ ترقي بابت سوچون لکان ٿو. رڪنيت حاصل ڪئي؟ زبردست! چڱو، هاڻي اچو ته هلون!
نقشو، سوال؟
فاسٽ ٽائپ-سيف بين ميپنگ لاءِ ڪوڊ جنريٽر. اسان جو پهريون ڪم اهو معلوم ڪرڻ آهي ته Mapstruct ڇا آهي ۽ اسان کي ان جي ضرورت ڇو آهي. عام طور تي، توهان ان بابت پڙهي سگهو ٿا سرڪاري ويب سائيٽ تي. سائيٽ جي مکيه صفحي تي سوالن جا ٽي جواب آھن: اھو ڇا آھي؟ ڇا جي لاءِ؟ ڪيئن؟ اسان هن کي پڻ ڪرڻ جي ڪوشش ڪنداسين:
هي ڇا آهي؟
Mapstruct هڪ لائبريري آهي جيڪا نقشي ٺاهڻ ۾ مدد ڪري ٿي (نقشو، عام طور تي، اهو آهي جيڪو اهي هميشه چوندا آهن: نقشو، نقشو، وغيره) ڪجهه ادارن جي شين کي ٻين ادارن جي شين ۾ ٺاهيل ڪوڊ استعمال ڪندي ٺاهيل ڪوڊ جي بنياد تي ترتيبن جي بنياد تي بيان ڪيل آهي.
ڇا جي لاءِ؟
گھڻي ڀاڱي لاءِ، اسان گھڻن پرت واري ايپليڪيشنن کي ترقي ڪريون ٿا (ڊيٽابيس سان ڪم ڪرڻ لاءِ ھڪ پرت، ڪاروباري منطق جي ھڪڙي پرت، ھڪ پرت، ٻاھرين دنيا سان ايپليڪيشن جي رابطي لاءِ) ۽ ھر پرت وٽ پنھنجيون شيون آھن ڊيٽا کي محفوظ ڪرڻ ۽ پروسيس ڪرڻ لاءِ. . ۽ هي ڊيٽا هڪ پرت کان ٻئي پرت کي منتقل ڪرڻ جي ذريعي منتقل ڪرڻ جي ضرورت آهي. انهن لاءِ جن هن طريقي سان ڪم نه ڪيو آهي، اهو لڳي سگهي ٿو ٿورڙو پيچيده. مثال طور، اسان وٽ ھڪڙو ادارو آھي شاگردن جي ڊيٽابيس لاءِ. جڏهن هن اداري جو ڊيٽا ڪاروباري منطق (سروسز) پرت ڏانهن وڃي ٿو، اسان کي ڊيٽا کي شاگردن جي طبقي مان StudentModel ڪلاس ۾ منتقل ڪرڻ جي ضرورت آهي. اڳيون، ڪاروباري منطق سان سڀني ٺاهه کان پوء، ڊيٽا کي ٻاهر ڇڏڻ جي ضرورت آهي. ۽ ان لاءِ اسان وٽ آھي StudentDto ڪلاس. يقينن، اسان کي اسٽوڊنٽ ماڊل ڪلاس کان StudentDto تائين ڊيٽا منتقل ڪرڻ جي ضرورت آهي. هر دفعي هٿ سان لکڻ وارا طريقا جيڪي منتقل ڪيا ويندا محنت ڪندڙ آهن. ان سان گڏ هي ڪوڊ بيس ۾ اضافي ڪوڊ آهي جنهن کي برقرار رکڻ جي ضرورت آهي. توهان هڪ غلطي ڪري سگهو ٿا. ۽ Mapstruct اھڙا طريقا ٺاھڻ واري مرحلي ۾ ٺاھي ٿو ۽ انھن کي پيدا ڪيل ذريعن ۾ ذخيرو ڪري ٿو.
ڪيئن؟
تشريح استعمال ڪندي. اسان کي صرف هڪ تشريح ٺاهڻ جي ضرورت آهي جنهن ۾ هڪ مکيه Mapper تشريح آهي جيڪا لائبريري کي ٻڌائي ٿي ته هن انٽرفيس ۾ طريقا استعمال ڪري سگهجن ٿا هڪ اعتراض کان ٻئي ۾ ترجمو ڪرڻ لاءِ. جيئن مون اڳ ۾ شاگردن جي باري ۾ چيو آهي، اسان جي صورت ۾ اهو ٿيندو StudentMapper انٽرفيس، جنهن ۾ ڊيٽا کي هڪ پرت کان ٻئي پرت منتقل ڪرڻ جا ڪيترائي طريقا هوندا:
هتي اسان ليڪچرن جي لسٽ ۽ ليڪچررن جي فهرست کي صحيح طرح سان نقشي ڪرڻ لاءِ ٻه ميپر استعمال ڪريون ٿا. هاڻي اسان کي اسان جي ڪوڊ گڏ ڪرڻ جي ضرورت آهي ۽ ڏسو ته اتي ڇا آهي ۽ ڪيئن. اهو استعمال ڪري سگهجي ٿو mvn clean compile حڪم . پر، جيئن اهو نڪتو، جڏهن اسان جي نقشن جي نقشي تي عمل درآمد ٺاهيندي، نقشي تي عمل درآمد فيلڊ کي اوور رائٽ نه ڪيو. ڇو؟ اهو ظاهر ٿيو ته اهو ممڪن ناهي ته Lombok کان ڊيٽا جي تشريح کي کڻڻ. ۽ ڪجهه ٿيڻو هو... تنهن ڪري، اسان وٽ مضمون ۾ هڪ نئون سيڪشن آهي.
Lombok ۽ Mapstruct کي ڳنڍڻ
ڪجهه منٽن جي ڳولا کان پوء، اهو ظاهر ٿيو ته اسان کي Lombok ۽ Mapstruct کي هڪ خاص طريقي سان ڳنڍڻ جي ضرورت آهي. ھن بابت ڄاڻ آھي Mapstruct جي دستاويزن ۾ . Mapstruct مان ڊولپرز پاران تجويز ڪيل مثال کي جانچڻ کان پوء، اچو ته اسان جي pom.xml کي اپڊيٽ ڪريون: اچو ته الڳ ورزن شامل ڪريون:
ان کان پوء، سڀڪنھن شيء کي ڪم ڪرڻ گهرجي. اچو ته اسان جي منصوبي کي ٻيهر ترتيب ڏيو. پر توهان ڪٿي ڳولي سگهو ٿا ڪلاس جيڪي Mapstruct ٺاهيا آهن؟ اهي generated-sources ۾ آهن: ${projectDir}/target/generated-sources/annotations/ هاڻي جڏهن اسان Mapstruct پوسٽ مان منهنجي مايوسي کي محسوس ڪرڻ لاءِ تيار آهيون، اچو ته ڪوشش ڪريون ميپرز لاءِ ٽيسٽون ٺاهڻ جي.
اسان اسان جي نقشن لاء ٽيسٽ لکندا آهيون
مان ھڪڙو تڪڙو ۽ سادو ٽيسٽ ٺاھيندس جيڪو ھڪڙي ھڪڙي ماپرز کي جانچيندو ان صورت ۾ جتي اسان انٽيگريشن ٽيسٽ ٺاھي رھيا آھيون ۽ ان جي مڪمل ٿيڻ جي وقت بابت پريشان نه ڪريو:
هتي، SpringBootTest تشريح کي استعمال ڪندي، اسان سڄي ايپليڪيشن کي شروع ڪريون ٿا ۽ ان مان، آٽو وائرڊ تشريح استعمال ڪندي، اسان ڪلاس ڪڍيون ٿا جيڪو اسان کي جانچ لاءِ گهربل آهي. رفتار جي نقطي نظر کان ۽ امتحان لکڻ جي آسانيء سان، هي تمام سٺو آهي. امتحان ڪاميابي سان گذري ٿو، سڀ ڪجھ ٺيڪ آهي. پر اسان ٻئي طرف وينداسين ۽ هڪ ميپر لاءِ يونٽ ٽيسٽ لکنداسين، مثال طور، LectureListMapper...
جيڪڏهن اسان ڏسون ٿا NPE (مختصر لاء NullPointerException)، اسان ان کي lectureMapper variable مان حاصل ڪريون ٿا ، جيڪو ظاهر ٿئي ٿو ته شروعات نه ڪئي وئي آهي. پر اسان جي عمل ۾ اسان وٽ ھڪڙو ٺاھيندڙ نه آھي جنھن سان اسين متغير کي شروع ڪري سگھون. اهو ئي سبب آهي ته Mapstruct هن طريقي سان ميپر کي لاڳو ڪيو! بهار ۾، توھان ڪيترن ئي طريقن سان ڪلاسن ۾ لوبيا شامل ڪري سگھو ٿا، توھان انھن کي فيلڊ ذريعي انجيڪشن ڪري سگھوٿا آٽو وائرڊ اينوٽيشن سان گڏ، جيئن مٿي ڪيو ويو آھي، يا توھان انھن کي ٺاھيندڙ جي ذريعي انجيڪشن ڪري سگھو ٿا. مون پاڻ کي ڪم تي اهڙي مشڪل صورتحال ۾ محسوس ڪيو جڏهن مون کي امتحان جي عمل جي وقت کي بهتر ڪرڻ جي ضرورت هئي. مون سوچيو ته ان بابت ڪجهه به نه ٿو ڪري سگهجي ۽ پنهنجي ٽيليگرام چينل تي پنهنجو درد اُڇلائي ڇڏيم. ۽ پوء انهن مون کي تبصرن ۾ مدد ڪئي ۽ چيو ته انجيڪشن حڪمت عملي کي ترتيب ڏيڻ ممڪن آهي. ميپر انٽرفيس ۾ هڪ injectionStrategy فيلڊ آهي ، جيڪو صرف انجيڪشن اسٽريٽجي جو نالو قبول ڪري ٿو ، جنهن جا ٻه قدر آهن: FIELD ۽ CONSTRUCTOR . ھاڻي، اھو ڄاڻڻ، اچو ته ھن سيٽنگ کي اسان جي نقشن ۾ شامل ڪريو؛ مان اھو ڏيکاريندس LectureListMapper استعمال ڪندي مثال طور :
ھاڻي، جيڪڏھن اسان ٽيسٽ ھلائينداسين، سڀ ڪجھ ڪم ڪندو جيئن توقع ڪئي وئي، ڇو ته LectureListMapperImpl ۾ اسان LectureMapper پاس ڪريون ٿا ان جي ضرورت آھي... فتح! اهو توهان لاءِ مشڪل ناهي، پر مان خوش آهيان: دوستو، سڀ ڪجهه معمول مطابق آهي، سبسڪرائب ڪريو منهنجي GitHub اڪائونٽ تي ، منهنجي ٽيليگرام اڪائونٽ تي . اتي آئون پنھنجي سرگرمين جا نتيجا پوسٽ ڪريان ٿو، اتي واقعي مفيد شيون آھن) مان توھان کي خاص طور تي دعوت ڏيان ٿو توھان کي ٽيليگرام چينل جي بحث واري گروپ ۾ شامل ٿيڻ لاءِ . ائين ٿئي ٿو ته جيڪڏهن ڪنهن وٽ ٽيڪنيڪل سوال آهي، ته هو اتي ئي جواب حاصل ڪري سگهن ٿا. هي فارميٽ هر ڪنهن لاءِ دلچسپ آهي، توهان پڙهي سگهو ٿا ڪير ڄاڻي ٿو ۽ تجربو حاصل ڪري ٿو.
نتيجو
هن مضمون جي حصي جي طور تي، اسان Mapstruct جي طور تي اهڙي ضروري ۽ اڪثر استعمال ٿيل پراڊڪٽ سان واقف ٿي چڪا آهيون. اسان کي معلوم ٿيو ته اهو ڇا آهي، ڇو ۽ ڪيئن. هڪ حقيقي مثال استعمال ڪندي، اسان محسوس ڪيو ته ڇا ٿي سگهي ٿو ۽ اهو ڪيئن تبديل ٿي سگهي ٿو. اسان اهو پڻ ڏٺو ته ڪنسٽرڪٽر جي ذريعي ڀاڄين جي انجيڪشن کي ڪيئن ٺهرايو وڃي، انهي ڪري اهو ممڪن ٿيندو ته صحيح طريقي سان ميپرز کي جانچڻ. Mapstruct جي ساٿين انهن جي پراڊڪٽ جي استعمال ڪندڙن کي اجازت ڏني ته صحيح طور تي اهو چونڊيو ته ڪيئن ميپر کي انجڻ ڪجي، جنهن لاءِ اسان بلاشڪ انهن جا شڪرگذار آهيون. پر، ان حقيقت جي باوجود ته اسپرنگ ڪنسٽرڪٽر ذريعي ڀاڄين کي انجيڪشن لڳائڻ جي سفارش ڪري ٿو، Mapstruct جي ماڻهن ڊفالٽ طور فيلڊ ذريعي انجڻ مقرر ڪيو آهي. ائين ڇو آهي؟ ڪو جواب نه. مون کي شڪ آهي ته شايد اهڙا سبب آهن جن جي باري ۾ اسان کي خبر ناهي، ۽ اهو ئي سبب آهي ته انهن هن طريقي سان ڪيو. ۽ انھن مان معلوم ڪرڻ لاءِ، مون ٺاھيو GitHub مسئلو انھن جي سرڪاري پراڊڪٽ مخزن تي.
GO TO FULL VERSION