স্ট্রিংগুলির সাথে যুগলকরণ কি ক্লাসের পদ্ধতির চেয়ে "আলগা"?


18

আমি জাভাতে সুইং ব্যবহার করে একটি স্কুল গ্রুপ প্রকল্প শুরু করছি। এটি ডেটাবেস ডেস্কটপ অ্যাপ্লিকেশনটিতে একটি সরল জিইউআই।

প্রফেসর আমাদের গত বছরের প্রকল্প থেকে কোড দিয়েছেন যাতে আমরা দেখতে পারি যে তিনি কীভাবে কাজ করেন। আমার প্রাথমিক ধারণাটি হ'ল কোডটি যতটা হওয়া উচিত তার চেয়ে অনেক জটিল, তবে আমি কল্পনা করি প্রোগ্রামাররা প্রায়শই কোডটি দেখেন যখন তারা কেবল লেখেননি this

আমি তার সিস্টেমটি ভাল বা খারাপ কেন কারণগুলি সন্ধান করতে চাইছি। (আমি অধ্যাপককে জিজ্ঞাসা করেছি এবং তিনি বলেছিলেন যে কেন এটি ভাল, যা আমাকে সন্তুষ্ট করে না আমি পরে তা দেখতে চাই see)

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

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

    else if(evt.getSource() == bicycleMakeField)
    {
        myRegistry.updateSubscribers("BicycleMake", bicycleMakeField.getText());
    }

সেই কলটি অবশেষে যানটির মডেলটিতে এই পদ্ধতিটিতে আসে:

