একটি ক্লাসের জন্য কত বড়?


29

আমি দীর্ঘ সময় বিকাশকারী (আমার বয়স 49) তবে ওরিয়েন্টেড উন্নয়নের প্রতি আপত্তি জানাতে নতুন new বার্ট্র্যান্ড মেয়ারের আইফেল থেকে আমি ওও সম্পর্কে পড়ছি, তবে সত্যিই খুব কম ওও প্রোগ্রামিং করেছি।

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

সুতরাং তারা সাধারণত কিছু যায় যেমন "মডেলটির চেয়ে ভাল এটি প্রয়োগের মধ্যে যে বিষয়টিকে আরও ভালভাবে উপস্থাপন করে এবং এটি সমস্ত কার্যকর হয়"।

এখন পর্যন্ত এত ভাল, তবে, অন্যদিকে, আমি বেশ কয়েকজন লেখককে পেয়েছি যা "একটি শ্রেণীর কেবলমাত্র একটি পৃষ্ঠায় ফিট করা উচিত" এর মতো রেসিপি দেয় (আমি "কোন মনিটরের আকারের সাথে যুক্ত করব?" এখন যে আমরা চেষ্টা করি না কোড প্রিন্ট করতে!)।

উদাহরণস্বরূপ একটি PurchaseOrderশ্রেণীর কথা বিবেচনা করুন, এটির একটি সীমাবদ্ধ রাষ্ট্রীয় মেশিন রয়েছে যার আচরণ এবং সংগ্রহগুলি নিয়ন্ত্রণ করে PurchaseOrderItem, এখানে কাজের ক্ষেত্রে একটি যুক্তি হ'ল আমাদের PurchaseOrderকিছু সাধারণ পদ্ধতি ব্যবহার করা উচিত , কিছু পদ্ধতি (একটি ডেটা ক্লাসের চেয়ে কিছুটা বেশি), এবং থাকতে হবে একটি PurchaseOrderFSM"বিশেষজ্ঞ শ্রেণি" যা সীমাবদ্ধ রাষ্ট্রের মেশিনটির জন্য পরিচালনা করে PurchaseOrder

আমি বলব যে কোডিং হরর সম্পর্কিত জেফ অ্যাটউডের কোড গন্ধযুক্ত পোস্টটির "বৈশিষ্ট্য হিংসা" বা "অনুপযুক্ত ঘনিষ্ঠতা" শ্রেণিবিন্যাসের মধ্যে পড়ে । আমি এটাকে কেবল সাধারণ জ্ঞান বলি। আমি জারি করতে পারেন, অনুমোদন বা আমার বাস্তব ক্রয় আদেশ বাতিল, তারপর PurchaseOrderবর্গ থাকা উচিত issuePO, approvePOএবং cancelPOপদ্ধতি।

ও-এর কোণঠাসা হিসাবে আমি যে বয়সের নীতিগুলি বুঝতে পারি সেগুলি "সর্বাধিক সংহতি" এবং "সংযুক্তিকে ন্যূনতম করুন" দিয়ে যায় না?

এছাড়াও, এটি ক্লাসের রক্ষণাবেক্ষণের দিকে সহায়তা করে না?


17
পদ্ধতির নামে টাইপনামটি এনকোড করার কোনও কারণ নেই। অর্থাত আপনি PurchaseOrder, আপনি শুধু আপনার পদ্ধতি নাম কি হতে পারে issue, approveএবং cancelPOপ্রত্যয় শুধুমাত্র নেতিবাচক মান যোগ করে।
ড্যাশ-টম-ব্যাং

2
যতক্ষণ আপনি ব্ল্যাকহোল পদ্ধতি থেকে দূরে থাকবেন ততক্ষণ আপনার ঠিক আছে। :)
মার্ক সি সি

1
আমার বর্তমান স্ক্রিন রেজোলিউশন সহ, আমি 145 অক্ষর বড় বলব।
ডেভরব 60

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

উত্তর:


27

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


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

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

