বাস্তবায়নকারী ক্লাসগুলিতে ডিজাইনের প্যাটার্ন নামটি ব্যবহার করা কি কখনও ভাল ধারণা? [বন্ধ]


28

সম্প্রতি আমি প্রচুর সঙ্গে একটি পরিমিতরূপে বৃহৎ ময়াল সাপ কোডবেস জুড়ে এসেছিল MyClassAbstractFactory, MyClassManager, MyClassProxy, MyClassAdapterইত্যাদি ক্লাস।

যদিও একদিকে নামগুলো আমাকে ইশারা খোঁজ খবর নেন এবং সংশ্লিষ্ট নিদর্শন শিখতে, তারা কি ক্লাসের খুব বর্ণনামূলক ছিল না করে

এ ছাড়া, তারা শব্দের নিষিদ্ধ তালিকা মধ্যে পড়ে বলে মনে হচ্ছে প্রোগ্রামিং: variable, process_available_information, data, amount, compute: মাত্রাতিরিক্ত বিস্তৃত নাম, যা আমাদের ফাংশন সম্পর্কে কিছু বলবেন না যখন নিজেরাই ব্যবহার

সুতরাং সেখানে CommunicationManagerবা না হওয়া উচিত PortListener? নাকি সমস্যাটা আমি কিছুতেই বুঝতে পারি না ...?


যদি আপনি প্যাটার্নটি কী করে তার সাথে পরিচিত হন তবে প্যাটার্নটির নামটি একটি শালীন বিবরণ, তবে কেবল প্যাটার্নটির নামটি একটি খারাপ ধারণা, মাইক্লাসফ্যাক্টরি, একটি ফুএডাপ্টার ইত্যাদি রাখা ভাল
র‌্যাচেট ফ্রিক

ক্লাসগুলিকে কেবল "অ্যাবস্ট্রাকফ্যাক্টরি" বলা হয় না, তবে কিছু বর্ণনামূলক শব্দও সেখানে ছিল তা বোঝাতে প্রশ্নটি সম্পাদিত হয়েছিল।
ভোরাক

1
... তারা কি এটিকে গুরুত্বের সাথে একটিটির Fctoryপরিবর্তে ডাকে Factory, বা এটি কেবল একটি টাইপো?
ইজকাটা

@ ইজকাটা, হ্যাঁ, আমার খারাপ। তবে, অ্যাডাপ্টার এবং অ্যাডাপ্টার ছিল!
ভোরাক

উত্তর:


47
  • AbstractFactoryআসলে একটি নামের জন্য একটি খারাপ পছন্দ। এই কারখানাটি কী তৈরি করেছে তা জানার কোনও উপায় নেই এবং আপনি যখন সত্তা তৈরি করেন এমন কোনও সত্তার সন্ধান করবেন Animal, আপনি কখনই নামের সাথে সম্পর্কিত কারখানাটি খুঁজে পাবেন না।

  • AnimalAbstractFactoryকোনও বুদ্ধিমান পছন্দও নয়, যেহেতু বেশিরভাগ ভাষায়, এটি স্বাক্ষরের কীওয়ার্ডের সাথে অপ্রয়োজনীয়abstract

    এটি বলা হচ্ছে, মন্তব্যে হাইলাইট করা বেশ কয়েকটি ভাল কারণ রয়েছে যা আসলে নামটিতে অন্তর্ভুক্ত Abstractথাকে: কেবলমাত্র এমন বেশ কয়েকটি প্রসঙ্গ রয়েছে যেখানে আপনার সম্পূর্ণ স্বাক্ষর নেই, তবে কেবল নাম নয়, তবে AnimalFactoryএকটি ইন্টারফেসের জন্য রাখছেন বুদ্ধিমান পছন্দ হতে পারে (যদি না, দুর্ভাগ্যক্রমে, ভাষা / কাঠামোর সম্মেলনটি ইন্টারফেসের সাথে উপসর্গ করা হয় I)।

  • AnimalCreationUtilityএটি একটি বাজে পছন্দও হবে: যদি এটি কারখানা হয় তবে কোড পড়া লোকদের জন্য জিনিসগুলিকে আরও সহজ করুন এবং এটিকে একটি কারখানা বলবেন

  • abstract AnimalFactoryঠিক আছে এটা তোলে অতিরেক নেই, এবং যে এটা স্পষ্ট হয় একটি বিমূর্ত কারখানা যা প্রতিনিধিদের তার শিশুদের পশুদের সৃষ্টি।

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


