অবজেক্ট-ওরিয়েন্টেড কোড লেখার সময়, আমার কি সবসময় ডিজাইনের ধরণ অনুসরণ করা উচিত?


37

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

class Lock
{
public:
    virtual void close() = 0;
    virtual void open() = 0;
    virtual bool is_open() const = 0;
    virtual ~Lock() { }
};

class DummyLock
    : public Lock
{
private:
    DummyLock();
    DummyLock(const DummyLock&) = delete;
    DummyLock& operator=(const DummyLock&) = delete;

private:
    void close() { }
    void open() { }
    bool is_open() const { return true; }

public:
    static DummyLock m_instance;
};

class Door
{
public:
    Door() : m_lock(DummyLock::m_instance) { }
    Door(Lock &lock) : m_lock(lock) { }

public:
    Lock& get_lock() const { return m_lock; }

private:
    Lock &m_lock;
};

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



51
আপনি কি মনে করেন যে আপনি মূর্খতাগুলিতে পুরোপুরি কথা বলতে পারেন? কোন? তারপরে আপনার নকশাগুলির নকশাগুলি একসাথে চালিয়ে আপনার প্রোগ্রামগুলি তৈরি করা উচিত নয়।
কিলিয়ান পাথ

4
আপনার উদাহরণে, নাল অবজেক্ট প্যাটার্নটি কেবলমাত্র একাডেমিক উদ্দেশ্যে যুক্ত করা হয়, এটি এই কোডটিতে "একটি ভাল নকশা" প্রবর্তন করে না।
ডক ব্রাউন 19

4
@ ডিজেচলিন: অন্য কথায়, "দুই শব্দ" ডিজাইনের ধরণটি ব্যবহার করুন :)
মাইকেল শ

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

উত্তর:


143

আমি সবসময় কিছু ডিজাইন প্যাটার্ন অনুসরণ করা উচিত?

প্রিয় Nশ্বর না!

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

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

আপনার নিজের চিন্তাভাবনা করার, আপনার সামনে অনন্য সমস্যার জন্য নিদর্শনগুলি তৈরি করার জন্য, বা সুন্দর বালতিগুলির সাথে খাপ খায় না এমন সমস্ত অনিবার্য জিনিস পরিচালনা করার প্রয়োজনীয়তা তারা এগুলি প্রতিস্থাপন করে না।


5
আপনার প্রথম অনুচ্ছেদটি কীভাবে আমি এর উত্তর দেব তার অংশ। যখন এটি পুনরাবৃত্তি করা হয় তখন কিছু কিছু একটি প্যাটার্নে পরিণত হয়। যোগাযোগের প্রয়োজনের জন্য যদি এটি পর্যাপ্ত সময় পুনরাবৃত্তি করা হয় তবে এটি একটি প্যাটার্ন এবং একটি নাম থেকে উপকার পাওয়া যায়। এমনকি কিছু দ্বারা এটি যুক্তিযুক্ত যে একটি প্যাটার্নটি কেবল বিকাশ লাভ করে কারণ কিছু বিমূর্ততা অনুপস্থিত। সাধনা প্যাটার্নের রাস্তা vaunted জাহাজী অর্চনা একজন সদস্য হিসেবে কুকীর্তির হয়।
Magus 21

11
@ ক্রেড: অবশ্যই, যতক্ষণ না আপনি Godশ্বরের ক্লাস না লেখার প্রতিশ্রুতি দেন!
ইয়তিমা 2975

9
জন দো - প্রযুক্তিগত প্রকৌশলী, জেনেরিক কোড বানর এবং তার কম্পিউটার চেয়ারের রাজা
hjk

1
যুক্তিযুক্তভাবে, একটি নকশায় এমন প্যাটার্নগুলি ব্যবহার করা উচিত যেখানে উপযুক্ত এবং ক্লাসগুলির নামকরণ করা উচিত। তারা গুরুত্বপূর্ণ হাতিয়ার। the_cult(টিএম) এর ভয় পাওয়া ঠিক ততটাই বিপদজনক।
গুড্ডর

25
দুর্দান্ত উত্তর! আমার একটি সমালোচনা হ'ল "প্রিয় Godশ্বর নেই!" যথেষ্ট বড় নয়।
tobyink

37

না।

গ্যাং অফ ফোর (যা মূলত ডিজাইনের ধরণগুলিকে জনপ্রিয় করেছে) তাদের বইতে এটি সম্পর্কে বলতে হয়েছিল :

