অবজেক্ট-ওরিয়েন্টেড ক্লাস ডিজাইন


12

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

  1. স্থির বনাম উদাহরণ পদ্ধতি
  2. কোনও পরামিতিবিহীন পদ্ধতি বা প্যারামিটার এবং রিটার্ন মান সহ বনাম পদ্ধতি বনাম
  3. ওভারল্যাপিং বনাম স্বতন্ত্র পদ্ধতি কার্যকারিতা
  4. বেসরকারী বনাম পাবলিক পদ্ধতি

উদাহরণ 1:

এই বাস্তবায়নটি কোনও ওভারল্যাপিং কার্যকারিতা ছাড়াই কোনও রিটার্ন মান বা প্যারামিটার সহ উদাহরণ পদ্ধতি ব্যবহার করে এবং সমস্ত পদ্ধতি জনসাধারণের কাছে

XmlReader reader = new XmlReader(url);
reader.openUrl();
reader.readXml();
Document result = reader.getDocument();

উদাহরণ 2:

এই বাস্তবায়নটি ওভারল্যাপিং কার্যকারিতা এবং ব্যক্তিগত পদ্ধতিগুলির সাথে রিটার্ন মান এবং পরামিতি সহ স্থিত পদ্ধতি ব্যবহার করে

Document result = XmlReader.readXml(url); 

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

উদাহরণস্বরূপ দুটি, কেবল একটি পদ্ধতি পাবলিক, বাকীগুলি ব্যক্তিগত স্ট্যাটিক, যা তাদেরকে ইউনিট পরীক্ষার পক্ষে শক্ত করে তোলে। পদ্ধতিগুলি সেই রিডএক্সএমএমএল () কলকে ওপেনআরএল () কল করে over কোনও ক্ষেত্র নেই, সমস্ত ডেটা পদ্ধতিতে পরামিতি হিসাবে পাস করা হয় এবং ফলাফল অবিলম্বে ফিরে আসে returned

সঠিক অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং করার জন্য আমার কোন নীতিগুলি অনুসরণ করা উচিত?


3
আপনি মাল্টি-থ্রেডিং করার সময় স্থির জিনিসগুলি খারাপ। অন্য দিন, আমার কাছে একটি স্ট্যাটিক এক্সএমএল রাইটার ছিল, যেমন এক্সএমএল রাইটার.ওরাইট (ডেটা, ফাইলআরল)। তবে, যেহেতু এটি একটি প্রাইভেট স্ট্যাটিক ফাইল স্ট্রিম ছিল, একই সময়ে একাধিক থ্রেড থেকে এই শ্রেণিটি ব্যবহার করে, দ্বিতীয় থ্রেডটি প্রথম থ্রেড ফাইল স্ট্রিমকে ওভাররাইট করে দেয়, এটি একটি ত্রুটি সৃষ্টি করেছিল যা খুঁজে পাওয়া খুব কঠিন। স্থির সদস্যদের + স্ট্যাটিক ক্লাস হ'ল মাল্টি-থ্রেডিং বিপর্যয়ের একটি রেসিপি।
আলেকজান্ডারসন

1
@Paxinum। আপনি যে সমস্যাটি বর্ণনা করেছেন তা হ'ল রাষ্ট্রীয় সমস্যা, "স্ট্যাটিক" সমস্যা নয়। আপনি যদি অ স্থির সদস্যদের সাথে একটি সিঙ্গলটন ব্যবহার করেন তবে মাল্টি-থ্রেডিংয়ের সাথে আপনার একই সমস্যা হবে।
মাইকে 30

2
@ পিয়ার আলেকজান্দারসন স্থির পদ্ধতিগুলি সমঝোতার ক্ষেত্রে খারাপ নয়। স্থির অবস্থা খারাপ। এই কারণেই ক্রিয়ামূলক প্রোগ্রামিং, সমস্ত পদ্ধতি স্থিতিশীল, সমবর্তী পরিস্থিতিতে খুব ভাল কাজ করে।
ইউলি বোনার

উত্তর:


11

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

