একটি "সম্মিলিত" গেটেটর / সেটার ভিএস স্বতন্ত্র পদ্ধতিগুলির সুবিধা কী কী?


12

এটিকেই আমি "সংযুক্ত" গিটার / সেটার পদ্ধতি বলি (jQuery থেকে):

var foo = $("<div>This is my HTML</div>"),
    myText;

myText = foo.text(); // myHTML now equals "This is my HTML" (Getter)
foo.text("This is a new value"); // The text now equals "This is a new value")

এটি পৃথক (তাত্ত্বিক) পদ্ধতিগুলির সাথে একই যুক্তি:

var foo = $("<div>This is my HTML</div>"),
    myText;

myText = foo.getText(); // myHTML now equals "This is my HTML" (Getter)
foo.setText("This is a new value"); // The text now equals "This is a new value")

আমার প্রশ্ন:

জিকুয়েরির মতো লাইব্রেরি ডিজাইন করার সময়, আপনি কেন প্রথম রাস্তায় যাওয়ার সিদ্ধান্ত নেবেন এবং দ্বিতীয়টি নয়? দ্বিতীয় দৃষ্টিভঙ্গি কি এক নজরে আরও স্পষ্টতর এবং বুঝতে সহজ নয়?


6
মার্টিন ফোলার যাকে "ওভারলোডেড গেটার
ওভারলোডেড গেটরসেটর

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

মার্টিন ফাউলারের একমাত্র আসল যুক্তি যখন 'গেটর' কোনও যুক্তিতে পাস করে, তখন এটি পাঠকের কাছে বিভ্রান্ত হয় যে এটি কোনও প্রাপ্তির মতো দেখায় না। এখন পর্যন্ত, আমি এই সিদ্ধান্তে পৌঁছেছি যে আপনি যদি কনভেনশনটির সাথে লেগে থাকেন তবে গ্রাহক কোনও যুক্তি নেন না এবং সেটারটি একটি নেয়, এটি পরিষ্কার এপিআই মন্তব্যের পাশাপাশি, jQuery / কৌণিক দৃষ্টিভঙ্গি ঠিক ঠিক হওয়া উচিত। আপাতত
জুমালিফিগার্ড 15

উত্তর:


13

এখানে নিখুঁতভাবে অনুমান করা হচ্ছে, তবে আমি বিশ্বাস করতে চাইব যে jQuery বিকাশকারীরা jQuery কাঠামোগত গঠনে প্রচুর কার্যকরী স্টাইলিং ব্যবহার করেছেন তাদের কার্যকরী দৃষ্টান্তের প্রতি স্পষ্টভাবে ঝোঁক রয়েছে।

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

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

এই কারণেই আমি বিশ্বাস করি যে jQuery বিকাশকারীরা এটি করেছে এবং সাধারণভাবে কেন কেউ এই পদ্ধতির গ্রহণ করতে পারে।


2
সম্মত, প্লাস আমি যতটা সম্ভব জেএস আকার হ্রাস করার ইচ্ছা যুক্ত করব।
ম্যাট এস

অপরিহার্য / ভার্বোজ এবং কার্যকরী / অন্তর্নিহিত পয়েন্টগুলির জন্য -1।

