আপনি সাধারণত কোনও শ্রেণীর অঞ্চলগুলি কীভাবে বিন্যাস করেন?


17

আমি ভাবছিলাম যে কোনও শ্রেণীর অঞ্চল নির্ধারণের জন্য কোনও মানদণ্ড রয়েছে কিনা?

আমি বর্তমানে ব্যবহার

Fields
Constructor
Properties
Public Methods
Private Methods

Fieldsব্যক্তিগত সম্পত্তি Propertiesহওয়া এবং সর্বজনীন হওয়া। আমি প্রয়োজন বোধ হয় সাধারণত এর মধ্যে subregions ব্যবহার করব, বা মাঝে মাঝে নীচে অন্যান্য অঞ্চল যুক্ত করব (যেমন ইন্টারফেস বা বেসক্লাস সদস্যদের হিসাবে)।


1
আপনি কি সাধারণভাবে বিন্যাসের বিষয়ে কথা বলছেন বা "# অঞ্চল" ব্যবহার করছেন?
স্নকমডোনাল্ড

1
@ এসএনএমসিডোনাল্ড আমি #regionকোনও বিভাগ সংজ্ঞায়িত করতে ট্যাগগুলি ব্যবহার করি
রাচেল

এটি একটি সম্প্রদায়ের উইকির প্রশ্ন হওয়া উচিত নয়? আমি বিশ্বাস করি না একটি মান আছে এবং ভাষা অনুসারে উত্তর পরিবর্তন হতে পারে।
রাভলাইন

7
আমি সমস্ত #regionএস মুছে ফেলা দিয়ে শুরু করব
এড এস

3
@ এড এস +1 কারণ অঞ্চলগুলি শয়তান। তারা আপনাকে যা করার অনুমতি দেয় তা হ'ল আপনার কোড ফাইলটি খুব বড় এবং এটি পুনরুদ্ধার করা দরকার o
ম্যাটড্যাভি

উত্তর:


4

শ্রেণি-সম্পর্কিত এনাম বা মাঝে মাঝে স্ট্রাইক / খাঁটি-ডেটা ক্লাস (প্রকৃত শ্রেণির সংজ্ঞার উপরে)

--- শ্রেণি সংজ্ঞা ---

ব্যক্তিগত সদস্যরা

সিটিওআর / ডিটিআরএস যদি ভাষার ডিটিওআর থাকে

জনসাধারণের সম্পত্তি

ইউটিলিটি পদ্ধতি (ছোট স্কোপ সহ ব্যক্তিগত বা সুরক্ষিত পদ্ধতি)

শ্রেণীর কার্যকারিতা (শ্রেণির ক্ষেত্রের উপর নির্ভর করে একাধিক অঞ্চলে বিভক্ত হতে পারে)।


17

উপ অঞ্চল? আপনার শ্রেণীর কি একক দায়িত্ব আছে ? (এতে অন্তর্নিহিত ... আমার উত্তর হ'ল "গ্রুপের সম্পত্তি, নির্মাতা এবং পদ্ধতিগুলি বাদে খুব কমই কোনও অঞ্চল" ... তবে তারপরেও আমি এটিকে এতটা ব্যবহার করি না)


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

2
অঞ্চলগুলির পরিবর্তে বড় মন্তব্য ব্যানার ব্যবহার করবেন না কেন? // ----------ViewModel Properties---------- এইভাবে আপনি কোডটি দেখতে পাচ্ছেন (বা রূপরেখার সাথে এটি ভেঙে সদস্যদের দেখতে পারেন)। অঞ্চলগুলি জিনিস গোপনের জন্য । কোডটি লুকানো উচিত নয়, যতক্ষণ না এটি স্বয়ংক্রিয়ভাবে জেনারেটেড হয় বা কিছু।
কিরেলেস

1
@ রাচেল কম্পোজিশনের পক্ষে।
ম্যাটড্যাভি

10

আমি কেবলমাত্র এটি নিশ্চিত করতে চেয়েছিলাম যে আপনি "# অঞ্চল" বলতে চাইছেন এবং সাধারণভাবে শ্রেণিক বিন্যাস নয়।

আমি অবাক হই যে অঞ্চলগুলির ব্যবহার এড়াতে কেউ উল্লেখ করেনি। আমি বুঝতে পারি যে ওপি অঞ্চলগুলি নির্ধারণের বিষয়ে একটি সমীক্ষা নিতে চায়, তবে আমি একটি বিকল্প দৃষ্টিভঙ্গি বাড়াতে চাই।

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

কেন আমি অঞ্চলগুলি ঘৃণা করি? CTRL+M,Lএবং CTRL+M,Oকোড ফোল্ডিং টগল করবে। যাইহোক, এটি ভাঙ্গার সময় পুরো অঞ্চলটি আড়াল করে। আমার কেবল পদ্ধতি / বৈশিষ্ট্য / মন্তব্য ভেস্তে যেতে হবে।

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

# অঞ্চলগুলিতে আমার প্রিয় উক্তি:

না, আমি # অঞ্চলগুলি ব্যবহার করব না। এবং না, আমি জালিয়াতিগুলির সাথে পরিচয় করিয়ে দিই না। চুপ কর.

- জেফ আতউড

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


1
এখানে সংজ্ঞা-সংজ্ঞা সংকুচিত করার জন্য ম্যাক্রো রয়েছে তবে অঞ্চলগুলি প্রসারিত করতে পারেন, যদি আপনি অঞ্চলগুলি সম্পর্কে অনুপ্রাণিত লোকদের সাথে কাজ করতে আটকে থাকেন: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ৫৩২২২০ / অসাধারণ-ভিজুয়াল- স্টুডিও- ম্যাক্রোস / আপনি না থাকলে এটি ভাল কাজ করে প্রকৃত অসুস্থ লোকদের সাথে কাজ করা যারা অঞ্চলগুলিকে পদ্ধতির অভ্যন্তরে রাখে
কিরালেস

একটি খুব দরকারী ম্যাক্রো! আমি নিশ্চিত নই যে তারা কেন এটি ভিজ্যুয়াল স্টুডিওতে তৈরি করেনি, কম কোনওটি নয়, আপনাকে ধন্যবাদ।
স্নকমডোনাল্ড

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

4

ভাষা থেকে ভাষাতে এটি পরিবর্তিত হয়। যেহেতু আমি একটি ডেল্ফি কোডার, আমি ডেল্ফি স্ট্যান্ডার্ড কনভেনশন অনুসরণ করি, যা দেখতে এটির মতো দেখাচ্ছে:

type
  TMyClass = class(TBaseClass)
  private
    private fields
    private methods
  protected
    protected fields
    protected methods
    protected properties
  public
    constructor(s)
    destructor
    public methods
    public properties
  end;

আমি পড়ার এবং বুঝতে সহজ যে তথ্য সংগঠিত করার জন্য এটি একটি ভাল উপায় বলে মনে করি।


3
আমি এটি বেশ আশ্চর্যজনক মনে করি যে ব্যক্তিগত, সুরক্ষিত, প্রকাশ্য এবং প্রকাশিত উভয়ই বর্ণানুক্রমিকভাবে এবং encapsulation আকারে অর্ডার করা হয় এবং সেগুলি সমস্ত পি দিয়ে শুরু হয়!
পিটার টার্নার 21

মজাদার, আমি না। আমি সর্বদা খুঁজে পেয়েছি যে publicপ্রথমে তালিকাবদ্ধ করা আরও প্রাকৃতিক ছিল কারণ বেশিরভাগ ব্যবহারকারী কেবল স্টাফের প্রতি যত্নশীল হন public
ম্যাথিউ এম।

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

3

আমি সেগুলি নিম্নলিখিত পদ্ধতিতে রাখি tend

Public fields (usually static constants)
Constructors
Public methods
Private methods
Private fields

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


নীচে ব্যক্তিগত ক্ষেত্র স্থাপনের জন্য +1। আমি তাদের প্রয়োগ করা ইন্টারফেসের দ্বারা আমি পাবলিক পদ্ধতিগুলি গোষ্ঠীভুক্ত করি এবং যেগুলি কোনও ইন্টারফেস বাস্তবায়িত করে না সেগুলি নির্মাণকর্তা / ধ্বংসকারীদের ঠিক পরে রেখে দেয়।
সোজেয়ার্ড

2

এটা আমার জন্য রায় দাবি। পাঠযোগ্যতার জন্য যখন প্রয়োজন হয় তখন আমি অঞ্চলগুলি ব্যবহার করি।

আমি বাকী কোডটি থেকে আলাদা করে রাখতে আমার ভিজ্যুয়াল স্টুডিও রঙের স্কিমে (বর্তমানে একটি গা red় লাল) আলাদা রঙ ব্যবহার করি।


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


2

বব মার্টিনের ক্লিন কোড বইটি সম্পূর্ণ 5 তম অধ্যায়টি বিন্যাসকরণে উত্সর্গ করে। কয়েকটি মূল পয়েন্ট রয়েছে যা আমি এটিকে সুন্দরভাবে সংক্ষেপে বোধ করি।

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

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

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


1
+1 - আমি অবাক হয়েছি যে এর বেশি উল্লেখযোগ্যভাবে উল্লেখ করা হয়নি। সংঘবদ্ধতার নীতিটি আপনি কীভাবে আপনার কোডটি ছড়িয়ে দেন এবং অ্যাক্সেস মডিফায়ার দ্বারা গ্রুপিং করা হয় তার ক্ষেত্রেও বেশিরভাগ ক্ষেত্রে কার্যকর হয় not
ড্যানিয়েল বি

0

আমি বর্তমানে ক্লাসগুলি এভাবে লেআউট করি:

class types
constructors
destructor
accessors
methods
properties (where properties are present in the language)
member variables

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

public: property int SomeProperty
{
private: void set (int value) { ... }
public: int get () { ... }
}

নীচে "সদস্য" কী? আমার কাছে এটি ক্লাসের সমস্ত টুকরো জন্য ক্যাচল শব্দ।
ম্যাসন হুইলার

@ মেসন: বিভ্রান্তি এড়াতে "সদস্য ভেরিয়েবল" হওয়া উচিত।
স্কিজ

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

0

পাগল জালিয়াতির উত্তর: আমি কমপক্ষে C # এ আসলে তা করি না। ভিজ্যুয়াল স্টুডিও এবং আর # এর মধ্যে আমি যাদুতে যেকোন সদস্য বা বাস্তবায়নে নেভিগেট করতে পারি যাতে এই স্টাফটি সম্পর্কে অবলম্বন করার কোনও মানে নেই; কার্সারটি যেখানে টাইপ করা শুরু করুন।


0

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

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

  • কিছু কিছু অন্তর্নিহিত ইন্টারফেস বাস্তবায়ন (আইডিস্পোজেবল, আইকনভার্টেবল, কখনও কখনও আইনুম্যারেবল বা আইকোম্পারেবল যেমন তাদের জেনেরিক এবং অ-জেনেরিক বাস্তবায়ন প্রয়োজন)
  • এম্বেড করা পি / ইনভোক বাহ্য এবং সম্পর্কিত কাঠামো।
  • ফাইনালাইজার / ডেস্ট্রাক্টর (সাধারণত আইডিস্পোজেবলের সাথে যায়)
  • নিয়ন্ত্রণহীন মেমরি / পয়েন্টার / "অনিরাপদ" কোডটিতে হুকস।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.