কোনও প্রকারের সাথে এটির নির্মাতার সাথে মিলিত হবে কেন?


20

আমি সম্প্রতি কোড রিভিউতে আমার একটি উত্তর মুছে ফেলেছি , এটি শুরু হয়েছিল:

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;
}

https://en.wikipedia.org/wiki/Builder_pattern#Java_example

একই বিল্ডার প্যাটার্নের জন্য একই উইকিপিডিয়া পৃষ্ঠায় সি # এর জন্য একটি বদ্ধমূল (এবং আরও অনেক নমনীয়) বাস্তবায়ন রয়েছে:

//Represents a product created by the builder
public class Car
{
    public Car()
    {
    }

    public int Wheels { get; set; }

    public string Colour { get; set; }
}

যেমন আপনি দেখতে পাচ্ছেন, এখানে পণ্যটি কোনও Builderশ্রেণীর সম্পর্কে কিছুই জানে না , এবং এটির জন্য সমস্ত যত্নশীল এটি সরাসরি নির্মাণকারী কল, একটি বিমূর্ত কারখানা, ... বা কোনও বিল্ডার দ্বারা ইনস্ট্যান্ট করা যেতে পারে - আমি যতদূর বুঝতে পেরেছি, সৃজনশীল প্যাটার্নের পণ্যটি কখন কী তৈরি করছে সে সম্পর্কে কিছুই জানতে হবে না।

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

তাহলে চুক্তি কী? কেন এমন সমস্যাটির ওভার ইঞ্জিনিয়ারযুক্ত সমাধান নিয়ে আসেন যা প্রথম স্থানে থাকা উচিত নয়? যদি আমরা জোশুয়া ব্লচকে এক মিনিটের জন্য তাঁর বেদী থেকে দূরে সরিয়ে রাখি, তবে আমরা কী দুটি কংক্রিটের ধরণের সংমিশ্রণের জন্য এবং এটি সর্বোত্তম অনুশীলন হিসাবে অভিহিত করার জন্য একক ভাল, বৈধ কারণ নিয়ে আসতে পারি?

আমার কাছে কার্গো-কাল্ট প্রোগ্রামিংয়ের এই সমস্ত বিষয় ।


12
এবং এই "প্রশ্ন" স্রেফ বেহালার কথা বলে ...
ফিলিপ কেন্ডাল

2
@ ফিলিপ কেন্ডল সম্ভবত কিছুটা তবে প্রতিটি জাভা নির্মাতার বাস্তবায়নে কেন এই আঁটসাঁটো মিলন রয়েছে তা বুঝতে আমি আগ্রহী।
ম্যাথিউ গিন্ডন

19
ফিলিপ কেন্ডল এটি আমার কাছে কৌতূহল প্রকাশ করে।
মাস্ত্ত

8
@ ফিলিপ কেন্ডল এটি হ'ল বাজির মতো পড়ে, হ্যাঁ, তবে এর মূল অংশে একটি বৈধ অন-টপিক প্রশ্ন রয়েছে। সম্ভবত ভাড়াটিয়া সম্পাদনা করা যেতে পারে?
অ্যান্ড্রেস এফ

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

উত্তর:


22

আমি একটি লাল পতাকা যে আপনার এই দাবির সাথে আমি একমত নই। কাউন্টারপয়েন্টের আপনার প্রতিনিধিত্বের সাথেও আমি একমত নই, কোনও বিল্ডার প্যাটার্ন উপস্থাপনের এক সঠিক উপায় আছে is

আমার কাছে একটি প্রশ্ন আছে: বিল্ডার কি টাইপের এপিআইয়ের প্রয়োজনীয় অংশ? এখানে, পার্সন বিল্ডার কি ব্যক্তি এপিআইয়ের প্রয়োজনীয় অংশ?

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

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

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


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


আমি মনে করি যে আমি কনস্ট্রাক্টরকে প্রয়োগের বিশদ হিসাবে বিবেচনা করার বিষয়ে আপনার পয়েন্টটি দেখছি। এটি দেখে মনে হয় না যে কার্যকর জাভা সঠিকভাবে এই বার্তাটি পৌঁছেছে তখন (আমার কাছে সেই বইটি ছিল না / পড়েনি), এক টন জুনিয়র রেখে (?) জাভা ডিভস ধরে নিলেন "সেভাবেই এটি হয়ে গেছে" সাধারণ জ্ঞান নির্বিশেষে । আমি সম্মত হই যে তুলনার জন্য উইকিপিডিয়া উদাহরণগুলি খারাপ .. তবে ওহে এটি উইকিপিডিয়া .. এবং এফডাব্লুআইডাব্লু আমি আসলে ডাউনভোটের যত্ন নিই না; মুছে ফেলা উত্তরটি যাইহোক ইতিবাচক নেট স্কোর নিয়ে বসে আছে (এবং অবশেষে আমার [ব্যাজ: পিয়ার-চাপ]] স্কোর করার সুযোগটি আছে।
ম্যাথিউ গুইনন

