[বন্ধ] এড়াতে নকশার নকশা


105

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

আমার প্রশ্ন : অন্য ডিজাইনের ধরণগুলি কি এড়ানো উচিত বা দুর্দান্ত যত্ন সহ ব্যবহার করা উচিত?


আমি কেবল ডিজাইনের অ্যান্টিপ্যাটার্নগুলির ডিভিক.
বিকাশকারী

@ ক্যাস্পারওন আপনি প্রশ্নটি কেন বন্ধ করেছেন? প্রশ্নটি বৈধ ছিল।
bleepzter

উত্তর:


148

প্যাটার্নগুলি জটিল

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

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

মনে রাখবেন যে আপনার লক্ষ্যটি সরলতা হওয়া উচিত এবং যদি আপনি আপনার কোডটিতে পরিবর্তনকে সমর্থন করার জন্য ব্যবহারিক প্রয়োজন দেখেন তবে একটি প্যাটার্ন নিয়োগ করতে হবে।

নিদর্শন উপর নীতি

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

নকশার নীতিগুলি প্রচুর পরিমাণে রয়েছে তবে জিওএফ বইয়ের প্রথম অধ্যায়ে বর্ণিত এগুলি শুরু করতে বেশ কার্যকর।

  • একটি 'ইন্টারফেস' প্রোগ্রাম, একটি 'বাস্তবায়ন' নয়। (গ্যাং অফ ফোর 1995: 18)
  • শ্রেণীর উত্তরাধিকারের উপরে 'অবজেক্ট রচনা' পছন্দ করুন। (গ্যাং অফ ফোর 1995: 20)

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

সেখান থেকে আপনি সলিড নীতিগুলি পড়তে পারেন যা রবার্ট সিসিল মার্টিন (ওরফে। আঙ্কেল বব) দ্বারা পরিচিত হয়েছিল । স্কট হ্যানসেলম্যান এই নীতিগুলি সম্পর্কে একটি পডকাস্টে আঙ্কেল ববকে সাক্ষাত্কার দিয়েছেন :

  • এস ইঙ্গিত দায়িত্বের নীতি
  • হে কলম বন্ধ নীতি
  • এল ইসকোভ সাবস্টিটিউশন নীতি
  • আমি পৃথক পৃথকীকরণ নীতি
  • ডি এপেন্ডেন্সি বিপরীত নীতি le

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


7
+1 খুব ভাল উত্তর। দেখে মনে হয় যে প্রতিটি (নবাগত) প্রোগ্রামার আজ তার ডিজাইনের ধরণগুলি জানেন বা কমপক্ষে জানেন যে তারা বিদ্যমান। তবে অনেকেই তাদের কোডের জটিলতা পরিচালনা করার জন্য একক দায়বদ্ধতার মতো কিছু অত্যাবশ্যক নীতিগুলি কখনও শুনেন নি, কেবল প্রয়োগ করতে দিন।
এলজেনসো 16'09

21

ডিজাইন প্যাটার্নসের লেখকরা যে বিষয়ে সবচেয়ে বেশি উদ্বিগ্ন ছিলেন তা হ'ল "দর্শক" প্যাটার্ন।

এটি একটি "প্রয়োজনীয় মন্দ" - তবে প্রায়শই ব্যবহৃত হয় এবং এটির প্রয়োজনীয়তা আপনার নকশায় আরও একটি মৌলিক ত্রুটি প্রকাশ করে।

"ভিজিটর" প্যাটার্নটির বিকল্প নাম হ'ল "মাল্টি-প্রেরণ", কারণ আপনি যখন ভিজিটর প্যাটার্নটি শেষ করেন তখন আপনি যখন দ্বি প্রকারের উপর ভিত্তি করে ব্যবহার করতে কোডটি নির্বাচন করতে একক প্রকারের প্রেরণ OO ভাষা ব্যবহার করতে চান (বা আরও) বিভিন্ন বস্তু।

ক্লাসিক উদাহরণটি হ'ল আপনার দুটি আকারের মধ্যে ছেদ রয়েছে, তবে একটি আরও সাধারণ ক্ষেত্রে রয়েছে যা প্রায়শই উপেক্ষা করা হয়: দুটি ভিন্ন ভিন্ন বস্তুর সমতার তুলনা করে comp

যাইহোক, প্রায়শই আপনি এই জাতীয় কিছু দিয়ে শেষ করেন:

interface IShape
{
    double intersectWith(Triangle t);
    double intersectWith(Rectangle r);
    double intersectWith(Circle c);
}

এটির সাথে সমস্যা হ'ল আপনি "ইশপে" এর সমস্ত বাস্তবায়ন একসাথে করেছেন। আপনি বোঝিয়ে গেছেন যে যখনই আপনি শ্রেণিবিন্যাসে একটি নতুন আকার যুক্ত করতে চান আপনার অন্য সমস্ত "আকার" বাস্তবায়নও পরিবর্তন করতে হবে।

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

