রিফ্লেক্টর কেন এমন একটি প্রয়োজনীয় ইউটিলিটি?


10

রিফ্লেক্টরকে দেওয়া অর্থের আশেপাশের ব্রোহাহা পড়ার ফলে আমি পণ্য এবং এর ব্যবহারগুলি সম্পর্কে চিন্তাভাবনা করতে পারি। অনেক লোক এটিকে একটি অপরিহার্য সরঞ্জাম বলে মনে করছেন।

আমাকে স্বীকার করতে হবে, আমি বছরের পর বছর রিফ্লেক্টর ব্যবহার করি নি। আমি বলতে চাইছি। নেট এপিআই এবং তৃতীয় পক্ষের উপাদানগুলি আমি ব্যবহার করি উভয়েরই জন্য ডকুমেন্টেশন রয়েছে। অতীতে, যখনই কোনও সহকর্মী রিফ্লেক্টরকে তার সরঞ্জাম বেল্ট থেকে টেনে আনেন, তখন আমি বুঝতে পারি যে তিনি আগাছায় চলে যাচ্ছেন।

রিফ্লেক্টরের চারপাশে সমস্ত আবেগ পড়া আমাকে প্রশ্নে নিয়ে যেতে পরিচালিত করছে যদি আমি এখানে সত্যিই কিছু মিস করছি। আপনার কেন এত ঘন ঘন রিফ্লেক্টরের প্রয়োজন হয় যে আপনি এটিকে একটি প্রয়োজনীয় সরঞ্জাম হিসাবে বিবেচনা করছেন? আমি এটি দেখতে পাচ্ছি খুব বিরল অনুষ্ঠানে এটি প্রয়োজন, তবে এটি একটি প্রয়োজনীয় সরঞ্জাম হিসাবে বিবেচিত হওয়ার পক্ষে যথেষ্ট নয়। আমাকে আলোকিত করুন।


আমি এই দিন এবং যুগে এই কথাটি বলতে পেরে আনন্দিত যে, রিফ্লেক্টর এখন আর তেমন একটি প্রয়োজনীয় ইউটিলিটি নেই (যদি আপনি .NET এর পুরানো সংস্করণ ব্যবহার না করেন)। আপনি এখন .NET রেফারেন্স উত্সটি দেখতে পারেন এবং সিএলআরের অভ্যন্তরীণ কাজগুলি দেখতে পাবেন, মজাদার মন্তব্য এবং সমস্ত কিছু। উদাহরণস্বরূপ, এখানে স্ট্রিংবিল্ডার L লেন্থ পদ্ধতিটি আমি নীচে আমার উত্তরে আলোচনা করেছি। আপনি 487 লাইনে দেখতে পাবেন যে এটি কোনও নূতন দৈর্ঘ্য নির্ধারণ করে দিলে কীভাবে এটি ফাঁকা নয়, নাল অক্ষর যুক্ত করে।
ক্যারলেসা

উত্তর:


8

এখানে প্রশ্নের ধরণের নিখুঁত উদাহরণ রয়েছে। নেট প্রতিফলক আপনার পক্ষে উত্তর দিতে পারে।

অথবা আপনি এটি এসওতে পোস্ট করতে পারেন এবং রিফ্লেক্টর ইনস্টল করা অন্য কাউকে আপনার জন্য এটির উত্তর দিতে দিন। ;)


তার সাথে আমার একমাত্র সমস্যাটি এটির মতো এটি ব্যবহার করা আইনী নয়;)

@ পিয়ার, আপনি কীভাবে দেখবেন? এইসব ব্যবহার করতে পারে অন্য কিছুই যদি referencesource.microsoft.com/netframework.aspx
ম্যাথু চুনকাম

বিপরীত ইঞ্জিনিয়ারিং কোড বেশিরভাগ উন্নত দেশে বৈধ নয়। উত্সটি আপনার লিঙ্কের মতো প্রকাশিত হয় এবং এটি অকেজো;)

2
@ পিয়ার ৩০৩: আফাইক কপিরাইট আইনগুলিতে প্রায়শই ব্যতিক্রম থাকে যে অন্যথায় আইনীভাবে ব্যবহৃত সফ্টওয়্যারটির সাথে হস্তক্ষেপের স্বার্থে বিপরীত প্রকৌশল অনুমোদিত। এই উত্তরের উদাহরণটি এই বিভাগ থেকে।
শার্পথুথ

