কোনও অবজেক্ট তৈরির জন্য পদ্ধতি শৃঙ্খলা ব্যবহার করে আইডিয়ামটির নাম কী?


21

আমি প্রায়শই এমন প্যাটার্ন ব্যবহার করি যেখানে আমি কোনও অবৈধ সেট আপ করতে পদ্ধতি শৃঙ্খলা ব্যবহার করি যা একটি Builderবা Prototypeপ্যাটার্নের অনুরূপ , তবে মূল অবজেক্টটি পরিবর্তনের পরিবর্তে প্রতিটি পদ্ধতি কল দিয়ে নতুন অবজেক্ট তৈরি না করে।

উদাহরণ:

new Menu().withItem("Eggs").withItem("Hash Browns").withStyle("Diner");

কেবল ভাবছেন যে এই প্যাটার্নটির কোনও নাম আছে কিনা এবং এটিকে একটি অ্যান্টি-প্যাটার্ন হিসাবে বিবেচনা করা হয় কিনা, যদিও এটি আরও সাবলীলভাবে পড়তে পারে তবে এটি দীর্ঘ পদ্ধতির শৃঙ্খলে নিয়ে যেতে পারে।


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

1
আরও আলোচনার জন্য, এই প্রশ্নটি একবার দেখুন: প্রোগ্রামারস.স্ট্যাকেক্সেঞ্জার.কমেসেশনস
এরিক কিং

@ ওডে কেবল প্রতিটি কলকে পৃথক বিবৃতি দিয়ে শৃঙ্খলা ছাড়াই এ জাতীয় এপিআই ব্যবহার করা সম্ভব, অথবা বিকল্পের জন্য আপনার কাছে অন্য ধারণা আছে?
গ্যারেট হল

@ গ্যারেটহল - অবশ্যই এটি সম্ভব, তবে তারপরে আপনি menu.withStyle("")প্রসঙ্গ ব্যতীত ফোন করা শেষ করবেন । এ জাতীয় ক্ষেত্রে আপনার দুটি এপিআই দরকার ।
ওদেড

2
@ গ্যারেটহল 'সাবলীল ইন্টারফেসের মূল বিষয়টি হল মেথড চেইন, যা বোঝানো হয় একটি বাক্যটির মতো পড়তে। এই অর্থে, দীর্ঘ পদ্ধতির চেইনটিকে খারাপ বলে বিবেচনা করা হয় না। তবে, এবং এখানে আমি ওডেদের সাথে একমত, আরও প্রচলিত সিনট্যাক্সে একই কার্যকারিতা সরবরাহ করা ভাল। এই পদ্ধতিতে, বিকাশকারী কোন পদ্ধতিটি ব্যবহার করবেন তা চয়ন করতে পারেন।
এরিক কিং

উত্তর:


37

সাবলীল ইন্টারফেস

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

প্রধান ত্রুটিগুলি হ'ল পাঠযোগ্যতা (যা কিছু লোক পছন্দ করে এবং কিছু ঘৃণা করে) এবং কিছু ক্ষেত্রে এটি ডিবাগ করা আরও কঠিন হতে পারে কারণ এটির পদক্ষেপ নেওয়ার সময় ক্রিয়াগুলির সম্পূর্ণ শৃঙ্খলা একটি একক বিবৃতি হিসাবে বিবেচিত হতে পারে।

আমি অবশ্যই এটিকে একটি অ্যান্টি-প্যাটার্ন হিসাবে বিবেচনা করি না, যদিও আমি নিজে কয়েকবার এই কৌশলটি ব্যবহার করেছি।


4
নোট করুন যে প্রবক্তারা একটি সাবলীল ইন্টারফেসে কেবল পদ্ধতি শৃঙ্খলাবদ্ধতার চেয়ে অনেক বেশি জড়িত, যদিও এই শব্দটি দ্বারা আর কী বোঝানো হয় তা প্রায়শই অস্পষ্ট থাকে।
কিলিয়ান ফট

সম্পূর্ণ শৃঙ্খলা একক বিবৃতি হিসাবে বিবেচনা করা কি সাধারণ? এটি আমার কাছে খারাপ ডিজাইন করা ডিবাগার ইস্যুর মতো শোনাচ্ছে।
ব্লুবেরিফিল্ডস

