এক ফাইলে আমার কয়টি ক্লাস করা উচিত? [বন্ধ]


274

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


8
আমি মনে করি এটি অন্যান্য ভাষার প্রয়োজনীয়তা এবং কনভেনশনগুলির ভিত্তিতে একটি যুক্তিসঙ্গত প্রশ্ন এবং উত্তরটি "<পাইথন মডিউলগুলি এবং প্যাকেজগুলি সংজ্ঞায়িত করুন> এবং এর বাইরে এটি অগ্রাধিকারের বিষয় (/ মতামত)" - এই উত্তরটি নিজেই একটি মতামত নয়
ডেভিড.লিব্রেমন

উত্তর:


333

পাইথন ফাইলটিকে "মডিউল" বলা হয় এবং এটি আপনার সফ্টওয়্যারটি সংগঠিত করার এক উপায় যাতে এটি "জ্ঞান" তৈরি করে। অন্যটি একটি ডিরেক্টরি যা "প্যাকেজ" বলে।

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

নিয়মটি হ'ল: একটি মডিউল পুনঃব্যবহারের একক

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

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

from ssReader import Reader
from theCalcs import ACalc, AnotherCalc
from theDB import Loader

def main( sourceFileName ):
    rdr= Reader( sourceFileName )
    c1= ACalc( options )
    c2= AnotherCalc( options )
    ldr= Loader( parameters )
    for myObj in rdr.readAll():
        c1.thisOp( myObj )
        c2.thatOp( myObj )
        ldr.laod( myObj )

ধারণাটি বা খণ্ডগুলিতে আপনার কোডকে সংগঠিত করার উপায় হিসাবে আমদানিটিকে ভাবুন। প্রতিটি আমদানিতে ঠিক কতগুলি শ্রেণি রয়েছে তাতে কিছু আসে যায় না। আপনি আপনার importবক্তব্যগুলির সাথে চিত্রিত করছেন সামগ্রিক সংস্থাটি কী তা গুরুত্বপূর্ণ ।


24
হাহা, উদ্ধৃতিগুলিতে আমি "জ্ঞান" পছন্দ করি।
সিডলারি

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

4
সর্বোপরি সুপারিশ সাথে চুক্তিতে হয় docs.python-guide.org/en/latest/writing/structure
মায়াঙ্ক Jaiswal

4
যে উত্তরটি আসলে প্রশ্নের উত্তর দেয় না, পঠনযোগ্যতা সম্পর্কে কী, এতে 500 টিরও বেশি লাইনের ফাইল পড়া খুব কঠিন hard
বেদমন্ত

38

যেহেতু কোনও কৃত্রিম সীমা নেই, এটি সত্যিকার অর্থে বোঝা যায় তার উপর নির্ভর করে। আপনার যদি মোটামুটি সংক্ষিপ্ত, সরল ক্লাসগুলির একটি গুচ্ছ থাকে যা যৌক্তিকভাবে একত্রে গোষ্ঠীযুক্ত হয়, তবে তাদের একগুচ্ছ 'এম। আপনার যদি বৃহত, জটিল ক্লাস বা ক্লাস থাকে যা গ্রুপ হিসাবে বোঝায় না, প্রতি ক্লাসে একটি ফাইল যান go বা এর মাঝে কিছু বাছুন। জিনিস পরিবর্তন হিসাবে রিফ্যাক্টর।


23

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


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

বিশেষত যদি আপনি জাভা থেকে পাইথন এসে থাকেন। তারা পাইথনের এক ফাইলে অনেক ক্লাস নিক্ষেপ করত)
ওয়েবকোমার

14

এটি সম্পূর্ণরূপে নির্ভর করে যে প্রকল্পটি কত বড়, ক্লাসগুলি কত দীর্ঘ, যদি সেগুলি অন্য ফাইলগুলি থেকে ব্যবহৃত হয়।

উদাহরণস্বরূপ আমি প্রায়শই ডেটা-বিমূর্তনের জন্য কয়েকটি শ্রেণির ক্লাস ব্যবহার করি - সুতরাং আমার 4 বা 5 ক্লাস থাকতে পারে যা কেবল 1 লাইন দীর্ঘ হতে পারে (class SomeData: pass )।

এগুলির প্রত্যেককে আলাদা আলাদা ফাইলে বিভক্ত করা বোকামি হবে - তবে যেহেতু এগুলি বিভিন্ন ফাইল থেকে ব্যবহৃত হতে পারে data_model.py, তাই এগুলি পৃথক ফাইলে রাখলে বোঝা যায়, তাই আমি করতে পারিfrom mypackage.data_model import SomeData, SomeSubData

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

আপনার সেগুলি গঠন করা উচিত যাতে আপনি করেন from mypackage.database.schema import MyModelনা from mypackage.email.errors import MyDatabaseModel- যদি আপনি যেখানে বুদ্ধি থেকে জিনিসগুলি আমদানি করছেন এবং ফাইলগুলি কয়েক হাজার লাইনের দীর্ঘ নয়, আপনি এটি সঠিকভাবে সংগঠিত করেছেন।

পাইথন মডিউল ডকুমেন্টেশন প্যাকেজ আয়োজন কিছু দরকারী তথ্য রয়েছে।


1
পাইথন মডিউল ডকুমেন্টেশনের ভাঙা লিঙ্ক। হয়তো বিভাগ 6.4 মডিউল.প্যাকেজ এখন উদ্দেশ্য লিঙ্ক?
cod3monk3y

9

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

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

অন্যদিকে, যখন কোনও জাভা বা .py ফাইলটি প্রায় 700 লাইনের বেশি চলেছে তখন আমি ক্রমাগত বিরক্ত হতে শুরু করি যেখানে "সেই নির্দিষ্ট বিট" কোথায় আছে তা মনে রাখার চেষ্টা করে।

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

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


6

আমি বলব যে এটিকে খুব বড় এবং জটিল না করেই যুক্তিযুক্তভাবে গ্রুপে থাকা যায় এমন অনেকগুলি ক্লাস স্থাপন করা।

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