@ শার্প টুথ: আপনার সম্পর্কে কিছু রেফারেন্স আছে? আমি আগে এমন পরিস্থিতিতে ছিলাম এবং আইনের কারণে এগিয়ে যেতে পারিনি। আমি সত্যিই এটি আগ্রহী হবে।

5

আমি দুটি ভিন্ন সমস্যার সাথে সহায়তা করতে মোটামুটি নিয়মিত ভিত্তিতে (সম্ভবত সপ্তাহে এক বা দুইবার) প্রতিবিম্বক ব্যবহার করি।

  1. দুর্বল নথিভুক্ত API / লাইব্রেরি: এর জন্য আমার প্রিয় উদাহরণটি শেয়ারপয়েন্ট। শেয়ারপয়েন্ট বিকাশ সম্পর্কে আমি জানি এমন প্রতিটি বিকাশকারী এটি উপলব্ধ নথিপত্রের পরিপূরক হিসাবে ব্যবহার করে। আমরা এটি ছাড়া পেতে পারি, বেশিরভাগ অংশের জন্য হ্যাঁ; তবে এর মধ্যে অনেকগুলি মামলা ছিল যদি এটি বরং কঠিন হত।

  2. একটি অস্পষ্ট ত্রুটি ডিবাগ করা: কেন কিছু ব্যতিক্রম ছুঁড়েছে তা নির্ধারণে এটি কার্যকর হতে পারে। আপনি যদি দেখতে পান যে ব্যতিক্রম কোথায় ঘটল আপনি সমস্যাটি কী তা নির্ধারণের জন্য কল চেইনটি খুঁজে বের করতে পারেন (হয় ভুলভাবে একটি লাইব্রেরি, বাগ ইত্যাদি ব্যবহার করে)।


আমি শেয়ারপয়েন্ট বিকাশের সাথে সম্পর্কিত ব্যথা সম্পর্কে বেশ কিছুটা শুনেছি এবং মূলত সে কারণেই দূরে রয়েছি। অন্যদিকে, এটি একটি উচ্চ চাহিদা এবং ভাল ক্ষতিপূরণ বিশিষ্টতা বলে মনে হচ্ছে।
c152 ড্রাইভার

আমি গত 18 মাস ধরে এটি বন্ধ করে দিয়ে চলেছি (বর্তমান কাজটি বেশিরভাগ এসপি) তবে আমি বলতে পারি যে আমি কোনও বিশাল অনুরাগী নই। আমি মনে করি যে ব্যথা অনেকটা এমন কাজগুলি করা থেকে তৈরি করা যা সম্ভবত আপনার এতে করা উচিত নয় এবং ডকুমেন্টেশনের সাধারণ অভাব রয়েছে। অবশ্যই উচ্চ চাহিদা এবং আপনি ভাল যদি ক্ষতিপূরণ ন্যায্য চেয়ে বেশি।
কেন হেন্ডারসন

4

আপনার যখন কিছু তৃতীয় পক্ষের সমাবেশটি ব্যবহার করতে হবে তখন এটি প্রতিফলক অপরিহার্য এবং এটি হয় খারাপ দস্তাবেজযুক্ত বা এর মধ্যে বাগ রয়েছে এবং আপনি তার কোডটি দিয়ে কী চলছে তা জানতে চাই।

অবশ্যই, আপনাকে যা করতে হবে তা হ'ল আপনার কোডটি অবলম্বন করা এবং রিফ্লেক্টর অকেজো (বা এটি সর্বশেষ সময় আমি যাচাই করেছিলাম) তবে এটি আমার অতীতে অনেক সময় এবং হতাশাকে বাঁচিয়েছে।

এছাড়াও, আমি কমপক্ষে একটি উপলক্ষ পেয়েছি যেখানে আমি সোর্স কোডটি হারিয়েছি (আমার প্রাক সংস্করণ নিয়ন্ত্রণের যুগে) তবে সংকলিত কোডটি ছিল এবং প্রতিচ্ছবি আমাকে আমার কোডটি ফিরে পেতে সহায়তা করেছিল। প্রচুর কাজের প্রয়োজন কারণ মন্তব্য, পরিবর্তনশীল নাম ইত্যাদি ভুল তবে এটি সাহায্য করেছিল।

