আমি সম্প্রতি কোড রিভিউতে আমার একটি জাভা উত্তর মুছে ফেলেছি , এটি শুরু হয়েছিল:
private Person(PersonBuilder builder) {
স্টপ। লাল পতাকা. একজন পার্সোন বিল্ডার একটি ব্যক্তি তৈরি করতেন; এটি একজন ব্যক্তির সম্পর্কে জানে। ব্যক্তি শ্রেণীর কোনও ব্যক্তির বিল্ডার সম্পর্কে কিছু জানা উচিত নয় - এটি কেবল একটি পরিবর্তনযোগ্য প্রকার। আপনি এখানে একটি বিজ্ঞপ্তি সংযোগ তৈরি করেছেন, যেখানে A বি এর উপর নির্ভর করে যা এ এর উপর নির্ভর করে
ব্যক্তির কেবলমাত্র তার পরামিতিগুলি গ্রহণ করা উচিত; এমন ক্লায়েন্ট যা নির্মাণ না করেই ব্যক্তি তৈরি করতে ইচ্ছুক তা করতে সক্ষম হওয়া উচিত।
আমাকে ডাউনটাতে থাপ্পড় মেরেছিলাম এবং বলেছিলাম (উদ্ধৃতি দিয়ে) লাল পতাকা, কেন? জোশুয়া ব্লচের তাঁর "কার্যকর জাভা" বইতে (আইটেম # 2) যা প্রদর্শিত হয়েছিল তা এখানে বাস্তবায়নের একই আকারে রয়েছে।
সুতরাং, দেখা যাচ্ছে যে জাভাতে বিল্ডার প্যাটার্ন বাস্তবায়নের ওয়ান রাইট ওয়ে হ'ল বিল্ডারকে একটি নেস্টেড টাইপ তৈরি করা (এটি এই প্রশ্নটি এখনও এই নয়) এবং তারপরে পণ্যটি তৈরি করা হচ্ছে (অবজেক্টের শ্রেণিটি নির্মিত হচ্ছে) ) বিল্ডারের উপর নির্ভরতা নিন , যেমন:
private StreetMap(Builder builder) { // Required parameters origin = builder.origin; destination = builder.destination; // Optional parameters waterColor = builder.waterColor; landColor = builder.landColor; highTrafficColor = builder.highTrafficColor; mediumTrafficColor = builder.mediumTrafficColor; lowTrafficColor = builder.lowTrafficColor; }
একই বিল্ডার প্যাটার্নের জন্য একই উইকিপিডিয়া পৃষ্ঠায় সি # এর জন্য একটি বদ্ধমূল (এবং আরও অনেক নমনীয়) বাস্তবায়ন রয়েছে:
//Represents a product created by the builder public class Car { public Car() { } public int Wheels { get; set; } public string Colour { get; set; } }
যেমন আপনি দেখতে পাচ্ছেন, এখানে পণ্যটি কোনও Builder
শ্রেণীর সম্পর্কে কিছুই জানে না , এবং এটির জন্য সমস্ত যত্নশীল এটি সরাসরি নির্মাণকারী কল, একটি বিমূর্ত কারখানা, ... বা কোনও বিল্ডার দ্বারা ইনস্ট্যান্ট করা যেতে পারে - আমি যতদূর বুঝতে পেরেছি, সৃজনশীল প্যাটার্নের পণ্যটি কখন কী তৈরি করছে সে সম্পর্কে কিছুই জানতে হবে না।
আমাকে কাউন্টার-আর্গুমেন্ট (যা স্পষ্টভাবে ব্লচের বইয়ে স্পষ্টভাবে রক্ষিত হয়েছে) পরিবেশন করা হয়েছে যে কোনও বিল্ডার প্যাটার্নটি এমন এক ধরণের পুনর্নির্মাণের জন্য ব্যবহার করা যেতে পারে যাতে কয়েক ডজন optionচ্ছিক যুক্তি দিয়ে একটি কনস্ট্রাক্টর ফেটে যায়। সুতরাং আমি যা ভেবেছিলাম আমি সে সম্পর্কে স্থির হওয়ার পরিবর্তে এই সাইটটিতে কিছুটা গবেষণা করেছি এবং দেখেছি যে আমার সন্দেহ হয়েছিল, এই যুক্তিতে জল থাকে না ।
তাহলে চুক্তি কী? কেন এমন সমস্যাটির ওভার ইঞ্জিনিয়ারযুক্ত সমাধান নিয়ে আসেন যা প্রথম স্থানে থাকা উচিত নয়? যদি আমরা জোশুয়া ব্লচকে এক মিনিটের জন্য তাঁর বেদী থেকে দূরে সরিয়ে রাখি, তবে আমরা কী দুটি কংক্রিটের ধরণের সংমিশ্রণের জন্য এবং এটি সর্বোত্তম অনুশীলন হিসাবে অভিহিত করার জন্য একক ভাল, বৈধ কারণ নিয়ে আসতে পারি?
আমার কাছে কার্গো-কাল্ট প্রোগ্রামিংয়ের এই সমস্ত বিষয় ।