"ডিজাইন নিদর্শনগুলি কীভাবে ব্যবহার করবেন সে সম্পর্কে কোনও আলোচনা না করে কয়েকটি শব্দ ছাড়াই সম্পূর্ণ হবে না Design এবং / অথবা আপনার কিছুটা পারফরম্যান্স ব্যয় করতে হবে A ডিজাইনের প্যাটার্নটি কেবল তখনই প্রয়োগ করা উচিত যখন এটি স্বচ্ছলতার প্রয়োজন হয় ""

আপনি যে উদাহরণটি দেখান তাতে আসলে কিছুই হয় না (আমি মনে করি না এটি বোঝানো হয়েছিল, আমি মনে করি এটি কেবল উদাহরণ হিসাবে বোঝানো হয়েছিল)। নিজেই, এটি নাল বস্তুর প্যাটার্নের প্রয়োজন নেই। বৃহত্তর প্রোগ্রামের প্রসঙ্গে, এটি হতে পারে।

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


7
বই হচ্ছে ডিজাইনের প্যাটার্নস: এরিচ গামা, রিচার্ড হেলম, রাল্ফ জনসন এবং জন ভ্লিসাইডস দ্বারা পুনরায় ব্যবহারযোগ্য অবজেক্ট-ওরিয়েন্টড সফটওয়্যারগুলির উপাদানসমূহ
বিকাশকারীরা

4
+1 আসলে নকশার ধরণগুলির উত্স উদ্ধৃত করার জন্য।
ফারাপ

29

আমি যদি আরও জটিল কোড লিখছি, তবে আমি কি অনুসরণ করে যাচ্ছি তার সবসময় কি কোনও ডিজাইনের ধরণ থাকা উচিত?

না। নকশার নিদর্শনগুলি কেবল এটি: বস্তুর মধ্যে সম্পর্কের নিদর্শন । অন্য কথায়, যে সম্পর্কগুলি ব্যবহার এবং পুনঃব্যবহার করা হয় প্রায়শই যথেষ্ট যে কেউ বলেছিল "আরে, আমরা মনে হয় এটি অনেক কিছু করছে, আসুন এটি একটি নাম দিন" " নকশার ধরণগুলির তালিকাটি ওওপির শুরুতে একবারে নির্ধারিত হয়নি এবং তারপরে জিওএফ দিয়ে দেওয়া হয়েছিল ! এগুলি আবিষ্কার করা হয়েছিল এবং শেষ পর্যন্ত নথিভুক্ত করা হয়েছিল এবং তারপরে বইটি জনপ্রিয় করেছে।

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

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


10

নকশার নিদর্শনগুলির দুটি সুবিধা রয়েছে

  1. এগুলি অন্যান্য বিকাশকারীদের কাছে বর্ণনা করা সহজ, কারণ লোকেরা সাধারণত নিদর্শনগুলি কী তা নিয়ে একমত হন
  2. তারা আমাদের পূর্বসূরীদের দ্বারা যথেষ্ট চিন্তাভাবনার সাথে মারধর করেছে বলে তাদের শক্তি এবং দুর্বলতাগুলি ভালভাবে বোঝা যাচ্ছে।

প্রতিটি প্রোগ্রামের লক্ষ্য হওয়া উচিত

  1. এটা কাজ করে। এটি শেষ লক্ষ্য যাই হোক না কেন তা করতে হবে, বা আপনি কত ডিজাইনের ধরণ ব্যবহার করেন তা বিবেচ্য নয়। ওও ডিজাইনের নিদর্শনগুলি সমস্যাটিকে সহজেই সহজেই বিটগুলি বুঝতে পারা যায় যাতে এটি কাজ করে প্রমাণ করার পক্ষে এটি আরও সহজ।
  2. এটি পড়া সহজ। ডিজাইনের নিদর্শনগুলি এখানে দুর্দান্ত। তারা যে ওও সমস্যাগুলি সমাধান করে তা জটিল। আপনি যদি এগুলিকে "স্ট্যান্ডার্ড" উপায়ে সমাধান করেন তবে পরবর্তী বিকাশকারীর পক্ষে এটি সহজ
  3. এটি বৃদ্ধি করা সহজ। প্রায় 0 টি আধুনিক প্রোগ্রাম সমাপ্ত যেখানে প্রত্যেকে তাদের পরিকল্পনা করেছিল। প্রতিটি প্রোগ্রাম এর প্রাথমিক প্রকাশের পরে বৃদ্ধি পায়। ওও প্যাটার্নগুলি কৌতূহলজনকভাবে বৃদ্ধিতে ভাল হিসাবে পরিচিত।