1
@ মিগুয়েলওলোসো - কোনও পিও অনুমোদনের ক্ষেত্রে সম্ভবত কোনও পিও জারি করার চেয়ে আলাদা যুক্তি রয়েছে এবং নিয়মের সাথে এটি জড়িত। যদি তা হয়, তবে দায়িত্বগুলিকে একটি POApprover এবং একটি POIssuer এ পৃথক করে দেওয়া অর্থপূর্ণ makes ধারণাটি হ'ল যদি নিয়মগুলি একটির জন্য পরিবর্তিত হয় তবে আপনি কেন অন্য ক্লাসের সাথে ক্লাস করতে চাইবেন।
ম্যাথু ফ্লায়েন

12

আমার মতে শ্রেণি আকার যতক্ষণ না ভেরিয়েবল, ফাংশন এবং পদ্ধতি প্রশ্নে শ্রেণীর সাথে প্রাসঙ্গিক হয় ততক্ষণ তা বিবেচনা করে না।


1
অন্যদিকে, বড় আকার নির্দেশ করে যে এই পদ্ধতিগুলি সম্ভবত প্রশ্নে শ্রেণীর সাথে প্রাসঙ্গিক নয়।
বিলি ওনিল

5
@ বিলি: আমি বলব যে বড় ক্লাসগুলি একটি কোড গন্ধ, তবে সেগুলি স্বয়ংক্রিয়ভাবে খারাপ হয় না।
ডেভিড থর্নলি

@ ডেভিড: এ কারণেই সেখানে "সম্ভবত" শব্দটি রয়েছে - এটি গুরুত্বপূর্ণ :)
বিলি ওনিল

আমার একমত হতে হবে ... আমি এমন একটি প্রকল্পে কাজ করছি যার নামকরণের একটি সুন্দর ধারাবাহিকতা রয়েছে এবং জিনিসগুলি ভালভাবে সাজানো আছে ... তবে আমার এখনও একটি ক্লাস রয়েছে যা 50k কোডের লাইনে রয়েছে। এটি ঠিক অনেক বড় :)
জয়

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

7

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

আপনার গাড়ির সাদৃশ্যগুলির জন্য, শ্রেণিটি carযদি খুব বড় হয় তবে এটি সম্ভবত একটি ইঙ্গিত যে এটি ক্লাস engine, শ্রেণি door, এবং শ্রেণী windshieldএস ইত্যাদিতে বিভক্ত হওয়া দরকার


8
এবং ভুলে যাবেন না যে কোনও গাড়ীর যানবাহন ইন্টারফেস প্রয়োগ করা উচিত। :-)
ক্রিস