2
কেন এটি বিশিষ্ট স্থানে মন্তব্য লেখার চেয়ে ভাল "এই মডিউলটিতে আমরা এমভিসি বাস্তবায়ন করি asons কারণগুলি: ... মডেলগুলি: ... ভিউ: ... নিয়ন্ত্রক: ... কাঠামোর মানচিত্র: ... এপিআই :. .. "।
ভোরাক

37
@ ভোরাক: মন্তব্যগুলির উপর নির্ভর করার চেয়ে একটি সুস্পষ্ট নাম রাখা সর্বদা ভাল।
আর্সেনী মোরজেনকো

2
@ ভোরাক শিগগিরই বা উক্ত বিশিষ্ট মন্তব্যটি আপডেট না করে (বা এমনকি এর অস্তিত্ব সম্পর্কে জেনেও) কেউ নতুন ক্লাস যুক্ত করবে। পুরো অ্যাপ্লিকেশনটিতে ধারাবাহিকভাবে ব্যবহৃত নামকরণের কনভেনশনটিকে উপেক্ষা করা অনেক বেশি শক্তিশালী।
কনরাড মোরাওস্কি

2
আপনি যখন আপনার প্রকল্প সমাধানের মাধ্যমে ব্রাউজ করছেন, আপনি কি প্রতিটি ক্লাস ফাইল এটি করে তা খোলার জন্য? না। তাই বর্ণনামূলক নাম শ্রেণি / ফাইল রাখা বরাবরই ভাল ধারণা।
ম্যাট্রিক্স

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

11

নির্দিষ্ট উদাহরণের উপর নির্ভর করে। বিল্ডার প্যাটার্নটি প্রায়শই সর্বদা আপনার শ্রেণি * বিল্ডার নামকরণের মাধ্যমে পরিবেশন করা হয়, অন্যদিকে একজন সিঙ্গলটনের সাধারণত নামকরণের প্রয়োজন হয় না।

আপনি যদি নিজের শ্রেণীর নামটিতে প্যাটার্নের নামটি না রাখেন, এবং আপনি এমনকি করেন এমনকি, আপনার ক্লাসে সাধারণত একটি মন্তব্য করা উচিত যা ব্যাখ্যা করে যে এটি একটি নির্দিষ্ট প্যাটার্ন প্রয়োগ করে।


3
এখানে ধারাবাহিকতা অত্যন্ত গুরুত্বপূর্ণ, কারণ শুধুমাত্র একবার কিছু কারখানা বলা হয় ...Factory, এটি বোঝা একটি মানসিক ঘাঁটি হয়ে ওঠে কোন শ্রেণীর নামকরণ যদি সেই সম্মেলনটি ভেঙে দেয় তবে এটি একটি কারখানা।
কনরাড মোরাওস্কি

10

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


1

আমি মনে করি এটি সত্যিই ভাল কাজ করতে পারে। উদাহরণ স্বরূপ:

// Command for retrying card entry with CVN.
public class RetryCardEntryWithCVNCommand { ... }

// Query for getting expired accounts
public class GetExpiredAccountsQuery { ... }

// Decorator for logging exception. Implies that it's an additional 
//mechanism for logging exceptions.
public class LogExceptionToDbDecorator { ... }

// Factory for creating account filters
public class AccountFilterFactory { ... }

1
এই প্রশ্ন জিজ্ঞাসা উত্তর কিভাবে? আমার পড়া প্রতি, আপনার "উদাহরণ" শুধুমাত্র বেহুদা দেন অনুলিপি বর্গ নাম এবং কোড মন্তব্য
মশা

মন্তব্যগুলি প্রতিটি শ্রেণীর উদ্দেশ্যকে ন্যায়সঙ্গত করার ক্ষেত্রে শ্রেণীর নাম কারওর কাছে দৃশ্যমান নয়। এগুলি দেখে আমি তাত্ক্ষণিকভাবে জানতে পারি যে আমার কাছে কমান্ড রয়েছে যা কিছু করে, কোয়েরি যা ডেটা ফেরত দেয়, সজ্জাকারী যা বিদ্যমান ব্যতিক্রম লগিং মেকানিজমে অতিরিক্ত আচরণ যুক্ত করে এবং একটি ফ্যাক্টরি যা অ্যাকাউন্ট ফিল্টার তৈরি করে। আমার মতে আপনি আপনার শ্রেণীর নামগুলির সাথে আরও বর্ণনামূলক, অন্যদের পক্ষে আপনার কোডটি পড়া আরও সহজ। আপনি যদি কোনও ডিজাইনের প্যাটার্ন ব্যবহার করছেন, তবে তাই বলুন - দিন শেষে ডিজাইনের প্যাটার্নগুলি রাখার পুরো উদ্দেশ্যটি অন্যদের পক্ষে আপনার কোডটি পড়া সহজ করে দেয়
কোডার্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.