1
তবুও, আমি এই ধারণাটি ঝাপিয়ে পড়তে পারি না যে অনেকগুলি কনস্ট্রাক্টর আর্গুমেন্টের সাথে একটি ধরণের একটি ডিজাইনের সমস্যা (এসআরপি ভাঙার গন্ধ), এটি কোনও বিল্ডার প্যাটার্নটি দ্রুত কার্পেটের নীচে সরানো হয়।
ম্যাথিউ গিন্ডন

3
@ ম্যাটসমগ আমার পোস্টটি উপরে দেওয়া হিসাবে এটি গ্রহণ করেছে যে শ্রেণিটির অনেকগুলি নির্মাণকারী যুক্তি প্রয়োজন । আমি একইভাবে এটি একটি ডিজাইনের গন্ধ হিসাবে বিবেচনা করব যদি আমরা একটি স্বেচ্ছাসেবী ব্যবসায়িক যুক্তিযুক্ত উপাদানটির কথা বলি, তবে কোনও ডেটা অবজেক্টের জন্য, দশ বা বিশটি প্রত্যক্ষ গুণাবলী থাকা কোনও ধরণের জন্য প্রশ্ন নয়। উদাহরণস্বরূপ কোনও লগে কোনও একক দৃ strongly়-টাইপিত রেকর্ড উপস্থাপনের জন্য কোনও সামগ্রীর জন্য এটি এসআরপি লঙ্ঘন নয় ।
জেফ বোম্যান

1
যথেষ্ট ফর্সা। String(StringBuilder)যদিও আমি এখনও কনস্ট্রাক্টরটি পাই না , যা মনে হয় যে এই "নীতি" মেনে চলেছে যেখানে কোনও ধরণের পক্ষে তার বিল্ডারের উপর নির্ভরতা থাকা স্বাভাবিক। আমি যখন কনস্ট্রাক্টর ওভারলোড দেখেছি তখন আমি স্তম্ভিত হয়ে পড়েছিলাম। এটি কোনও String42 কনস্ট্রাক্টর প্যারামিটারের মতো নয় ...
ম্যাথিউ গুইন্ডন

3
@ লুয়ান অদ্ভুত আমি আক্ষরিকভাবে এটি কখনও ব্যবহার করতে দেখিনি এবং এটির অস্তিত্বটিও জানতাম না; toString()সর্বজনীন।
ক্রাইলিস -হান ধর্মঘট-

7

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

এটি বলার পরে, আমি মনে করি আপনার যুক্তির ধরণ একই রকম। আমাদের কখনই দুটি কংক্রিটের সংযুক্তি করা উচিত নয় এবং এটিকে একটি সেরা অনুশীলন বলা উচিত কারণ ... কেউ কেউ তাই বলেছে?

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

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


সুতরাং ... উচ্চতর মিলন, নিম্ন সংহতি => শুভ সমাপ্তি? হুম ... আমি রচয়িতা সম্পর্কে, কিন্তু অন্য একটি উদাহরণ আনতে, আমি তা দেখতে ব্যর্থ "কন্সট্রাকটর ব্যাপ্ত" বিন্দু দেখতে Stringএকটি কন্সট্রাকটর জমিদার একটি গ্রহণ সঙ্গে করছে StringBuilderপ্যারামিটার (যদিও এটা তর্কসাপেক্ষ কিনা StringBuilderএকটি হল রচয়িতা , কিন্তু যে এর আরেকটি গল্প).
ম্যাথিউ গুইন্ডন

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

আমি আমার নিজস্ব কোড বেসে যে বিল্ডার প্যাটার্নটি পেয়েছি তার একটি বৈধ ব্যবহার, ভিবিআইডিআই এপিআইকে উপহাস করার জন্য; মূলত আপনি একটি কোড মডিউলটির স্ট্রিং সামগ্রী সরবরাহ করেন এবং বিল্ডার আপনাকে একটি VBEমক দেয় যা উইন্ডো, সক্রিয় কোড ফলক, একটি প্রকল্প এবং আপনার সরবরাহিত স্ট্রিং সহ একটি মডিউল সহ একটি উপাদান দেয়। এটি না করে, আমি জানি না যে আমি কীভাবে রবারডাক্কে 80% পরীক্ষা লিখতে সক্ষম হব , অন্তত প্রতিবার যখন আমি তাদের দিকে তাকাই তখন নিজের চোখে নিজেকে ছুরিকাঘাত না করে।
ম্যাথিউ গুইনন

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