7

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

  1. এমন কি অনেকগুলি ভেরিয়েবলগুলি একে অপরের থেকে স্বতন্ত্র? (বেশিরভাগ ক্ষেত্রে আমার ব্যক্তিগত সহনশীলতা প্রায় 10 ~ 20)
  2. কোণার কেসগুলির জন্য অনেকগুলি পদ্ধতি ডিজাইন করা আছে? (আমার ব্যক্তিগত সহনশীলতা হ'ল ... ভাল, এটি আমার অনুমানের মেজাজের উপর নির্ভর করে)

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

2 এর ক্ষেত্রে, কল্পনা করুন যে আপনি ক্লাসে কোনও গাড়ি থাকতে পারে এমন সমস্ত আচরণকে সংজ্ঞায়িত করার চেষ্টা করেছেন carতবে car::open_roof()এটি কেবল রূপান্তরযোগ্যদের জন্য উপলব্ধ থাকবে এবং car::open_rear_door()এই 2-দরজা গাড়ির ক্ষেত্রে প্রযোজ্য নয়। যদিও রূপান্তরযোগ্য এবং 2-দরজার গাড়ি সংজ্ঞা অনুসারে "গাড়ি", ক্লাসে এগুলি প্রয়োগ করা ক্লাসকে carজটিল করে তোলে। ক্লাসটি ব্যবহার করা শক্ত এবং বজায় রাখা আরও শক্ত হয়ে যায়।

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


7

300 লাইনে আপনার যা প্রয়োজন তা বলুন

দ্রষ্টব্য: থাম্বের এই নিয়ম ধরে নেওয়া হয়েছে আপনি 'ফাইলের প্রতি এক শ্রেণি' পদ্ধতির অনুসরণ করছেন যা তার নিজের ডানদিকে একটি ভাল রক্ষণাবেক্ষণ ধারণা

এটি চূড়ান্ত নিয়ম নয়, তবে যদি আমি এক শ্রেণিতে 200 লাইনের কোড দেখতে পাই তবে আমি সন্দেহজনক। 300 লাইন এবং সতর্কতা ঘন্টা চালু। যখন আমি অন্য কারও কোডটি খুলি এবং 2000 টি লাইন পাই, আমি জানি প্রথম পৃষ্ঠাটি না পড়েই সময়টি পুনরুদ্ধার করা যায়।

বেশিরভাগ ক্ষেত্রে এটি রক্ষণাবেক্ষণের দিকে নেমে আসে। যদি আপনি আপত্তিটি এত জটিল হন যে আপনি এটির আচরণটি 300 লাইনে প্রকাশ করতে পারবেন না তবে এটি অন্য কারও পক্ষে বোঝা খুব কঠিন হতে চলেছে।

আমি সন্ধান করছি যে আমি এই নিয়মটি মডেল -> ভিউমোডেল -> এ দেখছি যেখানে আমি কোনও ইউআই পৃষ্ঠার জন্য একটি 'আচরণের অবজেক্ট' তৈরি করছি সেখানে দেখুন কারণ প্রায়শই আচরণের সম্পূর্ণ সিরিজ বর্ণনা করতে 300 টিরও বেশি লাইন লাগে একটি পৃষ্ঠা তবে আমি এখনও এই প্রোগ্রামিং মডেলটিতে নতুন এবং পৃষ্ঠাগুলি / ভিউ মডেলগুলির মধ্যে ধীরে ধীরে আচরণগুলি পুনরায় ব্যবহার / পুনঃব্যবহারের ভাল উপায়গুলি খুঁজে পাচ্ছি যা ধীরে ধীরে আমার ভিউমোডেলগুলির আকার হ্রাস করছে।


আমার ব্যক্তিগত গাইডলাইনটিও প্রায় 300 লাইন। +1
মার্কি

আমি মনে করি ওপি একটি হিউরিস্টিকের সন্ধান করছে এবং এটি একটি ভাল one
নিওন্টাপির

ধন্যবাদ, গাইডলাইন হিসাবে সুনির্দিষ্ট সংখ্যা ব্যবহার করা মূল্যবান।
শেলপার্ড

6

এর পিছনে পেতে:

ও-এর কোণঠাসা হিসাবে আমি যে বয়সের নীতিগুলি বুঝতে পারি সেগুলি "সর্বাধিক সংহতি" এবং "সংযুক্তিকে ন্যূনতম করুন" দিয়ে যায় না?

আসলে, এটি প্রোগ্রামিংয়ের মূল ভিত্তি, যার মধ্যে ওও কেবল একটি দৃষ্টান্ত।

আমি এন্টোইন ডি সেন্ট-এক্সুপুরি আপনার প্রশ্নের উত্তর দিতে দেব (কারণ আমি অলস;)):

পরিপূর্ণতা অর্জন করা হয়, যখন যুক্ত করার মতো আরও কিছু থাকে না, তবে যখন কিছুই কেড়ে নিতে থাকে না।

শ্রেণিটি যত সহজ, আপনি ঠিক তত বেশি আত্মবিশ্বাসী হবেন, এটির পুরোপুরি পরীক্ষা করা তত সহজ ।


3

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

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

আমার কাছে সত্যিই আদর্শ শ্রেণি বা পদ্ধতির আকার নেই, তবে আমি আমার পদ্ধতিগুলি এবং ফাংশনগুলিকে এক স্ক্রিনে ফিট রাখতে পছন্দ করি যাতে আমি তাদের সম্পূর্ণতা এক জায়গায় দেখতে পারি। (আমি একটি 60০-লাইনের উইন্ডো খোলার জন্য ভিমকে কনফিগার করেছি, যা কোনও মুদ্রিত পৃষ্ঠায় লাইন সংখ্যার কাছাকাছি হতে পারে)) এমন জায়গাগুলি রয়েছে যেখানে এটি খুব একটা বোঝায় না, তবে এটি আমার পক্ষে কাজ করে। আমি শ্রেণি সংজ্ঞাগুলির জন্য একই নির্দেশিকাটি অনুসরণ করতে চাই এবং আমার ফাইলগুলিকে কয়েকটি "পৃষ্ঠাগুলির" নিচে রাখার চেষ্টা করি। ৩০০ এরও বেশি কিছু, 400 টি লাইন অপ্রয়োজনীয় বোধ করতে শুরু করে (বেশিরভাগ কারণে যে ক্লাসটি খুব বেশি সরাসরি দায়িত্ব গ্রহণ শুরু করে)।