যা বলা হচ্ছে, নোট করুন যে ওও ডিজাইনের ধরণগুলির প্রতিটি রেফারেন্স হ'ল "তারা কাজের ক্ষেত্রে কেবল ভাল।" তারা নিখুঁত নয়, তবে তারা খুব কার্যকরভাবে একটি কুলুঙ্গি পূরণ করে। তারা যখন কাজ করেন তখন তাদের ব্যবহার করুন, যখন তারা কাজ করবেন না তখন এড়িয়ে চলুন।

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

যখনই তারা আপনার পণ্যটিকে আরও উন্নত করে ডিজাইনের নিদর্শনগুলি ব্যবহার করুন; যখন তারা আপনার পণ্যটিকে আরও খারাপ করে তোলে সেগুলি এড়িয়ে চলুন।


2
আমি মনে করি যে শেষ বাক্যটি গা bold় বা সংক্ষিপ্ত হিসাবে শীর্ষে থাকা উচিত।
ফারাপ

5

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

কোনও ডিজাইনের ধরণ ছাড়াই একটি তুচ্ছ প্রোগ্রাম সূচিত করে:

  • আপনার প্রোগ্রামটি এতটাই অনন্য যে এর কোনও অংশই প্রোগ্রামাররা আগে যে সাধারণ সমস্যাগুলির মুখোমুখি হয়েছিল তার মতো নয়। অথবা
  • আপনার প্রোগ্রামে এই সাধারণ সমস্যা রয়েছে তবে আপনি সেগুলি আরও ভালভাবে সমাধান করেছেন যে আগে কেউ ভাবেন নি।

উভয় পরিস্থিতিতেই অত্যন্ত সম্ভাবনা, কোনও অপরাধ নেই।

এর অর্থ এই নয় যে ডিজাইনের প্যাটার্নটি আপনার নকশাটিকে চালিত করবে বা আপনার নির্বিচারে একটি sertোকানো উচিত কারণ আপনি মনে করেন এটি না দেখলে এটি খারাপ দেখাবে। ভুল ডিজাইনের ধরণটি কারও চেয়ে খারাপ নয়।

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

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

পার্থক্যটা দেখ? এটি একটি সূক্ষ্ম তবে গুরুত্বপূর্ণ পার্থক্য।


5
নকশার ধরণগুলির চেয়ে আরও অনেক সাধারণ সমস্যা (এবং তাদের সাধারণ সমাধান) রয়েছে। ডিজাইনের নিদর্শনগুলি সাধারণ ওও সমাধানগুলির একটি অনুঘটকীয় উপসেট - সমস্ত সাধারণ সমাধানের সেট নয়।
মাইকেল শ 21

1
আপনি 'তুচ্ছ-তুচ্ছ' বলতে কী বোঝাতে চেয়েছিলেন তা কি আপনি সংজ্ঞায়িত করতে পেরেছিলেন, আমি এই ধারণাটির মধ্যে ছিলাম যে 'অ-তুচ্ছ' শব্দটি ব্যক্তিগত ছিল।
ফারাপ

1
এটা বিষয়গত হয়। আমি বলতে চাইছি যে ধরণের প্রোগ্রাম আপনি কাজের সময় একটি দলে লিখবেন, চলমান ভিত্তিতে একাধিক রক্ষণাবেক্ষণকারী প্রয়োজন।
কার্ল বিলেফেল্ট

আপনি যদি ভাগ্যবান হন তবে পরে আপনার সমস্যাটি দেখার জন্য । নাল চেক, নিশ্চিত। নিরাপত্তা দুর্বলতা? অন্যান্য ছদ্মবেশী উপায় কি প্রোগ্রামটি রক্ষণাবেক্ষণের অধীনে ভেঙে যাবে? সমস্যাগুলি কি কেবল পরবর্তী প্রকৌশলী উদ্ঘাটন করবেন? আরও অনেক ইয়কি।
djechlin

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

4