public void stateChangeRequest(String key, Object value) {

            ... bunch of else ifs ...

    else
    if (key.equals("BicycleMake") == true)
    {
                ... do stuff ...

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

আমি মনে করি এটি একটি আরও খারাপ ধরণের মিলন, কারণ ভিউ এবং মডেলটিকে কাজ করতে একই স্ট্রিং ব্যবহার করতে হবে। আপনি যদি কোনও ভিউ বা মডেল সরিয়ে থাকেন, বা একটি স্ট্রিংয়ে টাইপো করেন তবে আপনার কোনও সংকলন ত্রুটি নেই। এটি কোডটি পুরোপুরি লম্বা করে তোলে যা আমার মনে হয় যে এটি হওয়া দরকার than

আমি তাঁর সাথে এটি নিয়ে আলোচনা করতে চাই, তবে তিনি তার শিল্পের অভিজ্ঞতাটি ব্যবহার করে আমি, অনভিজ্ঞ শিক্ষার্থী, যে কোনও যুক্তি তুলতে পারি না counter আমি কি অনুপস্থিত তার কিছু উপায় আছে?


স্পষ্ট করার জন্য, আমি উপরোক্ত পদ্ধতির সাথে তুলনা করতে চাই, দৃশ্যটি অবশ্যই মডেলের সাথে মিলিত হবে। উদাহরণস্বরূপ, আপনি গাড়ির মডেল অবজেক্টটি ভিউতে পাস করতে পারেন এবং তারপরে গাড়ির "মেক" পরিবর্তন করতে এটি করুন:

vehicle.make = bicycleMakeField.getText();

এটি কোডের 15 টি লাইন হ্রাস করবে যা কেবলমাত্র এক জায়গায় যানবাহনের মেকিং সেট করার জন্য ব্যবহৃত হয়, কোডের একক পঠনযোগ্য লাইনে। (এবং যেহেতু এই অ্যাপ্লিকেশনটিতে এই ধরণের অপারেশনটি কয়েকশবার করা হয়ে থাকে, তাই আমি মনে করি এটি পঠনযোগ্যতার পাশাপাশি সুরক্ষার জন্য একটি বড় জয় হবে))


হালনাগাদ

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


12
সম। আমি মনে করি আপনার অধ্যাপকের নিজের আপডেট হওয়া উচিত এবং পুরানো কোড ব্যবহার করা উচিত নয়। একাডেমিয়ায় এটি ২০০২ সাল হওয়ার পরে
২০০A

3
আপনি শেষ পর্যন্ত তার উত্তর পেলে দয়া করে আমাদের পোস্ট করুন।
JeffO

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

1
সত্য। তাঁর সাথে কথা বলার সময় আমি তাদের যাদুর স্ট্রিং বলিনি, তবে আপনি ঠিক বলেছেন, এটির চেয়ে খারাপ শোনাবার দরকার নেই।
ফিলিপ

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

উত্তর:


32

আপনার অধ্যাপক যে পদ্ধতির প্রস্তাব করেছেন তা স্ট্রাইলি টাইপড হিসাবে সর্বোত্তমভাবে বর্ণিত এবং প্রায় প্রতিটি স্তরের ক্ষেত্রে এটি ভুল।

কাপলিং নির্ভরতা বিপরীতমুখীকরণ দ্বারা সবচেয়ে ভাল হ্রাস করা হয় , যা বহু ক্ষেত্রে ব্যর্থ হওয়ার চেয়ে বহুবর্ষীয় প্রেরণের মাধ্যমে তা ঘটে।


3
আপনি "প্রায় প্রতিটি স্তরের" লিখেন, তবে কেন এটি উদাহরণস্বরূপ উপযুক্ত মামলা নয় (আপনার মতে) এটি লেখেন নি। জানতে আকর্ষণীয় হতে হবে।
হ্যাক্রে

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

সুতরাং আপনার যুক্তিটি হল: উপযুক্ত মামলাগুলি কখনও হয় না, সুতরাং এটিও খুব একটা নয়? এটি একটি যুক্তি এবং সত্যই খুব সহায়ক নয়।
hakre

1
@ হাক্রে: আমার যুক্তিটি হ'ল, এই পদ্ধতির বেশ কয়েকটি কারণে খারাপ (অনুচ্ছেদ 1 - এড়ানোর যথেষ্ট কারণগুলি স্ট্রাইপ টাইপের ব্যাখ্যাতে দেওয়া হয়েছে) এবং ব্যবহার করা উচিত নয়, কারণ এর চেয়ে আরও ভাল একটি (অনুচ্ছেদ 2) )।
back2dos

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

19

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

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

যদি সঠিকভাবে করা হয় , এই পদ্ধতির গ্রহণেরকিছু সুবিধা হতে পারে¹:

  1. ভিউ মডেলের উপর নির্ভর করে তবে মডেলটি ভিউয়ের উপর নির্ভর করতে হবে না। এটি নিয়ন্ত্রণের উপযুক্ত বিপরীতমুখী
  2. আপনার ভিউ কোডে আপনার একক জায়গা রয়েছে যা মডেল থেকে বিজ্ঞপ্তি পরিবর্তন করতে প্রতিক্রিয়া পরিচালনা করে, এবং কেবলমাত্র একটি স্থান সাবস্ক্রাইব / সাবস্ক্রাইব করতে, ঝুলন্ত রেফারেন্স মেমরি ফাঁসের সম্ভাবনা হ্রাস করে।
  3. আপনি ইভেন্ট প্রকাশক থেকে কোনও ইভেন্ট যুক্ত বা সরাতে চাইলে ওভারহেডের কম কোডিং থাকে। .NET- তে একটি অন্তর্নির্মিত প্রকাশ / সাবস্ক্রাইব প্রক্রিয়া বলা হয় eventsতবে জাভাতে আপনাকে ক্লাস বা অবজেক্ট তৈরি করতে হবে এবং প্রতিটি ইভেন্টের জন্য সাবস্ক্রাইব / সাবস্ক্রাইব কোড লিখতে হবে।
  4. এই পদ্ধতির সাথে সবচেয়ে বড় অবক্ষয় হ'ল সাবস্ক্রাইবিং কোডটি প্রকাশনা কোডের সাথে সিঙ্কের বাইরে পড়তে পারে। যাইহোক, এটি কিছু উন্নয়ন পরিবেশেও একটি সুবিধা benefit যদি মডেলটিতে কোনও নতুন ইভেন্ট তৈরি করা হয় এবং ভিউটি এটিতে সাবস্ক্রাইব করতে আপডেট না করা হয়, তবে দৃশ্যটি এখনও সম্ভবত কাজ করবে। তেমনিভাবে, যদি কোনও ইভেন্ট সরানো হয়, আপনার কিছু ডেড কোড রয়েছে তবে এটি এখনও সংকলন ও চলতে পারে।
  5. অন্তত নেট মধ্যে, গ্রাহককে দেওয়া স্ট্রিংয়ের উপর নির্ভর করে গ্রাহকগণ এবং সেটটারগুলিকে স্বয়ংক্রিয়ভাবে কল করতে এখানে প্রতিফলন খুব কার্যকরভাবে ব্যবহৃত হয়।

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


Implementing INotifyPropertyChangedমানুষ বাস্তবায়নের সময় যাদু স্ট্রিং ব্যবহার এড়াতে চেষ্টা করার জন্য মিলিয়ন উপায় খুঁজে পেতে Google অনুসন্ধান করুন ।


মনে হচ্ছে আপনি এখানে এসওএপি বর্ণনা করেছেন। : ডি ... (তবে হ্যাঁ, আমি আপনার বক্তব্যটি পেয়েছি এবং আপনি ঠিক বলেছেন)
কনরাড রুডল্ফ

11

enumpublic static final Stringম্যাজিক স্ট্রিংয়ের পরিবর্তে গুলি (বা গুলি) ব্যবহার করা উচিত।

আপনার অধ্যাপক ওও বুঝতে পারেন না । উদাহরণস্বরূপ একটি কংক্রিট যানবাহন ক্লাস করা?
এবং এই ক্লাসটি সাইকেলের তৈরি বোঝার জন্য?

যানবাহন বিমূর্ত হওয়া উচিত এবং বাইক নামে একটি কংক্রিট সাবক্লাস থাকা উচিত। আমি একটি ভাল গ্রেড পেতে তার নিয়ম করে খেলতাম এবং তারপরে তার শিক্ষাকে ভুলে যাই।


3
এই ব্যায়ামের বিন্দু যদি না আরও ওও নীতিগুলি ব্যবহার করে কোডটি উন্নত করে। সেক্ষেত্রে রিফ্যাক্টর দূরে।
joshin4colours

2
@ joshin4colours যদি স্ট্যাক এক্সচেঞ্জ এ গ্রেডিং করছিল আপনি ঠিক বলেছেন; তবে যেহেতু গ্রেডার একই ব্যক্তি যিনি এই ধারণাটি নিয়ে এসেছিলেন তিনি আমাদের সকলকে খারাপ নম্বর দিতে চাইবেন কারণ তিনি জানেন যে তার বাস্তবায়ন আরও ভাল ছিল।
ড্যান নীলি

7

আমার মনে হয় আপনার ভাল পয়েন্ট আছে, ম্যাজিক স্ট্রিংগুলি খারাপ। আমার দলের কাউকে কয়েক সপ্তাহ আগে ম্যাজিক স্ট্রিং দ্বারা সৃষ্ট সমস্যাটি ডিবাগ করতে হয়েছিল (তবে এটি তাদের নিজস্ব কোডটিতে ছিল যে তারা লিখেছিল তাই আমি মুখ বন্ধ রেখেছিলাম)। এবং এটি ঘটেছে ... শিল্পে !!

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

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


আমি সম্মত হই যে এনামগুলি স্ট্রিং লিটারেলের চেয়ে ভাল। তবে তারপরেও, এনাম কী দিয়ে "স্টেটচ্যাঞ্জারেক্সেস্ট" কল করা বা মডেলটিতে সরাসরি কোনও পদ্ধতিতে কল করা কি সত্যই ভাল? যেভাবেই হোক, মডেল এবং ভিউ এক জায়গায় মিলিত হয়েছে।
ফিলিপ

@ ফিলিপ: ঠিক আছে, আমি তখন মডেলটি ডিকুয়াল করার এবং অনুমান করার জন্য অনুমান করি যে এটি করার জন্য আপনার কোনওরকম নিয়ামক-শ্রেণীর প্রয়োজন হতে পারে ...
হতাশ

@ ফ্রেস্ট্রেটেড উইথফর্মস ডিজাইনার - হ্যাঁ একটি এমভিসি আর্কিটেকচারটি সবচেয়ে decoupled
সিডেস্ক

ঠিক আছে, যদি অন্য স্তর তাদের ডিক্লুপ করতে সহায়তা করে তবে আমি এর বিরুদ্ধে তর্ক করব না। তবে সেই স্তরটি এখনও স্থিরভাবে টাইপ করা যেতে পারে এবং সেগুলি সংযুক্ত করার জন্য স্ট্রিং বা এনাম বার্তাগুলির পরিবর্তে প্রকৃত পদ্ধতিগুলি ব্যবহার করতে পারে।
ফিলিপ

6

'শিল্প অভিজ্ঞতা' ব্যবহার করা একটি দুর্বল যুক্তি। আপনার অধ্যাপককে এর চেয়ে আরও ভাল যুক্তি নিয়ে আসতে হবে :-)।