আমি এমন কোনও ডিবাগার জুড়ে আসিনি যা শৃঙ্খলাগুলিকে একক বিবৃতি হিসাবে বিবেচনা করে, তবে আপনি কেবল একটি নির্দিষ্ট শৃঙ্খলে শৃঙ্খলার শেষের দিকে যে কোনও পদ্ধতিতে আগ্রহী তা যদি এখনও ব্যথা হতে পারে।
ওয়াঘানড্রয়েড

1
আমি সি # তে কাজ করি, এবং। নেট ডিবাগার আমাকে পৃথক পদ্ধতিতে খুব সূক্ষ্মভাবে যেতে দেয়। অন্য ভাষা, আমি এতটা নিশ্চিত নই।
এরিক কিং

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

5

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

আপনার উদাহরণের জন্য (withx, withy ব্যবহার করে) আপনি এটি বিল্ডার প্যাটার্নের একটি বৈকল্পিক বিবেচনা করতে পারেন কারণ আপনি একটি বিশেষ শ্রেণিবদ্ধ পেয়েছেন যা কিছু স্টেটের (পদ্ধতি কলগুলি) সঠিকভাবে কনফিগার করা অবজেক্ট কীভাবে ফিরে আসতে পারে তা জানে।

যদি এটি যথাযথভাবে ব্যবহৃত হয় তবে এটি কোনও বিরোধী-নিদর্শন নয়।


আবিষ্কারের কী? আপনার প্রয়োজনীয় পদ্ধতিগুলি API এর স্বতঃপূরণের মাধ্যমে সন্ধান করার ক্ষমতা?
জোশিয়াহ যোদার

আমি jQuery এর সাথে পরিচিত নই। কীভাবে তাদের পদ্ধতির চেইনগুলি কেবল সুবিধার্থে নয়, আবিষ্কারের নয়? চেইন করার অনেকগুলি উপায় আছে কেননা এটি স্বতঃপূরণের সাথেও অভিভূত?
জোশিয়ার যোদার 19

3

এটিকে কোনও বিরোধী-নিদর্শন হিসাবে বিবেচনা করা হোক না কেন,

অবশ্যই একটি বিরোধী নিদর্শন নয়। jQuery সম্ভবত এটির সর্বাধিক ব্যবহৃত বাস্তবায়ন।

কারণ যদিও এটি আরও সাবলীলভাবে পড়তে পারে তবে এটি দীর্ঘ পদ্ধতির শৃঙ্খলে নিয়ে যেতে পারে

হ্যাঁ পারে, তবে বিকল্প কী? আপনি প্রায় সহজ সরল ইংরেজী বাক্যটি দিয়ে শেষ করতে পারেন, এপিআই আপনাকে যা উপলব্ধ এবং উপযুক্ত তার দিকে পরিচালিত করে।


.. এবং আপনি যা চান তা 1 - 1 লাইনে 8 - 10 এর পরিবর্তে পেয়ে যাবেন আপনি যদি কোনও টার্মিনালে কেবল একটি লাইন লিখে থাকেন তবে ভাল। 10-র চেয়ে 1 কমান্ড পুনরুদ্ধার করা সহজ কারণ এটি সাবলীল এবং পদ্ধতিগুলির বর্ণনামূলক নাম রয়েছে এটি পড়াও সহজ। দুঃখের বিষয় পাইথন 2 এ এর ​​অনেক কিছুই পাইথন 3 / পাইথন 4 এ আর করা যায় না।
ম্যাকেনজম

-3

একে বলা হয় "ট্রেন রেক" প্যাটার্ন।

(এটি একটি অ্যান্টি-প্যাটার্ন এবং ক্লিন কোডের বিপরীতে)

"ট্রেনের ধ্বংসস্তূপ" প্যাটার্নটি মিটারের আইন লঙ্ঘন করে ।


3
আপনি যে নিবন্ধটি সংযুক্ত করছেন সেখানে উদাহরণটি যেখানে এই পদ্ধতিটি শৃঙ্খলাবদ্ধ তার মতো নয় a.getB().getC().doSomething()। এই উদাহরণটি খারাপ কারণ "আপনার পদ্ধতিটি সরাসরি তার নিজস্ব ক্ষেত্রগুলিতে পদ্ধতিগুলি কল করতে পারে (তবে ক্ষেত্রের ক্ষেত্রে নয়)"। এখানে, কেবলমাত্র 1 টি অবজেক্ট রয়েছে যা তৈরি করা হচ্ছে এবং "আপনি নিজেরাই খেলনা খেলতে পারবেন"।
নিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.