JavaRush /جاوا بلاگ /Random-SD /انحصار ڪرڻ جو هڪ آسان طريقو

انحصار ڪرڻ جو هڪ آسان طريقو

گروپ ۾ شايع ٿيل
انحصار انجيڪشن (DI) سمجھڻ لاء ھڪڙو آسان تصور نه آھي، ۽ ان کي نئين يا موجوده ايپليڪيشنن تي لاڳو ڪرڻ اڃا به وڌيڪ پريشان ڪندڙ آھي. جيس سمٿ توهان کي ڏيکاري ٿو ته انحصار انجيڪشن ڪيئن ڪجي بغير انجيڪشن ڪنٽينر جي سي # ۽ جاوا پروگرامنگ ٻولين ۾. انحصار انجيڪشن جو آسان طريقو - 1هن آرٽيڪل ۾، مان توهان کي ڏيکاريندس ته انحصار انجيڪشن (DI) کي ڪيئن لاڳو ڪجي .NET ۽ جاوا ايپليڪيشنن ۾. انحصار انجيڪشن جو تصور پهريون ڀيرو 2000 ۾ ڊولپرز جي ڌيان ۾ آيو، جڏهن رابرٽ مارٽن مضمون لکيو "ڊزائن اصول ۽ نمونن" (بعد ۾ مخفف SOLID جي نالي سان مشهور آهي ). SOLID ۾ D جو حوالو آهي انحصار جي انحصار (DOI)، جيڪو بعد ۾ سڃاتي ويو انحصار انجيڪشن. اصل ۽ سڀ کان وڌيڪ عام وصف: انحصار جي ڦيرڦار ان طريقي جي هڪ ڦيرڦار آهي جيڪا هڪ بنيادي طبقي جي انحصار کي منظم ڪري ٿي. مارٽن جي اصل مضمون ھيٺ ڏنل ڪوڊ استعمال ڪيو آھي ھڪڙي طبقي جي انحصار کي Copyھيٺئين سطح تي بيان ڪرڻ لاءِ WritePrinter:
void Copy()
	{
	 int c;
	 while ((c = ReadKeyboard()) != EOF)
		WritePrinter(c);
	}
پهريون واضع مسئلو اهو آهي ته جيڪڏهن توهان تبديل ڪريو پيراميٽر لسٽ يا طريقي جي قسمن WritePrinter، توهان کي اپڊيٽ لاڳو ڪرڻ جي ضرورت آهي جتي به ان طريقي تي انحصار آهي. اهو عمل سار سنڀال جي خرچن کي وڌائي ٿو ۽ نئين غلطين جو هڪ امڪاني ذريعو آهي.
جاوا بابت پڙهڻ ۾ دلچسپي رکو ٿا؟ جاوا ڊولپر گروپ ۾ شامل ٿيو !
ٻيو مسئلو: ڪاپي ڪلاس هاڻي ٻيهر استعمال لاءِ امڪاني اميدوار ناهي. مثال طور، جيڪڏهن توهان کي ڪيبورڊ مان داخل ڪيل اکرن کي پرنٽر جي بدران فائل ۾ آڻڻ جي ضرورت آهي؟ Copyائين ڪرڻ لاءِ، توھان ھيٺ ڏنل ڪلاس ۾ ترميم ڪري سگھو ٿا (C++ ٻولي نحو):
void Copy(outputDevice dev)
	{
	int c;
	while ((c = ReadKeyboard()) != EOF)
		if (dev == printer)
			WritePrinter(c);
		else
			WriteDisk(c);
	}
نئين انحصار جي تعارف جي باوجود WriteDisk، صورتحال بهتر نه ٿي (بلڪه وڌيڪ خراب ٿي وئي) ڇاڪاڻ ته هڪ ٻئي اصول جي ڀڃڪڙي ڪئي وئي هئي: "سافٽ ويئر ادارن، يعني، ڪلاس، ماڊل، فنڪشن، وغيره، وڌائڻ لاء کليل هجڻ گهرجي، پر بند ڪرڻ لاء. ترميم. " مارٽن وضاحت ڪري ٿو ته اهي نوان مشروط جيڪڏهن / ٻيو بيان ڪوڊ جي استحڪام ۽ لچڪ کي گھٽائي ٿو. حل اهو آهي ته انحصار کي ڦيرايو وڃي ته جيئن لکڻ ۽ پڙهڻ جا طريقا انحصار ڪن Copy. "پاپنگ" انحصار جي بدران، اهي تعمير ڪندڙ ذريعي گذري ويا آهن. تبديل ٿيل ڪوڊ هن طرح نظر اچي ٿو:
class Reader
	{
		public:
		virtual int Read() = 0;
	};
	class Writer
	{
		public:
		virtual void Write(char) = 0;
	};
	void Copy(Reader& r, Writer& w)
	{
		int c;
		while((c=r.Read()) != EOF)
		w.Write(c);
	}