প্রায়শই, অন্য ধারণা প্রবর্তনের মাধ্যমে আপনি যে সংমিশ্রণগুলি লিখতে চান তা হ্রাস করতে পারবেন:

interface IShape
{
    Area getArea();
}

class Area
{
    public double intersectWith(Area otherArea);
    ...
}

অবশ্যই এটি নির্ভর করে - কখনও কখনও আপনাকে সেই সমস্ত বিভিন্ন ক্ষেত্রে পরিচালনা করার জন্য কোডটি লিখতে হবে - তবে এটি স্থগিত করা এবং ভিজিটর ব্যবহারের আগে বিরতি নেওয়া এবং চিন্তাভাবনা করা ভাল। এটি পরে আপনার প্রচুর ব্যথা বাঁচাতে পারে।


2
দর্শকদের সম্পর্কে বলতে গিয়ে আঙ্কল বব এটি ব্যবহার করে "সর্বকালের" butunclebob.com/ArticleS.UncleBob.IuseVisitor
Spoike

3
@ পল হোলিংসওয়ার্থ আপনি কী এমন কোনও রেফারেন্স সরবরাহ করতে পারেন যেখানে এটিতে বলা হয়েছে যে ডিজাইন প্যাটার্নসের লেখকরা চিন্তিত (এবং কেন তারা চিন্তিত)?
m3th0dman

16

সিঙ্গলেটস - সিঙ্গেলটন এক্স ব্যবহার করে এমন একটি শ্রেণীর এর উপর নির্ভরতা রয়েছে যা দেখতে পাওয়া শক্ত এবং পরীক্ষার জন্য পৃথক করা শক্ত।

এগুলি খুব সহজেই ব্যবহার করা হয় কারণ এগুলি সুবিধাজনক এবং সহজে বোঝা যায় তবে তারা সত্যই পরীক্ষাকে জটিল করে তুলতে পারে।

দেখুন Singletons আবেগপূর্ণ মিথ্যাবাদী


1
তারা আপনাকে পরীক্ষার বিষয়টিও সহজ করতে পারে কারণ তারা আপনাকে একটি মক অবজেক্ট ইনজেক্ট করার জন্য একক পয়েন্ট দিতে পারে। ঠিক আছে ব্যালান্স ঠিক আছে।
মার্টিন ব্রাউন

1
@ মার্টিন: অবশ্যই যদি পরীক্ষার জন্য কোনও সিনগেলটন পরিবর্তন করা সম্ভব হয় (আপনি যদি স্ট্যান্ডার্ড সিঙ্গেলটন বাস্তবায়ন ব্যবহার না করেন) তবে কনস্ট্রাক্টরের পরীক্ষার বাস্তবায়ন পাশ করার চেয়ে কীভাবে সহজ?
orip

14

আমি বিশ্বাস করি টেম্পলেট পদ্ধতি পদ্ধতিটি খুব বিপজ্জনক নিদর্শন।

  • "ভুল কারণে" এটি আপনার উত্তরাধিকারের স্তরক্রমটি অনেক বার ব্যবহার করে।
  • বেস ক্লাসে প্রাসঙ্গিক কোডের সমস্ত প্রকারে লিটারে পরিণত হওয়ার প্রবণতা রয়েছে।
  • এটি আপনাকে প্রায়শই বিকাশ প্রক্রিয়া শুরুর দিকে ডিজাইনটি লক ডাউন করতে বাধ্য করে। (অনেক ক্ষেত্রে অকাল লক ডাউন)
  • পরবর্তী পর্যায়ে এটি পরিবর্তন করা আরও শক্ত এবং শক্ত হয়ে ওঠে।

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

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

হ্যাঁ সিমচা, আমি একমত ... এতক্ষণ ক্লাস ডিজাইনার এ সম্পর্কে অবগত আছেন।
পল হোলিংসওয়ার্থ

9

আমি মনে করি না যে আপনি ডিজাইন প্যাটার্নস (ডিপি) এড়ানো উচিত এবং আমি মনে করি না যে আপনার নিজের স্থাপত্য পরিকল্পনা করার সময় নিজেকে ডিপি ব্যবহার করতে বাধ্য করা উচিত should আমাদের কেবলমাত্র ডিপি ব্যবহার করা উচিত যখন সেগুলি আমাদের পরিকল্পনা থেকে প্রাকৃতিকভাবে উদ্ভূত হয়।

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

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

সুতরাং, সংক্ষেপে, আমি মনে করি না যে আমাদের ডিপিগুলি এড়ানো উচিত, যখন তারা ইতিমধ্যে আমাদের আর্কিটেকচারে রূপ নিচ্ছে তখন আমাদের তাদের আলিঙ্গন করা উচিত।