3
@ ম্যাটফেনউইক আমার অর্থ আপত্তি করার অর্থ নয়, আপনি কি বলছেন যে এটি কার্যকর নয় যে কার্যকরী দৃষ্টান্তটি মিথ্যা সাক্ষীর দিকে ঝুঁকছে যেখানে অপরিহার্য দৃষ্টান্তটি ব্যাখ্যার দিকে ঝুঁকছে? আমি বলছি না হয় ভাল, কেবল যে একজনের সাথে অভ্যস্ত হতে পারে বা অন্যটির কারণে আপনি স্বয়ংক্রিয়ভাবে অন্যটির বিপরীতে এইভাবে কাজগুলি করতে পারেন (এটি
উভয়ভাবে

@ জিমি কোন সমস্যা নেই; আমার বক্তব্যটি কেবলমাত্র আমার অভিজ্ঞতার মধ্যেই, আমি ফলস্বরূপ / এক্সপ্লিট সাক্ষীকে এফপি / অপরিহার্যভাবে সংলগ্ন বলে মনে করেছি।

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

2

ফর্ম

foo.text("This is a new value"); 

বিভিন্ন বিষয় বোঝাতে পারে। সর্বাধিক সাধারণভাবে, এটি স্ট্রিংকে গ্রহণযোগ্য fooনামক একটি পদ্ধতি সহ কোনও বস্তুর পরামর্শ দেয় যা কিছু করে । এটি কোনও সম্পত্তি বলে কোনও যুক্তি নেই। text

অনেক ভাষায়, এটির সংক্ষিপ্ত রূপ বিবেচনা করা যেতে পারে

var result = foo.text("This is a new value"); 

যেখানে ফলাফল বাতিল করা হয়। সুতরাং সম্পত্তি নির্ধারণের কার্যকর উপায় হতে (এই কোডের পঠনযোগ্যতার দৃষ্টিকোণ থেকে) এই পদ্ধতিটি খুব স্পষ্ট নয়।


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

1

এটি কিছুটা অনুমানমূলক তবে এখানে এটির আমার শট রয়েছে।

jQuery পুরোপুরি জাভাস্ক্রিপ্টের কার্যকরী প্রকৃতি আলিঙ্গন করে। এটি এটিকে এত দুর্দান্ত করে তোলে, তবে তারা যখন জাভা-র মতো আরও নিখুঁতভাবে OO ভাষার ভাষা থেকে আসে তখন এটি অনেকগুলি বিকাশকারীকে তাদের মাথা আঁচড়ান leave এটি সমস্ত সম্মেলন এবং ভাল অনুশীলন ভঙ্গ বলে মনে হচ্ছে।

কার্যক্ষম ল্যাঙ্গেজ একটি ঘোষণামূলক সিনট্যাক্সের উপর জোর দেয়। এটি কমান্ড পছন্দ না করে একটি সত্যের বিবৃতি পড়ার প্রবণতা রাখে। উদাহরণ

var eligible = customers.where(c => c.age > 30);

যা "যোগ্য গ্রাহকরা হ'ল গ্রাহকগণের বয়স 30 বছরের বেশি" হিসাবে পড়তে পারেন। কনস্টাস্ট দ্বারা, অপরিহার্য ভাষা কমান্ডের অনুক্রমের মতো পড়ে read

for (customer in customers)
    if (customer.age > 30)
        eligible.add(customer)

এটিকে "প্রতিটি গ্রাহককে পরীক্ষা করুন এবং তাদের বয়স ৩০ এর বেশি হলে, তাদের উপযুক্ত সংগ্রহের সাথে যুক্ত করুন" হিসাবে পড়া যায়

এএ setএবং getঅপারেশন যুক্ত করা jQueryটিকে একটি অত্যাবশ্যক গ্রন্থাগারের মতো অনুভব করবে। নীচের বিবৃতিগুলি পড়ার উপায়টি আপনি বিস্তৃত করতে পারেন

// The element tag have an html of <p>hello</p>
$("#element").html("<p>hello</p>"); 

// content represent the html of the element tag
var content = $("#element").html();


//Imperative style

// Set the element tag to an inner html of <p>hello</p>
$("#element").setHtml("<p>hello</p>");

//Get the html of #element, and put it in the content variable
var content = $("#element").getHtml();

JQuery এপিআই এর বাইরে ক্রিয়া ক্রিয়াটি রেখে, তারা এটিকে একটি ঘোষণামূলক এপিআইয়ের মতো অনুভব করেছিল। এটি গ্রন্থাগারে একটি ধারাবাহিক, কার্যকরী অনুভূতি দেয়। সে কারণেই আমি মনে করি তারা কীওয়ার্ডগুলি ওভারলোড করেছে।


1

এটি এটিকে কিছুটা বৈশিষ্ট্যগুলির মতো আচরণ করতে সহায়তা করে , যা সম্প্রতি জাভাস্ক্রিপ্টে প্রবর্তিত হয়েছিল এবং তাই এখনও ব্যাপকভাবে ব্যবহৃত হয় না, বিশেষত জিকুয়েরির মতো লাইব্রেরিতে যা ব্রাউজারের অসঙ্গতিগুলি দূরে রাখতে সহায়তা করে।

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

যেহেতু আপনি কেবল সুবিধাগুলি চেয়েছিলেন তাই আমি অসুবিধাগুলি coverেকে রাখব না।

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