আদিম বনাম শ্রেণি সাধারণ ডোমেন অবজেক্ট উপস্থাপন করতে?


14

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

উদাহরণ:

  • বয়স শ্রেণি বনাম পূর্ণসংখ্যা?
  • প্রথম নাম ক্লাস বনাম স্ট্রিং?
  • ইউনিকআইডি বনাম স্ট্রিং
  • ফোননম্বার ক্লাস বনাম স্ট্রিং বনাম লং?
  • ডোমেননেম ক্লাস বনাম স্ট্রিং?

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

আমি কখনই একটি "বয়স" শ্রেণিতে আসিনি তবে এটি যুক্তিযুক্ত হতে পারে যে এটি অবশ্যই নেতিবাচক হতে হবে (ঠিক আছে আমি জানি আপনি নেতিবাচক যুগের জন্য তর্ক করতে পারেন তবে এটি একটি ভাল উদাহরণ যে এটি প্রায় কোনও আদিম পূর্ণসংখ্যার সমতুল্য)।

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

উত্তরটি কি পরিবেশের উপর নির্ভর করে? আমি প্রাথমিকভাবে এন্টারপ্রাইজ / উচ্চ-মূল্যবান সফ্টওয়্যার নিয়ে উদ্বিগ্ন যা সম্ভবত এক দশকেরও বেশি সময় ধরে বেঁচে থাকবে এবং বজায় থাকবে।

সম্ভবত আমি এটিকে ওভারথিনিং করছি তবে আমি সত্যিই জানতে চাইছি যে কখন ক্লাস বনাম আদিম বেছে নেওয়ার বিষয়ে কারও নিয়ম আছে কিনা।


2
বয়স শ্রেণি কোনও পূর্ণসংখ্যার দ্বারা প্রতিস্থাপন করা যায় তবে এটি ভাল ধারণা নয়। যদি এটি কন্সট্রাক্টরে জন্মের তারিখ নেয় এবং তাতে getCenterAge () এবং getAgeAt (তারিখের তারিখ) পদ্ধতি থাকে তবে শ্রেণীর অর্থ হয়। তবে এটি কোনও পূর্ণসংখ্যা দ্বারা প্রতিস্থাপন করা যায় না।
কিউইরন

5
"একটি স্ট্রিং কখনও কখনও স্ট্রিং হয় না according তদনুসারে এটি মডেল করুন।" 'আদিম আবেশ' সম্পর্কে মার্ক সিমেনের একটি ভাল পোস্ট রয়েছে: ব্লগ.প্লোহ.ডাক
সেরিহি শুলিয়াপিন

4
আসলে একটি বয়সী শ্রেণি একটি অদ্ভুত উপায়ে কিছুটা বোঝায়। বয়সের সাধারণ পশ্চিমা সংজ্ঞা জন্মের সময় শূন্য এবং আপনার পরবর্তী জন্মদিনে 1 যোগ করে। পূর্ব এশীয় পদ্ধতিটি হ'ল জন্মের সময় আপনার বয়স 1 এবং পরের নতুন বছরগুলিতে 1 যোগ করা হয়। এইভাবে আপনার লোকেলের উপর নির্ভর করে আপনার বয়স আলাদাভাবে গণনা করা যায়। ই.ইউ.ইউইকিপিডিয়া.আর.উইকি people may be one or two years older in Asian reckoning than in the western age system
পিটার এম

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

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

উত্তর:


20

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

সাধারণ নির্দেশিকাটি হ'ল আপনি কোনও ডোমেন নির্দিষ্ট ভাষায় আপনার ডোমেনকে মডেলিং করতে চান।

বিবেচনা করুন: আমরা পূর্ণসংখ্যা কেন ব্যবহার করব? স্ট্রিং সহ আমরা সহজেই সহজেই পূর্ণসংখ্যার প্রতিনিধিত্ব করতে পারি। বা বাইট সহ।

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

কিছুটা প্রকৃতপক্ষে এটি "আদিম" প্রকৃতিটি আমাদের বাস্তবায়নের জন্য ভাষা নির্বাচনের একটি দুর্ঘটনা।

নম্বরগুলি, বিশেষত, সাধারণত অতিরিক্ত প্রসঙ্গে প্রয়োজন। বয়স কেবল একটি সংখ্যা নয় তবে এর রয়েছে মাত্রা (সময়), ইউনিট (বছর?), রাউন্ডিং বিধি! যুগে যুগে একসাথে যুক্ত হওয়া অর্থের সাথে বয়সের যোগটি বোঝায় না।

প্রকারভেদগুলি আলাদা করা আমাদের যাচাই করা ইমেল ঠিকানা এবং একটি যাচাইকৃত ইমেল ঠিকানার মধ্যে পার্থক্য মডেল করতে দেয় ।

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

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

পার্নাস, 1972 সালে , লিখেছিলেন

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

এক অর্থে, আমরা যে ডোমেনের নির্দিষ্ট মানের প্রকারটি প্রবর্তন করি তা হ'ল মডিউল যা ডেটার অন্তর্নিহিত উপস্থাপনাটি ব্যবহার করা উচিত সে সম্পর্কে আমাদের সিদ্ধান্তকে বিচ্ছিন্ন করে।

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

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

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


যে জিনিসগুলি কঠিন এবং পরিবর্তিত হওয়ার সম্ভাবনা রয়েছে সেগুলি লুকিয়ে রাখার (বা বিমূর্তকরণ) সম্পর্কে দুর্দান্ত পয়েন্ট।
user949300

4

আপনি বিমূর্তনের কথা ভাবছেন এবং এটি দুর্দান্ত। তবে আপনার তালিকাগুলি যে জিনিসগুলিকে আমার কাছে মনে হয় সেগুলি বেশিরভাগ বড়রকমের ব্যক্তিগত বৈশিষ্ট্য বলে মনে হয় (অবশ্যই একই জিনিস নয়)।

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