4

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

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

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


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

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

1

সৃজনশীল প্যাটার্নের পণ্যটিকে কখন কী তৈরি করছে সে সম্পর্কে কিছুই জানতে হবে না।

Personবর্গ কি এটা তৈরি হচ্ছে জানে না। এটির সাথে কেবলমাত্র একটি প্যারামিটারযুক্ত কনস্ট্রাক্টর রয়েছে, তাইলে কী? প্যারামিটারের প্রকারের নাম দিয়ে ... বিল্ডারটি শেষ হয় যা আসলে কিছুই জোর করে না। এটি সব পরে একটি নাম।

বিল্ডার একটি গৌরবযুক্ত 1 কনফিগারেশন অবজেক্ট। এবং একটি কনফিগারেশন অবজেক্ট হ'ল একে অপরের মালিকানাধীন বৈশিষ্ট্যগুলি একত্রে গোষ্ঠীভুক্ত করা। তারা যদি কেবল কোনও শ্রেণীর নির্মাতাকে পাস করার উদ্দেশ্যে যদি একে অপরের সাথে সম্পর্কিত হয়, তবে তা হউক! উভয় originএবং destinationএর StreetMapউদাহরণ ধরনের Point। প্রতিটি পয়েন্টের পৃথক স্থানাঙ্কগুলি মানচিত্রে পাস করা কি সম্ভব হবে? অবশ্যই, তবে এর বৈশিষ্ট্যগুলি এক Pointসাথে সম্পর্কিত, এছাড়াও আপনার উপর তাদের ধরণের সমস্ত ধরণের পদ্ধতি থাকতে পারে যা তাদের নির্মাণে সহায়তা করে:

1 পার্থক্যটি হ'ল বিল্ডার কেবল একটি সরল ডেটা অবজেক্টই নয়, এই শিকলযুক্ত সেটটার কলগুলির জন্য মঞ্জুরি দেয়। বেশিরভাগ কিভাবে নিজেই গড়ে তুলতে সাথে সংশ্লিষ্ট হয়।Builder

এখন আসুন মিশ্রণটিতে কিছুটা কমান্ড প্যাটার্ন যুক্ত করুন কারণ আপনি যদি ঘনিষ্ঠভাবে দেখেন তবে নির্মাতা আসলে একটি আদেশ:

  1. এটি একটি ক্রিয়াকলাপ সজ্জিত করে: অন্য শ্রেণির একটি পদ্ধতি কল করে
  2. এই ক্রিয়াটি সম্পাদন করার জন্য এটি প্রয়োজনীয় তথ্য ধারণ করে: পদ্ধতির পরামিতিগুলির মান

বিল্ডারের জন্য বিশেষ অংশটি হ'ল:

  1. যে পদ্ধতিটি বলা হবে তা আসলে কোনও শ্রেণির নির্মাতা। এটিকে এখন সৃজনশীল প্যাটার্ন বলা ভাল ।
  2. প্যারামিটারটির মান নির্মাতা নিজেই

Personকনস্ট্রাক্টরের কাছে যা যা পাস হচ্ছে তা এটি তৈরি করতে পারে, তবে এটি অগত্যা হয় না। এটি প্লেইন পুরানো কনফিগারেশন অবজেক্ট বা নির্মাতা হতে পারে।


0

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


4
ধন্যবাদ ... আমি নিশ্চিত যে এই উত্তরটি যদি আরও কিছুটা প্রসারিত হয় তবে এটি আরও বেশি ভোট সংগ্রহ করবে, এটি অসম্পূর্ণ উত্তর বলে মনে হচ্ছে =)
ম্যাথিউ গুইন্ডন

হ্যাঁ, আমি +1, বিল্ডারের বিকল্প বিকল্প যা
দম্পতি

3
এর পাল্টা পয়েন্টের জন্য, গ্রহণযোগ্য উত্তরটি দেখুন , যেখানে এমন ঘটনাগুলির উল্লেখ রয়েছে যেখানে PersonBuilderপ্রকৃতপক্ষে Personএপিআইয়ের একটি অত্যাবশ্যক অংশ is যেমনটি দাঁড়িয়েছে, এই উত্তরটি এর ক্ষেত্রে তর্ক করে না।
আন্দ্রেস এফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.