7

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

এটি বলেছে, অ্যাক্টিভ রেকর্ড সর্বদা খারাপ হয় না এবং সহজ অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত যেখানে অন্যান্য বিকল্পগুলি ওভারকিল হবে।


1
কিন্ডা সত্য, তবে বাস্তবায়নের উপর কিছুটা নির্ভরশীল।
মাইক উডহাউস

6

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

কিছু নাম রাখতে ...

কিছু অপ্রচলিত নিদর্শন রয়েছে , যেমন:

  • Interpreter
  • Flyweight

কিছুটা উপলব্ধি করা শক্ত যেমন:

  • Abstract Factory - তৈরি বস্তুর পরিবারগুলির সাথে সম্পূর্ণ বিমূর্ত কারখানার প্যাটার্নটি তেমন বাতাসের মতো মনে হয় না
  • Bridge - বিমূর্ততা এবং প্রয়োগকে সাবট্রিতে বিভক্ত করা হলেও খুব বিমূর্ত হতে পারে, তবে কিছু ক্ষেত্রে এটি খুব ব্যবহারযোগ্য প্যাটার্ন
  • Visitor - ডাবল প্রেরণ প্রক্রিয়া বোঝা সত্যিই একটি আবশ্যক

এবং এমন কিছু নিদর্শন রয়েছে যা মারাত্মক সরল দেখায় , তবে তাদের নীতি বা বাস্তবায়নের সাথে সম্পর্কিত বিভিন্ন কারণে খুব স্পষ্ট পছন্দ নয় :

  • Singleton - সত্যই সম্পূর্ণ খারাপ প্যাটার্ন নয়, কেবলমাত্র অতিমাত্রায় ব্যবহৃত (প্রায়শই সেখানে, যেখানে এটি উপযুক্ত নয়)
  • Observer - দুর্দান্ত প্যাটার্ন ... কেবল কোড পড়তে এবং ডিবাগ করা আরও শক্ত করে তোলে
  • Prototype - গতিশীলতার জন্য সংকলক চেকগুলি ব্যবসা করে (যা ভাল বা খারাপ হতে পারে ... নির্ভর করে)
  • Chain of responsibility - খুব প্রায়ই জোর করে / কৃত্রিমভাবে ডিজাইনের দিকে ঠেলা দেয় pushed

এই "অযৌক্তিক "গুলির জন্য, তাদের ব্যবহারের আগে একজনের সত্যই চিন্তা করা উচিত, কারণ কোথাও কোথাও সাধারণত আরও মার্জিত সমাধান থাকে।

"উপলব্ধি করা শক্ত" এর জন্য ... তারা যথাযথ স্থানে ব্যবহৃত হয় এবং যখন সেগুলি ভালভাবে প্রয়োগ করা হয় ... তখন তারা সত্যই দুর্দান্ত সাহায্য করে ... তবে এগুলি দুঃস্বপ্ন, যখন ভুলভাবে ব্যবহার করা হয় না।

এখন, ...


ফ্লাইওয়েট প্যাটার্নটি যে কোনও সময় যখন আপনি কোনও রিসোর্স, প্রায়শই একটি চিত্র, একাধিকবার ব্যবহার করেন তবে তা অবশ্যই আবশ্যক। এটি কোনও নিদর্শন নয়, এটি একটি সমাধান।
চেঞ্জিজ কান্দেমির

5

আমি আশা করি এর জন্য আমি খুব বেশি মারধর করব না। ক্রিস্টার এরিকসন তার রিয়েল টাইম সংঘর্ষ শনাক্তকরণ ব্লগে নকশার ধরণগুলির বিষয়ে দুটি নিবন্ধ ( এক , দুটি ) লিখেছিলেন । তার স্বরটি বরং কঠোর এবং সম্ভবত কিছুটা উস্কানিমূলক, কিন্তু লোকটি তার জিনিসগুলি জানে, তাই আমি এটিকে পাগলের মতো ছিন্নমূল বলে উড়িয়ে দেব না।


আকর্ষণীয় পড়া। লিঙ্কগুলির জন্য ধন্যবাদ!
বোম্বে

3
মরনস খারাপ কোড উত্পাদন করে। নিদর্শনযুক্ত মরনগুলি মরনগুলির চেয়ে খারাপ কোড তৈরি করে যা কখনও নিদর্শন দেখেনি? আমি মনে করি না তারা করে। স্মার্ট লোকের জন্য, নিদর্শনগুলি একটি সুপরিচিত শব্দভাণ্ডার সরবরাহ করে, যা ধারণাগুলির আদান-প্রদানকে সহজ করে। সমাধান: নিদর্শনগুলি শিখুন এবং কেবল স্মার্ট প্রোগ্রামারদের সাথে ডিল করুন।
মার্টিন ব্রাউন