هاڻي ڪلاس کي Copyآساني سان ٻيهر استعمال ڪري سگهجي ٿو ڪلاس جي مختلف طريقن سان Reader۽ Writer. ڪلاس ۾ Copyقسمن جي اندروني ڍانچي جي باري ۾ ڪا به ڄاڻ نه آهي Reader۽ Writer، انهن کي مختلف عملن سان ٻيهر استعمال ڪرڻ ممڪن بڻائي ٿي. پر جيڪڏهن اهو سڀ ڪجهه لڳي ٿو ته توهان کي ڪجهه قسم جي گوبل ڊيگوڪ، شايد جاوا ۽ سي # ۾ هيٺيان مثال صورتحال کي واضح ڪندا.

جاوا ۽ C# ۾ مثال

انحصار ڪنٽينر جي بغير انحصار انجيڪشن جي آسانيءَ کي واضع ڪرڻ لاءِ، اچو ته هڪ سادي مثال سان شروع ڪريون جيڪو DIصرف چند مرحلن ۾ استعمال لاءِ ترتيب ڏئي سگهجي ٿو. اچو ته چئون ته اسان وٽ هڪ ڪلاس آهي HtmlUserPresentation، جڏهن ان جا طريقا سڏيا وڃن ٿا، هڪ HTML يوزر انٽرفيس ٺاهي ٿو. هتي هڪ سادي مثال آهي:
HtmlUserPresentation htmlUserPresentation = new HtmlUserPresentation();
String table = htmlUserPresentation.createTable(rowTableVals, "Login Error Status");
هن ڪلاس ڪوڊ کي استعمال ڪندي ڪنهن به پروجيڪٽ جو ڪلاس تي انحصار هوندو HtmlUserPresentation، جنهن جي نتيجي ۾ مٿي بيان ڪيل استعمال ۽ برقرار رکڻ جا مسئلا. هڪ سڌارو فوري طور تي پاڻ کي مشورو ڏئي ٿو: ڪلاس ۾ موجود سڀني طريقن جي دستخط سان هڪ انٽرفيس ٺاهڻ HtmlUserPresentation. هتي هن انٽرفيس جو هڪ مثال آهي:
public interface IHtmlUserPresentation {
	String createTable(ArrayList rowVals, String caption);
	String createTableRow(String tableCol);
	// Оставшиеся сигнатуры
}
انٽرفيس ٺاهڻ کان پوءِ، اسان HtmlUserPresentationان کي استعمال ڪرڻ لاءِ ڪلاس ۾ ترميم ڪريون ٿا. قسم کي فوري ڪرڻ ڏانهن واپسي HtmlUserPresentation، اسان هاڻي بنيادي قسم جي بدران انٽرفيس قسم استعمال ڪري سگهون ٿا:
IHtmlUserPresentation htmlUserPresentation = new HtmlUserPresentation();
String table = htmlUserPresentation.createTable(rowTableVals, "Login Error Status");
هڪ انٽرفيس ٺاهڻ اسان کي آساني سان استعمال ڪرڻ جي اجازت ڏئي ٿو ٻين جي عملن کي IHtmlUserPresentation. مثال طور، جيڪڏهن اسان هن قسم کي جانچڻ چاهيون ٿا، اسان آساني سان بنيادي قسم کي HtmlUserPresentationٻئي قسم سان تبديل ڪري سگهون ٿا HtmlUserPresentationTest. هينئر تائين ڪيل تبديليون ڪوڊ کي جانچڻ، برقرار رکڻ ۽ ماپڻ کي آسان بڻائين ٿيون، پر ٻيهر استعمال لاءِ ڪجھ به نه ڪيو ڇو ته HtmlUserPresentationقسم استعمال ڪندڙ سڀئي طبقا اڃا تائين ان جي وجود کان واقف آهن. ھن سڌي انحصار کي ختم ڪرڻ لاءِ، توھان انٽرفيس جو قسم پاس ڪري سگھوٿا IHtmlUserPresentationٺاھيندڙ ڏانھن (يا طريقي جي پيرا ميٽرن جي لسٽ) ڪلاس يا طريقي جو جيڪو استعمال ڪندو:
public UploadFile(IHtmlUserPresentation htmlUserPresentation)
تعمير ڪندڙ کي UploadFileهاڻي قسم جي سڀني ڪارڪردگي تائين رسائي آهي IHtmlUserPresentation، پر هن انٽرفيس کي لاڳو ڪندڙ طبقي جي اندروني جوڙجڪ بابت ڪجھ به نه ڄاڻي ٿو. ان حوالي سان، ٽائپ انجيڪشن ٿيندي آهي جڏهن ڪلاس جو هڪ مثال ٺاهيو ويندو آهي UploadFile. هڪ انٽرفيس جو قسم IHtmlUserPresentationٻيهر استعمال جي قابل ٿي ويندو آهي مختلف عملن کي مختلف طبقن يا طريقن ڏانهن منتقل ڪندي جيڪي مختلف ڪارڪردگي جي ضرورت هونديون آهن.

