একক .cs ফাইলে একাধিক ক্লাস - ভাল না খারাপ? [বন্ধ]


30

.Cs ফাইলের মধ্যে একাধিক ক্লাস তৈরি করা ভাল বা প্রতিটি .cs ফাইলের পৃথক শ্রেণি থাকা উচিত?

উদাহরণ স্বরূপ:

public class Items
{
    public class Animal
    {
    }

    public class Person
    {
    }

    public class Object
    {
    }
}

এক মিনিটের জন্য এই সত্যটি ছড়িয়ে দেওয়া যে এটি ভাল আর্কিটেকচারের একটি দুর্বল উদাহরণ, একটি কোডের গন্ধে .cs ফাইলটিতে একক শ্রেণির চেয়ে বেশি রয়েছে?

উত্তর:


30

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

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

আপনি যদি প্রশ্নটি কিছুটা আলাদাভাবে উচ্চারণ করেন এবং "প্রতিটি নামস্থান- স্তরের শ্রেণীর নিজস্ব ফাইলটি করা উচিত" সম্পর্কে জিজ্ঞাসা করলে আমার উত্তরটি "হ্যাঁ" হবে।

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

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

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


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

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

ইউপ আমাকে চিহ্নটি এত তাড়াতাড়ি হওয়ার জন্য শিখিয়েছে, অভ্যন্তরীণ ক্লাসগুলি ভাল আছে, তবে আপনাকে অভ্যন্তরীণ চশমা ব্যবহার করা উচিত কিনা তা জিজ্ঞাসা করা অন্য প্রশ্ন :)
ক্রিস্তান সম্মান

11

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

যদি এমন ক্লাস থাকে যা ঘনিষ্ঠভাবে সম্পর্কিত হয়, তবে হয় তাদের ফাইলগুলি একইভাবে নাম দিন বা একটি সাবফোল্ডারে রাখুন।

শ্রেণীর ফাইলগুলির শারীরিক পৃথকীকরণ (নোট, সব শেষ নয়) উদ্বেগের পৃথকীকরণ এবং আরও আলগা সংযোগকে সহায়তা করে।

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


3
ওহ godশ্বর - এটা ভয়ানক লাগে।

তুমি কেনো জিজ্ঞেস করছো? কেউ আপনাকে নীচে নামিয়েছে এবং আপনি কেন জিজ্ঞাসা করতে চান?

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

সম্পূর্ণ সম্মত হন। আমি এমন একটি প্রকল্পে কাজ করছি যেখানে বেশিরভাগ ফাইলের ফাইলের প্রতি কমপক্ষে 4 টি ক্লাস থাকে। এবং কারও কাছে প্রতি ফাইলটিতে 22 টি ক্লাস + 1 ইন্টারফেস রয়েছে।
L_7337

7

যদি ফাইলগুলি খুব সমন্বয়যুক্ত হয়, উদাহরণস্বরূপ যেখানে এটি বেশ কয়েকটি সংক্ষিপ্ত, একই নামযুক্ত ফাইলগুলি রাখার বিকল্প, তবে এটি একটি ভাল ধারণা হতে পারে।

উদাহরণস্বরূপ, আমি দেখতে পেলাম যে ফ্লুয়েট এনএইচবারনেট ব্যবহার করার সময় আমার সরঞ্জামগুলি সে সম্পর্কে যা বলতে পারে তা সত্ত্বেও যদি আমি একটি একক ফাইলে রাখি Entityএবং আরও সহজ করি EntityMap

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


1
বিশেষত ফ্লুয়েন্ট এনএইচবারনেটের জন্য, আমি তাদের কেবল একই ফাইলে নয়, একই শ্রেণিতেও রাখা দরকারী বলে মনে করি। আমার সমস্ত সত্তার মানচিত্র নামক একটি ক্লাস রয়েছে।
জেমস বেনঞ্জার

7

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

নিশ্চয়ই আপনি টাইপগুলিতে ঝাঁপ দেওয়ার জন্য পুনঃনির্বাক্তার মতো সরঞ্জামগুলিতে বৈশিষ্ট্যগুলি ব্যবহার করে এটি পেতে পারেন তবে ফাইল প্রতি 1 ক্লাস (ইন্টারফেস সহ) আমি কখনও দেখেছি যে কোনও কোড স্ট্যান্ডার্ডের মেরুদন্ড হ'ল কেবল নেট। জাভে নয় জাভাতে এবং সি ++ এবং প্রচুর অন্যান্য ভাষা, যেগুলির প্রায়শই রক্ষণাবেক্ষণের সমস্যা থাকে না এবং আপনি জুনিয়র ডিভসকে কোডটি বোঝা শক্ত করে খুঁজে পাবেন।

প্রায় সমস্ত কোড অপ্টিমাইজেশন সরঞ্জামগুলি আপনাকে ক্লাসগুলি একটি পৃথক ফাইলে স্থানান্তর করতে বলবে, সুতরাং আমার জন্য হ্যাঁ এটি একটি কোড গন্ধ এবং এটিকে নিরপেক্ষ করার জন্য কিছুটা আউটস্টোর প্রয়োজন :)


3

আরেকটি সমস্যা হ'ল একই ফাইলে খুব বড় এবং একই ক্লাসের সাথে - আপনি যখন ক্লাসের ঘোষণাটি সর্বদা দেখতে না পান - আপনি ভুল ক্লাসে ব্রেকপয়েন্ট স্থাপন করতে পারেন এবং ভাবছেন কেন তারা আঘাত হানে না ... ওফ! :)


-3

মূলত, আপনার যদি কেবল "প্যারেন্ট" শ্রেণীর মধ্যে থেকে এই শ্রেণিটি ব্যবহার করার প্রয়োজন হয় (সুযোগের দিক দিয়ে) তবে এটি সাধারণত নেস্টেড বর্গ হিসাবে সংজ্ঞায়িত করার জন্য প্রশংসিত হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.