আমি মনে করি না যে সত্য মুরনের পক্ষে আরও খারাপ কোড তৈরি করা সম্ভব - তারা যে সরঞ্জামটি ব্যবহার করছে তা বিবেচনা না করে
1800 তথ্য

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

5

কেউ কেউ বলে যে পরিষেবা লোকেটার একটি বিরোধী নিদর্শন।


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

2

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


4
আমি আপনার উত্তরে সমস্ত কিছুই বুঝতে পেরেছি "এ"
1800 তথ্য

আপনি যে স্বয়ংক্রিয়তা নির্ভরতা বিশ্লেষণ করছেন তার সাথে আপনাকে প্রসারিত বা লিঙ্ক করার প্রয়োজন হতে পারে। এছাড়াও .NET প্রতিনিধি / ইভেন্টগুলি পর্যবেক্ষক প্যাটার্নের পরিবর্তে ব্যবহৃত হয়।
Spoike

3
@Spoike: প্রতিনিধিদের / ঘটনা পর্যবেক্ষক প্যাটার্ন একটি বাস্তবায়ন হয়
orip

1
পর্যবেক্ষকের বিরুদ্ধে আমার ব্যক্তিগত প্রবণতা হ'ল এটি আবর্জনা সংগ্রহ করা ভাষাগুলিতে মেমরি ফাঁস তৈরি করতে পারে। আপনি যখন কোনও বস্তুটি শেষ করেছেন তখন আপনাকে মনে রাখতে হবে যে জিনিসটি পরিষ্কার হবে না।
মার্টিন ব্রাউন

@ অরিপ: হ্যাঁ, এজন্য আপনি প্রতিনিধি / ইভেন্টগুলি ব্যবহার করেন। ;)
স্পোইক

2

স্পোকের পোস্টের পরিপূরক, রিফ্যাক্টরিং টু প্যাটার্নস ভাল পড়া।


আমি আসলে ইন্টারনেটে বইয়ের ক্যাটালগের সাথে লিঙ্ক করেছি। :)
স্পোকাইক

উহু! আমি এটিকে ঘুরিয়ে নেওয়ার মত মাথা ঘামাইনি। আসলে, প্রশ্ন শেষ করার পরে এই বইটি আমার মনে আসল, এবং তারপরে আমি আপনার উত্তরটি দেখেছি। আমি এটি পোস্ট করতে নিজেকে থামাতে পারিনি। :)
আদিল আনসারী

0

Iterator এড়ানোর জন্য আরও একটি GoF প্যাটার্ন বা কমপক্ষে বিকল্পের কোনওটি উপলভ্য না হলে কেবল এটি ব্যবহার করা।

বিকল্পগুলি হ'ল:

  1. প্রতিটি লুপ জন্য এই নির্মাণটি বেশিরভাগ মূলধারার ভাষায় উপস্থিত এবং বেশিরভাগ ক্ষেত্রে পুনরাবৃত্তিকে এড়াতে ব্যবহৃত হতে পারে।

  2. নির্বাচকরা LIN লা লিনকুই বা jQuery। যখন প্রতিটি জন্য উপযুক্ত না হয় সেগুলি ব্যবহার করা উচিত কারণ ধারক থেকে সমস্ত বস্তুর প্রক্রিয়া করা উচিত নয়। পুনরুক্তিকারীদের বিপরীতে, নির্বাচকরা কোন জায়গায় কী ধরনের অবজেক্টগুলি প্রক্রিয়াকরণ করতে হবে তা এক জায়গায় প্রকাশের অনুমতি দেয়।


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

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

Iteilers একটি দুর্দান্ত নিদর্শন। অ্যান্টি-প্যাটার্নটি একটি পুনরাবৃত্তকারী ছাড়াই আইইনিউমারেবল / আইমনিউরেটর প্রয়োগ করবে । আমি বিশ্বাস করি যে yieldপুনরুক্তির মাধ্যমে লিনকিউ সম্ভব হয়েছিল । C # 3.0 এ এরিক হোয়াইটের কিছু দারুণ আলোচনা হয়েছে: ব্লগস.এমএসএনএন / বি / অ্যারিকোয়াইট / অর্চিভ / ২০০6/০৯/২০১৮/২ । এছাড়াও, জেরেমি লাইকনেস 'পুনরাবৃত্তকারীদের সাথে কর্টিনগুলিতে আলোচনা দেখুন: উইনটেলটেকট / সিএস / ব্লগস / জ্লিকনেস / অর্কিভ / ২০০০ / ২৩ / ২৩ /

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

ফিভিউ, বিকল্প, লিনিক্যু মত এফ # সিন্ট্যাক্সটি হ'ল। List.map (মজা x -> x.Value) xs`, যা তালিকা বোধগম্যতার প্রায় দীর্ঘ।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.