مواد کي مضبوط ڪرڻ لاء نتيجو ۽ سفارشون

توهان انحصار انجيڪشن جي باري ۾ سکيو آهي ۽ اهي طبقن کي چيو ويندو آهي ته سڌو سنئون هڪ ٻئي تي ڀاڙي ٿو جڏهن انهن مان هڪ ٻئي کي فوري طور تي ٽارگيٽ قسم جي ڪارڪردگي تائين رسائي حاصل ڪرڻ لاء. ٻن قسمن جي وچ ۾ سڌي انحصار کي ختم ڪرڻ لاء، توهان کي هڪ انٽرفيس ٺاهڻ گهرجي. هڪ انٽرفيس هڪ قسم کي مختلف عملن کي شامل ڪرڻ جي صلاحيت ڏئي ٿو، گهربل ڪارڪردگي جي حوالي سان. انٽرفيس جي قسم کي ڪلاس ڪنسٽرڪٽر يا طريقي سان منتقل ڪرڻ سان، ڪلاس/طريقي جنهن کي فنڪشنلٽي جي ضرورت آهي ان کي انٽرفيس کي لاڳو ڪرڻ واري قسم بابت ڪا به تفصيل نه ڄاڻندي آهي. انهي جي ڪري، هڪ انٽرفيس جو قسم مختلف طبقن ۾ ٻيهر استعمال ڪري سگهجي ٿو جيڪي هڪجهڙا، پر هڪجهڙا نه، رويي جي ضرورت هونديون آهن.
  • انحصار انجيڪشن سان تجربو ڪرڻ لاء، هڪ يا وڌيڪ ايپليڪيشنن مان توهان جو ڪوڊ ڏسو ۽ هڪ وڏي استعمال ٿيل بنيادي قسم کي انٽرفيس ۾ تبديل ڪرڻ جي ڪوشش ڪريو.

  • طبقن کي تبديل ڪريو جيڪي سڌو سنئون ھن بنيادي قسم کي انسٽال ڪن ٿا ھن نئين انٽرفيس قسم کي استعمال ڪرڻ لاءِ ۽ ان کي ڪلاس ميٿڊ جي ٺاھيندڙ يا پيراميٽر لسٽ ذريعي پاس ڪريو جيڪي ان کي استعمال ڪندا.

  • ھن انٽرفيس جي قسم کي جانچڻ لاءِ ھڪڙو امتحان لاڳو ڪريو. هڪ دفعو توهان جو ڪوڊ ريفيڪٽر ڪيو ويندو، DIاهو لاڳو ڪرڻ آسان ٿي ويندو، ۽ توهان ڏسندا ته توهان جي ايپليڪيشن ٻيهر استعمال ۽ برقرار رکڻ جي لحاظ کان ڪيترو وڌيڪ لچڪدار ٿي ويندي آهي.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION