অটোম্যাপার। নেট এর জন্য একটি "অবজেক্ট-অবজেক্ট ম্যাপার", যার অর্থ একটি শ্রেণি থেকে অবজেক্টগুলি অন্য শ্রেণিতে অনুলিপি করা যা একই জিনিসকে উপস্থাপন করে।
কেন এটি সর্বদা দরকারী? ক্লাসগুলির সদৃশ কি কখনও কার্যকর / ভাল ডিজাইনের?
অটোম্যাপার। নেট এর জন্য একটি "অবজেক্ট-অবজেক্ট ম্যাপার", যার অর্থ একটি শ্রেণি থেকে অবজেক্টগুলি অন্য শ্রেণিতে অনুলিপি করা যা একই জিনিসকে উপস্থাপন করে।
কেন এটি সর্বদা দরকারী? ক্লাসগুলির সদৃশ কি কখনও কার্যকর / ভাল ডিজাইনের?
উত্তর:
একটি দ্রুত গুগল অনুসন্ধান এই উদাহরণটি প্রকাশ করেছে:
http://www.codeproject.com/Articles/61629/AutoMapper
অটোম্যাপারের পুরোপুরি বৈধ ব্যবহার দেখাচ্ছে যা অবশ্যই কোনও দুর্বল ডিজাইনের জন্য উদাহরণ নয়। স্তরযুক্ত অ্যাপ্লিকেশনটিতে আপনার ডেটা বা ব্যবসায়ের স্তরতে আপনার অবজেক্ট থাকতে পারে এবং আপনার কখনও কখনও সেই ডেটা অবজেক্টগুলির বৈশিষ্ট্যগুলির কেবলমাত্র একটি উপসেট বা আপনার ইউআই স্তরতে তাদের কোনও ধরণের ভিউ প্রয়োজন হয়। সুতরাং আপনি এমন একটি ভিউ মডেল তৈরি করেন যা আপনার ইউআইতে আরও বেশি নয়, আপনার প্রয়োজনীয় বৈশিষ্ট্যগুলি সহ অবজেক্টগুলি অন্তর্ভুক্ত করে এবং কম বয়লারপ্লেট কোড সহ সেই বস্তুর সামগ্রী সরবরাহ করতে অটোম্যাপার ব্যবহার করুন M
এমন পরিস্থিতিতে আপনার "দেখুন অবজেক্টস" মূল শ্রেণীর সদৃশ নয়। তাদের বিভিন্ন পদ্ধতি এবং সম্ভবত কয়েকটি সদৃশ বৈশিষ্ট্য রয়েছে। তবে এটি ততক্ষণ ঠিক আছে যতক্ষণ না আপনি সেই দৃশ্য অবজেক্টগুলি কেবলমাত্র ইউআই প্রদর্শনের উদ্দেশ্যে ব্যবহার করেন এবং ডেটা ম্যানিপুলেশন বা ব্যবসায়িক ক্রিয়াকলাপগুলির জন্য এগুলির অপব্যবহার শুরু করবেন না।
এর আরও ভাল ধারণা পেতে আপনি পড়তে পারেন এমন আর একটি বিষয় হ'ল সিআরইউডির বিপরীতে ফওলার্স কমান্ড কোয়েরি দায়বদ্ধতা বিভাজন প্যাটার্ন। এটি আপনাকে এমন পরিস্থিতি দেখায় যেখানে ডেটাবেজে কোয়েরি করার জন্য এবং তাদের ডেটাবেসে আপডেট করার জন্য বিভিন্ন বস্তুর মডেলগুলি বোঝায়। এখানে, একটি বস্তুর মডেল থেকে অন্যটিতে ম্যাপিং অটোম্যাপারের মতো কোনও সরঞ্জাম দ্বারাও করা যেতে পারে।
ক্লাসগুলির সদৃশ কি কখনও কার্যকর / ভাল ডিজাইনের?
ডেটা লেয়ারে ব্যবহৃত একই ক্লাসটি ব্যবহার না করে ইউআই স্তরটিতে ব্যবহারের জন্য পৃথক ভিউ মডেল শ্রেণি রাখা ভাল অভ্যাস। আপনার ইউআই / ওয়েব পৃষ্ঠার অন্যান্য তথ্যের বিটগুলি প্রদর্শিত হতে পারে যা ডেটা সত্তার সাথে কঠোরভাবে সম্পর্কিত নয়। এই অতিরিক্ত শ্রেণি তৈরি করে, সময়ের সাথে সাথে প্রয়োজনীয়তাগুলি পরিবর্তিত হওয়ায় আপনি নিজেকে আপনার ইউআইকে সহজেই টুইঙ্ক করার স্বাধীনতা দিচ্ছেন।
অটোম্যাপার ব্যবহার যতদূর যায়, আমি ব্যক্তিগতভাবে এটিকে 3 টি কারণে এড়িয়ে চলেছি:
নিরব ব্যর্থতা আরও সাধারণ
কারণ স্বয়ংক্রিয়ভাবে বৈশিষ্ট্যগুলির মধ্যে অটোম্যাপার ম্যাপস, এক শ্রেণিতে একটি সম্পত্তির নাম পরিবর্তন করা এবং অন্যটি নয় তবে সম্পত্তি ম্যাপিং এড়ানো যায়। সংকলক জানতে পারবে না। অটোম্যাপার যত্ন নেবে না।
স্থির বিশ্লেষণের অভাব
সুতরাং আপনাকে ডিল করার জন্য একটি বড় কোড বেস দেওয়া হয়েছে। এক মিলিয়ন সম্পত্তি সহ এক মিলিয়ন ক্লাস রয়েছে। অনেকটা দেখতে এগুলি ব্যবহার করা হয় না, বা সদৃশ হয়। ভিজ্যুয়াল স্টুডিওতে "সমস্ত রেফারেন্সগুলি সন্ধান করুন" সরঞ্জামটি আপনাকে কোথায় বৈশিষ্ট্যগুলি ব্যবহৃত হয় তা দেখতে এবং পুরো অ্যাপ্লিকেশনটি কীভাবে একসাথে স্তব্ধ হয়ে যায় তা আপনার মাথায় মানচিত্র তৈরি করতে সহায়তা করবে। তবে অপেক্ষা করুন, অর্ধেক বৈশিষ্ট্যের কোনও স্পষ্ট উল্লেখ নেই কারণ অটোম্যাপার ব্যবহার করা হচ্ছে। আমার কাজ এখন অনেক কঠিন একটি নরক।
দেরীতে প্রয়োজনীয়তা যা জটিলতা বাড়ায়
অটোম্যাপারগুলি সমস্ত সূক্ষ্ম এবং জঘন্য যখন আপনি যা করতে চান সমস্তগুলি এক বর্গ থেকে অন্য ক্লাসে অনুলিপি করা হয় (যেমন উন্নয়নের সূচনায় প্রায়শই ঘটে থাকে), তবে সময়ের সাথে পরিবর্তিত সেই প্রয়োজনীয়তাগুলি মনে রাখবেন? আপনার এখন যদি আপনার অ্যাপ্লিকেশনটির অন্যান্য অংশগুলি থেকে লগইন করা ব্যবহারকারী বা অন্য কোনও প্রাসঙ্গিক অবস্থার সাথে সুনির্দিষ্টভাবে মূল্যবান হওয়া দরকার?
অ্যাপ্লিকেশন শুরুতে ওয়ান-টু ক্লাস ম্যাপিং তৈরির অটোম্যাপারের প্যাটার্নটি এই ধরণের প্রসঙ্গ-নির্দিষ্ট পরিবর্তনের জন্য নিজেকে ভাল ধার দেয় না। হ্যাঁ, সম্ভবত এটি কার্যকর করার বিভিন্ন উপায় রয়েছে তবে আমি সাধারণত যুক্তিটি লেখার জন্য এটি পরিষ্কার, সহজ এবং আরও অভিব্যক্তিকর বলে মনে করি।
সংক্ষেপে, অটোম্যাপারে পৌঁছানোর আগে নিজেকে এক ক্লাসে অন্য ক্লাসে ম্যাপিংয়ের 30 সেকেন্ডের নিজেকে 30 সেকেন্ড সংরক্ষণ করার আগে, এটি সম্পর্কে ভাবুন।
প্রোগ্রামিং হ'ল কম্পিউটারটিকে অন্য একজন যা করতে চায় তা বলার শিল্প। - ডোনাল্ড নুথ
এটি মাথায় রেখে, নিজেকে জিজ্ঞাসা করুন "আজ অটোম্যাপার সহায়ক এবং এটি কি আগামীকাল হবে?"
আমার অভিজ্ঞতায়, যখন কেউ 'অত্যধিক বয়লারপ্লেট' সম্পর্কে অভিযোগ করেছে এবং অটোম্যাপার ব্যবহার করতে চায়, তখন এটি নিম্নলিখিতগুলির মধ্যে একটি:
যাহোক:
আপনি যদি কোনও স্ট্যাটিকালি-টাইপ করা ভাষা বেছে নিয়ে থাকেন তবে ভাষার সুবিধা নিন। আপনি যদি অটোম্যাপারের মতো প্রতিচ্ছবি এবং ম্যাজিক এপিআই-এর অতিরিক্ত ব্যবহারের কারণে ভুলগুলি রোধ করতে সহায়তা করে এমন ভাষায় নিয়ন্ত্রণগুলি অবরুদ্ধ করার চেষ্টা করছেন তবে এর অর্থ হ'ল আপনি এমন একটি ভাষা বেছে নিয়েছেন যা আপনার প্রয়োজনের জন্য অসন্তুষ্ট।
এছাড়াও, কেবলমাত্র মাইক্রোসফ্ট সি # তে বৈশিষ্ট্যগুলি যুক্ত করার অর্থ এই নয় যে তারা প্রতিটি পরিস্থিতিতে ন্যায্য খেলা বা তারা সেরা অনুশীলনকে সমর্থন করে। উদাহরণস্বরূপ, প্রতিচ্ছবি এবং 'ডায়নামিক' কীওয়ার্ডটি এমন ক্ষেত্রে ব্যবহার করা উচিত যেখানে আপনি এগুলি ব্যতীত আপনার যা প্রয়োজন কেবল তা সম্পাদন করতে পারেন না। অটোম্যাপার এমন কোনও ব্যবহারের ক্ষেত্রে সমাধান নয় যা ইতিমধ্যে এটি ছাড়া সমাধান করা যায় না।
সুতরাং, ক্লাসগুলির সদৃশ কি খারাপ ডিজাইন? অগত্যা।
অটোম্যাপার কী খারাপ ধারণা? হ্যাঁ একেবারে.
অটোম্যাপার ব্যবহার প্রকল্পে সিস্টেমিক ত্রুটিগুলি নির্দেশ করে indicates যদি আপনি নিজেকে এটির প্রয়োজন মনে করেন তবে থামুন এবং আপনার নকশা সম্পর্কে ভাবেন। আপনি সর্বদা একটি আরও ভাল, আরও পঠনযোগ্য, আরও রক্ষণাবেক্ষণযোগ্য এবং আরও বাগ-মুক্ত নকশা পাবেন।
এখানে একটি গভীর সমস্যা রয়েছে: সি # এবং জাভা জোর দেয় যে সর্বাধিক / সমস্ত প্রকারের কাঠামোর পরিবর্তে নাম অনুসারে পৃথক করা উচিত: উদাহরণস্বরূপ class MyPoint2D
এবং class YourPoint2D
যথাযথ একই সংজ্ঞা থাকলেও পৃথক প্রকারের। আপনি যে প্রকারটি চান তা যখন " x
ক্ষেত্র এবং ক্ষেত্রের সাথে কিছু বেনামে জিনিস y
" হয় (অর্থাত্ একটি রেকর্ড ), আপনি ভাগ্যের বাইরে। সুতরাং আপনি যখন একটিকে YourPoint2D
রূপান্তর করতে চান MyPoint2D
, তখন আপনার কাছে তিনটি বিকল্প রয়েছে:
this.x = that.x; this.y = that.y
পছন্দ 1 ছোট ডোজগুলিতে যথেষ্ট সহজ তবে যখন আপনার মানচিত্রের প্রয়োজনের ধরণের সংখ্যা বড় হয় তখন তাড়াতাড়ি কাজকর্ম হয়।
পছন্দ 2 পছন্দসই চেয়ে কম কারণ এখন কোড তৈরি করতে আপনাকে আপনার বিল্ড প্রক্রিয়ায় একটি অতিরিক্ত পদক্ষেপ যুক্ত করতে হবে এবং পুরো দলটি মেমো পেয়েছে কিনা তা নিশ্চিত করে নিন। সবচেয়ে খারাপ ক্ষেত্রে আপনাকে নিজের কোড জেনারেটর বা টেম্পলেট সিস্টেমটিও রোল করতে হবে।
যে আপনাকে প্রতিবিম্ব সঙ্গে ছেড়ে দেয়। আপনি নিজে এটি করতে পারেন বা আপনি অটোম্যাপার ব্যবহার করতে পারেন।
অটোম্যাপার হ'ল সেই লাইব্রেরি / সরঞ্জামগুলির মধ্যে একটি যেখানে সম্রাট আক্ষরিক অর্থে বাটকে নগ্ন হয়ে ঘুরে বেড়াচ্ছেন। যখন আপনি চকচকে লোগোটি পেয়ে যাবেন, আপনি বুঝতে পারবেন এটি আরও ভাল ফলাফলের সাথে ম্যানুয়ালি করতে পারবেন না এমন কিছু করে না।
যদিও আমি এটি সম্পূর্ণরূপে নিশ্চিত নই যে এটি কীভাবে অটো-ম্যাপিংয়ের সদস্যদের প্রতি ইঙ্গিত দেয়, এতে সম্ভবত অতিরিক্ত রানটাইম যুক্তি এবং সম্ভাব্য প্রতিচ্ছবি জড়িত। সময় সাশ্রয়ের বিনিময়ে এটি একটি উল্লেখযোগ্য পারফরম্যান্স পেনাল্টি হতে পারে। অন্যদিকে ম্যানুয়াল ম্যাপিং, ইঙ্গিতটি সময় সংকলনের আগে ভাল সম্পাদন করা হয়।
অটোম্যাপ্পারের কোনও চিহ্ন নেই এমন ক্ষেত্রে, আপনাকে অবশ্যই কোডিং এবং পতাকা নির্ধারণের মাধ্যমে ম্যাপিংটি কনফিগার করতে হবে। আপনি যদি সমস্ত সেটআপ এবং কোডের কাজ করে বিরক্ত করতে চলেছেন তবে আপনাকে ম্যানুয়াল ম্যাপিংয়ের থেকে এটি কতটা সাশ্রয় করবে তা প্রশ্ন করতে হবে।