উদাহরণ 1 অযথা ব্যবহার করা শক্ত। কি সম্পর্কে

XmlReader reader = new XmlReader(url);
Document result = reader.getDocument();

যা আপনার স্ট্যাটিক পদ্ধতির চেয়ে ব্যবহার করা আরও কঠিন নয়।

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

সুতরাং IMOO সঠিক OO ডিজাইনটি কেবলমাত্র দুটি জিনিসকে জনসাধারণের কাছে করা (যদি না কোনও কারণে আপনাকে সত্যিকারের মধ্যবর্তী পদক্ষেপের প্রয়োজন হয় তবে)। স্ট্যাটিক মন্দ।


-1। আপনি আসলে XMLReader কে একটি মক অবজেক্টের সাথে প্রতিস্থাপন করতে পারেন। ব্রাথ ডেড ওপেন সোর্স মোইক ফ্রেমওয়ার্ক নয়, তবে ভাল শিল্প গ্রেডের সাথে আপনি পারেন;) প্রতি বিকাশকারী কয়েকশ 'মার্কিন ডলার ব্যয় করে তবে আপনি প্রকাশিত এপিআই-তে সিলযুক্ত কার্যকারিতা পরীক্ষা করতে আশ্চর্য কাজ করে।
টমটম

2
টমটমের বিক্রয় পিচটিতে নাম না দেওয়ার জন্য +1। আমি যখন একটি লাইনার চাই তখন আমি Document result = new XmlReader(url).getDocument();কেন এমন কিছু লিখব কেন? যাতে আমি এটিকে আপগ্রেড করতে পারি Document result = whateverReader.getDocument();এবং whateverReaderঅন্য কোনও কিছু দ্বারা আমার হাতে তুলে দিয়েছি।
candied_orange

6

এই জিনিসটি এখানে - সঠিক উত্তর নেই, এবং "যথাযথ অবজেক্ট ওরিয়েন্টেড ডিজাইন" এর কোনও নিখুঁত সংজ্ঞা নেই (কিছু লোক আপনাকে একটি প্রস্তাব দেবে, তবে তারা নিষ্পাপ ... তাদের সময় দিন)।

এটি সব আপনার লক্ষ্যগুলিতে নেমে আসে।

আপনি একজন শিল্পী, এবং কাগজটি ফাঁকা। আপনি একটি সূক্ষ্ম, সূক্ষ্ম পেন্সিলযুক্ত কালো এবং সাদা পাশের প্রতিকৃতি বা মেশানো নিওনের বিশাল গ্যাশ সহ একটি বিমূর্ত চিত্র আঁকতে পারেন। বা এর মধ্যে কিছু।

তাহলে আপনি যে সমস্যার সমাধান করছেন তার জন্য কী সঠিক মনে হচ্ছে? এক্সএমএল নিয়ে কাজ করার জন্য আপনার ক্লাসগুলি ব্যবহার করা দরকার এমন লোকদের অভিযোগ কি? তাদের কাজ সম্পর্কে কি কঠিন? আপনার লাইব্রেরিতে কলগুলি ঘিরে তারা কী ধরনের কোড লেখার চেষ্টা করছেন এবং কীভাবে আপনি সেই প্রবাহকে তাদের পক্ষে আরও ভালভাবে সহায়তা করতে পারেন?

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

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

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

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


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

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

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

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

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

3

দ্বিতীয়টি বিকল্প হিসাবে এটি ব্যবহার করা সহজ (যদিও এটি কেবল আপনি) এমনকি অনেক সহজ।

ইউনিট টেস্টিংয়ের জন্য আমি ইন্টারফেসটি কেবল ইন্টার্নালই না পরীক্ষা করে দেখি যদি আপনি সত্যিকার অর্থে ইন্টার্নালগুলি ব্যক্তিগত থেকে সুরক্ষিত স্থানান্তর করতে চান তবে।


2
ইউনিট পরীক্ষার উদ্দেশ্যে যদি আপনার পরীক্ষার কেসগুলি একই প্যাকেজে থাকে তবে আপনি আপনার পদ্ধতিগুলি প্যাকেজটিকে ব্যক্তিগত (ডিফল্ট) করতে পারেন।

ভাল কথা - এটি আরও ভাল।

3

1. স্ট্যাটিক বনাম উদাহরণ

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

এবং আমি যে সবচেয়ে খারাপ অনুশীলনটি ভাবতে পারি তা হ'ল গ্লোবাল স্টেট, আপনার উল্লেখ করা স্ট্যাটিকগুলি এবং প্রত্যেকের প্রিয় সিঙ্গলটন সহ including Misko Hevery এর থেকে কিছু উদ্ধৃতাংশ বিষয়ে সর্বোত্তম নিবন্ধ

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

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

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

এটি কীভাবে ফুটে উঠেছে তা হ'ল আপনার কোনওরকম সঞ্চিত স্টেট রয়েছে এমন স্থির রেফারেন্স সরবরাহ করা উচিত নয়। আমি পরিসংখ্যানগুলির ব্যবহারের একমাত্র স্থান হ'ল গণিত ধ্রুবকগুলির জন্য এবং এটির সম্পর্কে আমারও বিভ্রান্তি রয়েছে।

২. ইনপুট পরামিতি সহ পদ্ধতিগুলি এবং মানগুলির সাথে বনাম কোনও কিছুই নয় methods

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

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

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

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

৩. ওভারল্যাপিং বনাম ডিস্টিন্ট

আমি প্রশ্নটি বুঝতে পারি না। 2 ওভারল্যাপিং পদ্ধতিতে কী সুবিধা হবে?

৪. বেসরকারী বনাম পাবলিক

আপনার প্রকাশের দরকার নেই এমন কিছু প্রকাশ করবেন না। তবে, আমি ব্যক্তিগত কোনও বড় ভক্ত নই। আমি সি # বিকাশকারী নই, তবে অ্যাকশনস্ক্রিপ্ট বিকাশকারী। আমি অ্যাডোব এর ফ্লেক্স ফ্রেমওয়ার্ক কোডে অনেক সময় ব্যয় করেছি, যা ২০০ circ এর সার্কায় লেখা হয়েছিল। এবং তারা কী প্রাইভেট বানাবেন তার কিছু খারাপ পছন্দ করেছেন, যা তাদের ক্লাসগুলি প্রসারিত করার চেষ্টা করার মতো দুঃস্বপ্নের মতো করে তোলে।

সুতরাং আপনি যদি না ভাবেন যে আপনি অ্যাডোব বিকাশকারীদের 2007 এর চেয়ে আরও ভাল স্থপতি (আপনার প্রশ্ন থেকে, আমি বলতে চাই যে আপনি দাবি করার সুযোগ পাওয়ার আগে আপনার আরও কয়েক বছর রয়েছে), আপনি সম্ভবত সুরক্ষিতকে ডিফল্ট করতে চান ।


আপনার কোড উদাহরণগুলির সাথে কিছু সমস্যা রয়েছে যার অর্থ তারা ভাল-স্থাপত্যবিদ নয়, সুতরাং এ বা বি বাছাই করা সম্ভব নয়

একটি জিনিসের জন্য, আপনার সম্ভবত আপনার অবজেক্ট তৈরির ব্যবহার থেকে এটি আলাদা করা উচিত । সুতরাং new XMLReader()যেখানে এটি ব্যবহৃত হয় তার পাশে আপনার সাধারণত আপনার অধিকার থাকে না ।

এছাড়াও, @ ডিজেএনএ যেমন বলেছে, আপনার এক্সএমএল রিডার ব্যবহারে ব্যবহৃত পদ্ধতিগুলি আপনার নিজের করা উচিত, সুতরাং আপনার এপিআই (উদাহরণস্বরূপ) এটিকে সহজতর করা যেতে পারে:

_document Document = reader.read(info);

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

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


2

ক্লায়েন্টের দৃষ্টিভঙ্গিতে মনোনিবেশ করুন।

IReader reader = new XmlReader.readXml(url);  // or injection, or factory or ...
Document document = reader.read();

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