আপনার এই বিমূর্ততা একবার হয়ে গেলে আপনার অগত্যা যে কেবলমাত্র মানগুলির জন্য অতিরিক্ত বিমূর্ততা প্রয়োজন হয় না। ব্যক্তি শ্রেণি ফোন নম্বরগুলির সাথে (আদিম) স্ট্রিংয়ের তালিকা হিসাবে এবং একটি নাম (আদিম) স্ট্রিং হিসাবে একটি নাম (আদিম) তারিখ হিসাবে রাখতে পারে as

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

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


1

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

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

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

আরও তথ্যের জন্য আমি আপনাকে ডিডিডিতে (ডোমেন চালিত নকশা) মান অবজেক্টগুলি একবার দেখার পরামর্শ দিচ্ছি।


1

এটি নির্ভর করে যা আপনার যদি সেই ডেটার সাথে যুক্ত আচরণ হয় (তবে আপনার বজায় রাখা এবং / অথবা পরিবর্তন প্রয়োজন) or

সংক্ষেপে, যদি এটি কেবলমাত্র টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টান হয় যা এর সাথে যুক্ত না হয়ে থাকে তবে একটি আদিম প্রকার ব্যবহার করুন বা কিছুটা জটিল জটিল তথ্যের জন্য, একটি (মূলত আচরণহীন) ডেটা স্ট্রাকচার (যেমন একটি ক্লাস কেবলমাত্র গেটার এবং setters)।

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


1

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

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

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

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

  • আপনার কাছে বিশেষ বৈধতা যুক্তি রয়েছে যা তথ্যের ধরণের (যেমন ফোন নম্বর, ইমেল ঠিকানা) ব্যবহার করা হয় সেখানে সর্বত্র প্রয়োগ করতে হবে।
  • আপনার কাছে বিশেষ বিন্যাসের যুক্তি রয়েছে যা মানুষের পড়ার জন্য রেন্ডার করতে ব্যবহৃত হয় (যেমন আইপি 4 এবং আইপি 6 ঠিকানা)
  • আপনার কাছে ফাংশনগুলির একটি সেট রয়েছে যা সমস্ত সেই অবজেক্টের ধরণের সাথে সম্পর্কিত
  • অনুরূপ মানের ধরণের তুলনা করার জন্য আপনার কাছে বিশেষ বিধি রয়েছে

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


1

দিন শেষে, একটি অবজেক্ট মাত্র একজন সাক্ষী যে কিছু প্রক্রিয়া আসলে দৌড়ে পেয়েছিলাম

আদিম intঅর্থ হ'ল কিছু প্রক্রিয়া মেমরির 4 বাইট শূন্য করে এবং তারপরে -2,147,483,648 থেকে 2,147,483,647 এর পরিসীমাতে কিছু পূর্ণসংখ্যার উপস্থাপনের জন্য প্রয়োজনীয় বিটগুলি উল্টে ফেলে; যা বয়সের ধারণা সম্পর্কে দৃ strong় বিবৃতি নয়। তেমনি, একটি (নন-নাল) এর System.Stringঅর্থ হ'ল কিছু বাইট বরাদ্দ করা হয়েছিল এবং কিছু এনকোডিংয়ের ক্ষেত্রে ইউনিকোড অক্ষরের ক্রম উপস্থাপন করতে বিটগুলি উল্টানো হয়েছিল।

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

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

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

//hypothetical syntax
class Age = |start:date - end:date|.Years

(* ML-like syntax *)
type Age(x, y) = datediff(year, x, y)

//C#-like syntax with primary constructors and expression-bodied classes
class Age(DateTime x, DateTime y) => implicit operator int (Age a) => Abs((y - x).Years);

উদাহরণস্বরূপ, F # এর অ্যাক্টিভ প্যাটার্নস আকারে এটির জন্য একটি দুর্দান্ত বাক্য গঠন রয়েছে :

//Impossible to produce an `Age` without first computing the difference of two dates
//But, any pair (tuple) of dates is implicitly converted to an `Age` when needed.

let (|Age|) (x, y) =  (date_diff y x).Days / 365

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


† আমরা এই বিষয়গুলিকে পোস্ট শর্তাদিও বলি , তবে আমি "সাক্ষী" শব্দটি পছন্দ করি কারণ এটি প্রমাণ হিসাবে কাজ করে যে কিছু প্রক্রিয়া চলতে পারে এবং চালিয়ে যায়।


0

ক্লাস বনাম প্রাইমেটিভ ব্যবহার করে আপনি কী পান সে সম্পর্কে চিন্তাভাবনা করুন। ক্লাস ব্যবহার করে আপনি পেতে পারেন

  • বৈধতা
  • বিন্যাস
  • অন্যান্য দরকারী পদ্ধতি
  • সুরক্ষা টাইপ করুন (উদাহরণস্বরূপ PhoneNumber, একটি শ্রেণীর সাথে, আমার পক্ষে এটি স্ট্রিং বা এলোমেলো স্ট্রিং (যেমন "শসা") দেওয়া উচিত নয় যেখানে আমি ফোন নম্বর আশা করি)
  • অন্য কোন সুবিধা

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

এছাড়াও বুঝতে পারেন যে কখনও কখনও ভাল নামকরণ কেবল এটি পরিচালনা করতে পারে (অর্থাত্ একটি স্ট্রিং firstNameবনাম নামে একটি স্ট্রিং যা কেবল একটি স্ট্রিংয়ের সম্পত্তি আবৃত করে) class ক্লাসগুলি বিষয়গুলি সমাধান করার একমাত্র উপায় নয়।

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