এছাড়াও, কখনও কখনও আপনার ভিবি.এনইটি কোড থাকে, বলুন এবং এটি কীভাবে করা হবে তা আপনি দেখতে চান, বলুন, সি # এবং প্রতিচ্ছবি বিভিন্ন ভাষার মধ্যে পরিবর্তন করতে পারে।


আপনি প্রধান কারণগুলির উপর আঘাত পেয়েছেন বলে মনে হচ্ছে। এই পরিস্থিতিতে নিজেকে খুব প্রায়ই খুঁজে না পাওয়ার জন্য সম্ভবত নিজেকে ভাগ্যবান বলে মনে করা উচিত if
c152 ড্রাইভার

3

রিফ্লেকশন ব্যবহার করার সময়। রানটাইমের সময় অ্যাসেমব্লি তৈরি করতে ইমিট করুন, আপনার প্রত্যাশা অনুযায়ী রিফ্লেক্টর জেনারেল কোডটি ভিজ্যুয়ালভাবে যাচাই করার জন্য একটি অত্যন্ত মূল্যবান সরঞ্জাম হয়ে উঠেছে।


2

ডকুমেন্টেশন ভুল হলে রিফ্লেক্টর আপনাকে আবিষ্কার করতে সহায়তা করে। .NET 1.1 এ ফিরে সিএলআর এর স্ট্রিংবিল্ডার ডকুমেন্টেশনের একটি বাগ পেয়েছি। দৈর্ঘ্যের সম্পত্তির জন্য ডকুমেন্টেশন এতে বলেছে:

যদি নির্দিষ্ট দৈর্ঘ্য বর্তমান দৈর্ঘ্যের চেয়ে বেশি হয় তবে এই উদাহরণটির স্ট্রিং মানটির শেষে ফাঁকা স্থান দিয়ে প্যাড করা হয়।

আমি এই বিষয়টি মাথায় রেখে স্ট্রিংবিল্ডারটি ব্যবহার করার চেষ্টা করেছি এবং উদ্ভট ফলাফল পেয়েছি। আমি রিফ্লেক্টর ব্যবহার করেছি, এবং সমস্যাটি দেখেছি। .NET 2.0 এবং ফরোয়ার্ডের দৈর্ঘ্যের সম্পত্তিটির জন্য ডকুমেন্টেশনের সঠিক তথ্য রয়েছে:

যদি নির্দিষ্ট দৈর্ঘ্য বর্তমান দৈর্ঘ্যের চেয়ে বেশি হয় তবে বর্তমান স্ট্রিংবিল্ডার অবজেক্টের স্ট্রিং মানটির শেষটি ইউনিকোড ন্যূনাল অক্ষর (ইউ + 0000) দিয়ে প্যাড করা হবে।

এটি যদি একটি মেসেজবক্সের সাহায্যে ফলাফলটি প্রদর্শিত হয় তবে এটি একটি বড় পার্থক্য আনতে পারে; মেসেজবক্স প্রথম নাল অক্ষরে পাঠ্যটি কেটে দেয়।

রিফ্লেক্টর ডকুমেন্টেশন যা বলে তার বিপরীতে সিএলআর আসলে কীভাবে আচরণ করে তা দেখার জন্য, বা ডকুমেন্টেশন কেবল উত্তর দেয় না এমন প্রশ্নের উত্তর দেওয়ার জন্য এটিগুলির মতো জিনিসগুলি খুঁজে পাওয়া সম্ভব করে তোলে ।


1
.NET- র উপরে ডেলফি ব্যবহারের আর একটি কারণ। আপনি আসলে স্ট্যান্ডার্ড লাইব্রেরিগুলির উত্স পান এবং তারা সত্যিই কী করছে তা নির্ধারণ করার জন্য তাদের ডিকম্পিলিংয়ের অবলম্বন করতে হবে না।
ম্যাসন হুইলার 23


1
@ ম্যাসন: @ ম্যাথু জবাব দেওয়ার সাথে সাথে .NET গ্রন্থাগারের জন্য উত্স কোডটি নিখরচায় পাওয়া যায়। উত্সটি ডাউনলোড করার ঝামেলা না করে রিফ্লেক্টর প্রায়শই এই জাতীয় বিষয়গুলি পরিদর্শন করার জন্য আরও সুবিধাজনক।
অ্যাডাম রবিনসন