+1 - থাম্বের ভাল নিয়ম তবে এটি সম্পর্কে কর্তৃত্ববাদী নয়। তবে আমি বলব যে কেবল একটি ক্লাস ভেঙে গেছে তার অর্থ এই নয় যে বিভিন্ন শ্রেণীর একে অপরের ব্যক্তিগত সদস্যদের স্পর্শ করা উচিত।
বিলি ওনিল

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

1

যখন শ্রেণির সংজ্ঞাতে কয়েকশো পদ্ধতি থাকে তবে এটি খুব বড়।


1

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


1

ক্রয়ের আদেশ জারি করা প্রায়শই একটি জটিল প্রক্রিয়া যার মধ্যে ক্রয় আদেশের চেয়ে বেশি কিছু জড়িত। এই ক্ষেত্রে, ব্যবসায়ের যুক্তিটিকে একটি পৃথক শ্রেণিতে রাখা এবং ক্রয়ের আদেশকে সহজ করে তোলা সম্ভবত সঠিক জিনিস right সাধারণভাবে, যদিও আপনি ঠিক বলেছেন - আপনি "ডেটা স্ট্রাকচার" ক্লাস চান না। উদাহরণস্বরূপ, আপনার "POManager" বিজনেস ক্লাসের ' issue()পদ্ধতি সম্ভবত পোঃ এর কল করা উচিত issue()পদ্ধতি। পিও তারপরে "ইস্যু করা" এ তার স্থিতি সেট করতে পারে এবং ইস্যু তারিখটি নোট করতে পারে, যখন পোম্যানেজার তারপরে কোনও চালান প্রত্যাশার জন্য তাদের জানাতে প্রাপ্য অ্যাকাউন্টগুলিতে একটি বিজ্ঞপ্তি পাঠাতে পারে এবং তালিকাতে অন্য একটি বিজ্ঞপ্তি পাঠাতে পারে যাতে তারা জানতে পারে যে কিছু এখানে আসছে এবং প্রত্যাশিত তারিখ

পদ্ধতি / শ্রেণির আকারের জন্য যে কেউ "বিধি" চাপায় তা সম্ভবত প্রকৃত বিশ্বে পর্যাপ্ত সময় ব্যয় করেনি। অন্যরা যেমন উল্লেখ করেছেন, এটি প্রায়শই একটি রিফ্যাক্টরিং সূচক হয় তবে কখনও কখনও (বিশেষত "ডেটা প্রসেসিং"-টাইপ ওয়ার্কে) আপনার সত্যই 500+ লাইন বিস্তৃত একক পদ্ধতিতে একটি ক্লাস লিখতে হবে। এটি ঝুলতে না।


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

0

আমি বেশ কয়েকজন লেখককে পেয়েছি যা রেসিপিগুলি দেয় যেমন "একটি ক্লাস কেবলমাত্র একটি পৃষ্ঠায় ফিট করা উচিত"

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

সুতরাং তারা সাধারণত কিছু যায় যেমন "মডেলটির চেয়ে ভাল এটি প্রয়োগের মধ্যে যে বিষয়টিকে আরও ভালভাবে উপস্থাপন করে এবং এটি সমস্ত কার্যকর হয়"।

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

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

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


0

এটির কাজটি সম্পাদন করার জন্য প্রয়োজনীয় সমস্ত যুক্তিযুক্ত পর্যাপ্ত পরিমাণে।

অল্প পরিমাণে বজায় রাখা যায় এবং একক দায়িত্বের নীতি অনুসরণ করে ।

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