অন্যরা যেমন বলেছে, ম্যাজিক স্ট্রিংসের ব্যবহার অবশ্যই এলোমেলো করা হয়, এনামগুলি ব্যবহার করা আরও নিরাপদ বলে মনে করা হয়। একটি এনামের অর্থ এবং সুযোগ রয়েছে , যাদু স্ট্রিংগুলি তা করে না। এ ছাড়াও, আপনার অধ্যাপক যেভাবে উদ্বেগকে উদ্বিগ্ন করছেন তা আজকের চেয়ে বেশি পুরানো এবং আরও ভঙ্গুর কৌশল হিসাবে বিবেচিত।

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


2
পুরোপুরি সম্মত একাডেমিয়ার শিল্পের তুলনায় অনেক বেশি প্রয়োজনীয়তা থাকা উচিত। একাডেমিয়া == সেরা তাত্ত্বিক উপায়; শিল্প == সর্বোত্তম ব্যবহারিক উপায়
ফার্মার

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

4

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

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


4

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

কারণ খুব সহজ; স্ট্রিংগুলি বাক্য সংশ্লেষের জন্য বা অন্য মানগুলির সাথে সামঞ্জস্যের জন্য পরীক্ষা করা হয় না (সর্বোপরি, তারা স্ট্রিংয়ের মধ্যে এস্কেপ অক্ষর এবং অন্যান্য ভাষা-নির্দিষ্ট বিন্যাস সম্পর্কিত যথাযথ ফর্মের জন্য পরীক্ষা করা হয়)। আপনি নিজের ইচ্ছামত যেকোন কিছু স্ট্রিংয়ে রাখতে পারেন। এই হিসাবে, আপনি সঙ্কলনের জন্য একটি আশাহীনভাবে ভাঙা অ্যালগরিদম / প্রোগ্রাম পেতে পারেন এবং এটি ততক্ষণ না ঘটে যতক্ষণ না ত্রুটি দেখা দেয়। নিম্নলিখিত কোড বিবেচনা করুন (সি #):

private Dictionary<string, Func<string>> methods;

private void InitDictionary() //called elsewhere
{
   methods = new Dictionary<string, Func<string>> 
      {{"Method1", ()=>doSomething()},
       {"MEthod2", ()=>doSomethingElse()}} //oops, fat-fingered it
}

public string RunMethod(string methodName)
{
   //very naive, but even a check for the key would generate a runtime error, 
   //not a compile-time one.
   return methods[methodName](); 
}

...

//this is what we thought we entered back in InitDictionary for this method...
var result = RunMethod("Method2"); //error; no such key

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


2

আসলে, এই ক্লাসগুলি এখনও দৃly়ভাবে একত্রিত। এখন ব্যতীত এগুলি এমনভাবে শক্তভাবে সংযুক্ত করা হয়েছে যাতে বিষয়গুলি ভেঙে যাওয়ার সময় সংকলক আপনাকে বলতে পারে না!

যদি কেউ "সাইকেলমেক" পরিবর্তন করে "সাইকেলমেক" করে রাখে তবে রানটাইম পর্যন্ত জিনিসগুলি ভাঙ্গা হয়েছে তা কেউই খুঁজে পাবে না।

রানটাইম ত্রুটিগুলি সংকলন সময়ের ত্রুটির চেয়ে সমাধানের জন্য আরও ব্যয়বহুল - এটি কেবল সমস্ত ধরণের মন্দ।

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