@ অ্যাডাম: আকর্ষণীয় তবুও, এটি কেবল একটি পৃথক ডাউনলোড হিসাবে উপলব্ধ, যা আপনার মতে প্রাপ্ত ঝামেলা, আমার বক্তব্যটিকে কমপক্ষে একটি নির্দিষ্ট ডিগ্রিকে আন্ডারস্কোর করে।
ম্যাসন হুইলার

1

কখনও কখনও এটি বুঝতে সহজ হয় যে কোনও লাইব্রেরি কী করছে, এটি কীভাবে করছে এবং এর উত্স কোডটি দেখে এটি যথাযথভাবে ব্যবহার করা।

অন্য সময়, আমি কেবল কৌতূহলী এবং উঁকি দিতে চাই।

আমি রিফ্লেক্টরটি ব্যবহার করার অন্য একটি সাধারণ উপায় হ'ল ফ্রেমওয়ার্ক নিজেই কীভাবে কোনও কিছু প্রয়োগ করে see

উপলক্ষে, আমার একটি লাইব্রেরি সত্যিই পুরানো প্রকল্পে ব্যবহৃত হচ্ছে এবং আমাদের কোনও উত্স কোড বা ডকুমেন্টেশন নেই। সেই পরিস্থিতিতে রিফ্লেক্টর বেশ অমূল্য।

আমি এটি হট-প্যাচ অ্যাসেমব্লিতেও ব্যবহার করেছি। কয়েকটি ক্ষেত্রে এমন হয়েছে যেখানে আমার দরকার ছিল একটি লাইব্রেরির অভ্যন্তরীণ কিছুটা যা আমি পুনর্নির্মাণ করতে এবং রিফ্লেক্টরটি ব্যবহার করে যথাযথ পয়েন্টটি খুঁজে বের করতে পারি না এবং তারপরে সমাবেশের আইএল সংশোধন করতে পারি (না, আমি ক্র্যাকিংয়ের কথা বলছি না, তবে এর বৈধ ব্যবহারগুলি) এই কার্যকারিতা)।


0

আমি এটা বলব না যে এটি অত্যাবশ্যক। তবে বিরল ক্ষেত্রে যেখানে আপনার সত্যিই এটি প্রয়োজন তা অত্যন্ত কার্যকর।

একটি উদাহরণ নিন।

সম্প্রতি আমাকে কোডের কিছু টুকরো তৈরি করতে হয়েছিল যা রানটাইম নিম্নলিখিতগুলির জন্য এক্সপ্রেশন ট্রি তৈরি করতে পারে তবে সংকলনের সময় নির্ভরশীল সম্পত্তিটির নাম না জেনে:

Expression<Func<TMock, TDependency>> expression = (x => x.Dependency);

গতিশীলভাবে একটি মোক সেট আপ করতে (Moq ফ্রেমওয়ার্ক ব্যবহার করে)।

mock.Setup(expression).Returns(dependency);

আমি যা করেছি তা হ'ল আমি কংক্রিটের ধরণগুলি ব্যবহার করে মূল প্রকাশটি সংকলন করেছি, তারপরে প্রতিচ্ছবি ব্যবহার করে, আমি জানতে পেরেছিলাম যে আমাকে নিম্নলিখিত কোডটি লিখতে হয়েছিল:

var argument = Expression.Parameter(typeof(TMock), "x");
var getPropertyExpression = Expression.Property(argument, propertyInfo.Name);
var lambda = Expression.Lambda<Func<TMock, TDependency>>(getPropertyExpression, argument);            
Expression<Func<TMock, TDependency>> expression = lambda;    

আমি পরীক্ষা এবং ত্রুটি ব্যবহার করে এটি বের করতে সক্ষম হয়েছি। তবে প্রতিবিম্বক এটি সহজ করে তুলেছিলেন।


0

কারণ আপনি যদি এটি কীভাবে ব্যবহার করতে জানেন তবে আপনার ডকুমেন্টেশন লাগবে না - এবং বেশিরভাগ এপিআইয়ের কোনও অর্থবহ ডকুমেন্টেশন নেই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.