আপনার উন্মুক্ত / পঠিত প্রতিমাগুলির মধ্যে প্রধান সমস্যাটি হ'ল ক্লায়েন্টকে পদ্ধতিটি কল করার ক্রমটি জানতে হবে, যখন সে কেবল সাধারণ কাজটি করতে চায়। এখানে স্পষ্ট, তবে বৃহত্তর শ্রেণিতে এটি সুস্পষ্ট থেকে অনেক দূরে।

পরীক্ষার নীতি পদ্ধতিটি () পড়ুন। অভ্যন্তরীণ পদ্ধতিগুলি টেস্ট প্রোগ্রামগুলিকে সর্বজনীন বা বেসরকারী না করে এবং একই প্যাকেজে পরীক্ষাগুলি স্থাপনের মাধ্যমে দৃশ্যমান করা যায় - পরীক্ষাগুলি এখনও প্রকাশিত কোড থেকে আলাদা রাখা যায়।


যদি ডিফল্ট দৃশ্যমানতা সহ পদ্ধতিগুলি কি এখনও দৃশ্যমান হয়, যদি পরীক্ষা স্যুটটি কোনও অন্য প্রকল্পে থাকে?
সিয়ামি

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

2

স্থির বনাম উদাহরণ পদ্ধতি

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

কোনও পরামিতিবিহীন পদ্ধতি বা প্যারামিটার এবং রিটার্ন মান সহ বনাম পদ্ধতি বনাম

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

ওভারল্যাপিং বনাম স্বতন্ত্র পদ্ধতি কার্যকারিতা

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

বেসরকারী বনাম পাবলিক পদ্ধতি

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


1

আমি আপনার প্রশ্নের উত্তর দেব না, তবে আমি মনে করি যে আপনি ব্যবহার করেছেন এমন শর্তাদির দ্বারা একটি সমস্যা তৈরি হয়েছে। যেমন

XmlReader.read => twice "read"

আমি মনে করি আপনার একটি এক্সএমএল প্রয়োজন তাই আমি একটি বস্তু এক্সএমএল তৈরি করব যা একটি পাঠ্য প্রকার থেকে তৈরি করা যেতে পারে (আমি জাভাতে সি # জানি না ... এটি স্ট্রিং বলে) যেমন

class XML {
    XML(String text) { [...] }
}

আপনি এটি পরীক্ষা করতে পারেন এবং এটি পরিষ্কার। তারপরে আপনার যদি কারখানার প্রয়োজন হয় তবে আপনি একটি কারখানার পদ্ধতি যুক্ত করতে পারেন (এবং এটি আপনার দ্বিতীয় উদাহরণের মতো স্থির হতে পারে)। যেমন

class XML {
    XML(String text) { [...] }

    static XML fromUrl(url) { [...] }

}

0

আপনি কিছু সহজ নিয়ম অনুসরণ করতে পারেন। আপনি যদি নিয়মের কারণগুলি বুঝতে পারেন তবে এটি সহায়তা করে।

স্থির বনাম উদাহরণ পদ্ধতি

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

কোনও পরামিতিবিহীন পদ্ধতি বা প্যারামিটার এবং রিটার্ন মান সহ বনাম পদ্ধতি বনাম

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

ওভারল্যাপিং বনাম স্বতন্ত্র পদ্ধতি কার্যকারিতা

আমি মনে করি না এটি একটি বিষয়। অন্যান্য পদ্ধতি বলার পদ্ধতিগুলি যদি এই কাজগুলিকে আরও স্বতন্ত্রভাবে কার্যকরী অংশগুলিতে ফেলে দেয় তবে তা ঠিক।

বেসরকারী বনাম পাবলিক পদ্ধতি

আপনার সর্বজনীন হওয়ার প্রয়োজন না থাকলে সবকিছু ব্যক্তিগত করুন। আপনার শ্রেণীর ব্যবহারকারী শব্দ ছাড়াই করতে পারেন, তিনি কেবল তার জন্য গুরুত্বপূর্ণ তা দেখতে চান।

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