ভাঙা প্রশ্ন। আমি আপনাকে ডিজাইনের প্যাটার্নের একটি অভিনব সংজ্ঞা দিচ্ছি যা জিওএফ দ্বারা প্রকাশিত প্রচুর ক্ষয়ক্ষতি পূর্বাবস্থায় নেবে: ডিজাইনের প্যাটার্নটি একটি ভাল কোডিং অনুশীলন । এটাই.

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

"ডিজাইন প্যাটার্ন" হ'ল একটি ভাঙা শব্দ, যা জিওএফ দ্বারা অসম্পূর্ণ-জনপ্রিয়, যা এটিকে শব্দ করে তোলে যে সমস্ত নিদর্শন একই স্তরের হয় বা আপনার প্রতি ক্লাসে 3 থেকে 5 এর পরামর্শ দেওয়া ডাক্তার ব্যবহার করা উচিত। যে কোনও সময় আপনি সঠিকভাবে কিছু করেন যে অন্য কেউ সঠিকভাবে করেছে, এটি একটি নকশার ধরণ । এ for(;;)হ'ল একটি সাধারণ প্যাটার্ন যা উদাহরণস্বরূপ অসীম লুপকে উপস্থাপন করতে ব্যবহৃত হয়।

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

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


2
কোন ভাষায় for(;;)মূ ?়? এটি সম্ভবত কেউ "সঠিকভাবে" করেছে তার সেরা উদাহরণ নয়।
টেলাস্টিন

1
@ টেলাস্টিন সি, সি ++, জাভা, জাভাস্ক্রিপ্ট, সি #।
djechlin

2
আমি কখনো দেখিনি যে কেউ উপর যে পছন্দ করা while(true)(অথবা while(1)প্রোগ্রামিং আমার 20+ বছরের মধ্যে মধ্যে সি, সি ++, জাভা, বা C #)।
টেলাস্টিন

1
@Telastyn stackoverflow.com/a/2611744/1339987 fwiw আমি যখন (সত্য) করা উচিত ছিল, কারণ এটি আমার আরো পাঠযোগ্য দেখায় শুরু করে।
djechlin

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

0

আপনার সর্বদা ও ও ডিজাইনের নীতিগুলি অনুসরণ করা উচিত (উদাঃ, মড্যুলারিটি, তথ্য গোপন করা, উচ্চ সংহতি ইত্যাদি)। ডিজাইনের নিদর্শনগুলি ওও ডিজাইন নীতিগুলির তুলনামূলকভাবে পরিমার্জিত কুলুঙ্গি, বিশেষত যদি আপনি KISS নীতিটি বিবেচনা করেন ।

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

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

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


0

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

এটি বলেছিল, আমার উত্তরটি হ্যাঁ না, তবে হ্যাঁ আপনি সর্বদা আপনার নিজস্ব কিছু প্যাটার্ন অনুসরণ করছেন। যেমনটি জিওএফ যথাযথভাবে বলে দেয়-

এক ব্যক্তির প্যাটার্ন হ'ল অন্য ব্যক্তির আদিম বিল্ডিং ব্লক।

দুর্দান্ত উদ্ধৃতি।


এই অফারটি কোন কিছুরই সৃষ্টি পয়েন্ট উপর সারগর্ভ বলে মনে হচ্ছে না এবং পূর্বে 7 টি উত্তর ব্যাখ্যা
মশা

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

"এই সাইটটি উত্তর পাওয়ার বিষয়ে রয়েছে It's এটি কোনও আলোচনার ফোরাম নয় ..." ( সফর )
gnat

আমি প্রশ্নের উত্তর দিয়েছি। ধন্যবাদ. এই কথোপকথন এখানেই শেষ হয়।
সৈয়দ প্রিম

@ যদিও এটি অনেক বেশি সংক্ষিপ্ততার এক হেক
djechlin

0

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

ডিজাইনের নিদর্শনগুলি ব্যবহার করে OOD নীতিগুলি প্রয়োগ করার বিষয়ে একটি নিবন্ধ এখানে রয়েছে এবং এর কোড কোডগুলিও রয়েছে (সি ++ এ)। এটি দেখায় যে কীভাবে এবং কখন ক্লিন কোড লেখার জন্য কিছু ডিজাইন নিদর্শন প্রয়োগ করতে হয়।


2
সেই নিবন্ধটি গতকালই লেখা হয়েছিল; আপনি কি আদৌ ব্লগের সাথে যুক্ত? যদি তাই হয়, না দয়া করে প্রকাশ করে অন্তর্ভুক্তি
মার্টিজন পিটারস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.