ওও ল্যাঙ্গুয়েজগুলি কখনও কখনও কোনও মেশিনের সাথে সরাসরি ইন্টারফেস করতে নিম্ন-স্তরের ভাষার জায়গায় ব্যবহার করা যেতে পারে। সি ++ অবশ্যই, তবে সি # এর জন্যও অ্যাডাপ্টার এবং এগুলি রয়েছে। যান্ত্রিক অংশগুলি নিয়ন্ত্রণ করতে কোডের লিখন কোড এবং মেমরির উপর মিনিট নিয়ন্ত্রণ থাকলেও যথাসম্ভব নিম্ন-স্তরের কাছাকাছি রাখা ভাল। তবে যদি এই প্রশ্নটি লাইন অফ বিজনেস, ওয়েব অ্যাপ্লিকেশন, আইওটি, ওয়েব পরিষেবাদি এবং বেশিরভাগ ভর ব্যবহৃত অ্যাপ্লিকেশনগুলির মতো বর্তমান অবজেক্ট-ওরিয়েন্টড সফ্টওয়্যার সম্পর্কিত হয় তবে ...
উত্তর, প্রযোজ্য হলে
পাঠকরা কোনও পরিষেবা-ওরিয়েন্টেড আর্কিটেকচার (এসওএ) দিয়ে কাজ করার চেষ্টা করতে পারেন। এটি হ'ল ডিডিডি, এন-লেয়ার্ড, এন-টাইার্ড, হেক্সাগোনাল, যাই হোক না কেন। আমি বড় ব্যবসায়ের অ্যাপ্লিকেশন দক্ষতার সাথে "ট্র্যাডিশনাল" ওও (অ্যাক্টিভ-রেকর্ড বা সমৃদ্ধ-মডেলস) ব্যবহার করতে দেখিনি কারণ এটি গত দশকে 70 এবং 80 এর দশকে খুব বেশি বর্ণিত হয়েছিল। (দ্রষ্টব্য 1 দেখুন)
দোষটি ওপি-তে হয় না, তবে প্রশ্নটি নিয়ে বেশ কয়েকটি সমস্যা রয়েছে।
আপনি যে উদাহরণ সরবরাহ করেছেন তা কেবল পলিমারফিজম প্রদর্শনের জন্য, এটি উত্পাদন কোড নয়। কখনও কখনও ঠিক এর মতো উদাহরণগুলি আক্ষরিক অর্থে নেওয়া হয়।
এফপি এবং এসওএতে ডেটা বিজনেস লজিক থেকে পৃথক করা হয়। অর্থাৎ ডেটা এবং লজিক একসাথে যায় না। লজিক পরিষেবাগুলিতে চলে যায় এবং ডেটা (ডোমেন মডেল) এর বহুবিধ আচরণ হয় না (নোট 2 দেখুন)।
পরিষেবাদি এবং কার্যাদি বহুবিধ হতে পারে ym এফপিতে, আপনি ঘন ঘন মানগুলির পরিবর্তে অন্যান্য কার্যগুলিতে পরামিতি হিসাবে ফাংশনগুলি পাস করেন। আপনি কলযোগ্য বা ফানকের মতো প্রকারের ওও ভাষায়ও একই কাজ করতে পারেন তবে তা প্রচণ্ড চলমান হয় না (দেখুন দ্রষ্টব্য 3)। এফপি এবং এসওএতে, আপনার মডেলগুলি বহুবর্ষজীবী নয়, কেবল আপনার পরিষেবা / ক্রিয়াকলাপ। (নোট 4 দেখুন)
সেই উদাহরণটিতে হার্ডকোডিংয়ের একটি খারাপ মামলা রয়েছে। আমি কেবল লাল রঙের স্ট্রিং "কুকুরের ছাল" সম্পর্কে কথা বলছি না। আমি নিজেরাই ক্যাটমোডেল এবং ডগমোডেলের কথা বলছি। আপনি যখন একটি মেষ যুক্ত করতে চান তখন কি হবে? আপনার কোডে intoুকে নতুন কোড তৈরি করতে হবে? কেন? প্রোডাকশন কোডে, আমি বরং এটির বৈশিষ্ট্যগুলির সাথে একটি অ্যানিমাল মডেল দেখতে চাই। সবচেয়ে খারাপভাবে, একটি এম্ফিবিয়ান মডেল এবং একটি ফাউলমডেল যদি তাদের সম্পত্তি এবং পরিচালন এত আলাদা হয় are
আমি একটি বর্তমান "ওও" ভাষায় এটি দেখতে প্রত্যাশা করব:
public class Animal
{
public int AnimalID { get; set; }
public int LegCount { get; set; }
public string Name { get; set; }
public string WhatISay { get; set; }
}
public class AnimalService : IManageAnimals
{
private IPersistAnimals _animalRepo;
public AnimalService(IPersistAnimals animalRepo) { _animalRepo = animalRepo; }
public List<Animal> GetAnimals() => _animalRepo.GetAnimals();
public string WhatDoISay(Animal animal)
{
if (!string.IsNullOrWhiteSpace(animal.WhatISay))
return animal.WhatISay;
return _animalRepo.GetAnimalNoise(animal.AnimalID);
}
}
আপনি ওওতে ক্লাস থেকে ফাংশনাল প্রোগ্রামিংয়ে কীভাবে চলে যান? অন্যরা যেমন বলেছে; আপনি পারেন, কিন্তু আপনি আসলে না। উপরের বিষয়টি হ'ল এটি প্রমাণ করা যে আপনি জাভা এবং সি # করার সময় এমনকি ক্লাসগুলি (বিশ্বের প্রচলিত অর্থে) ব্যবহার করা উচিত নয়। একবার আপনি কোনও পরিষেবা-ওরিয়েন্টেড আর্কিটেকচারে (ডিডিডি, স্তরযুক্ত, স্তরযুক্ত, ষড়ভুজীয়, যাই হোক না কেন) কোড লেখার পরে আপনি কার্যকারিতার এক ধাপ কাছাকাছি থাকবেন কারণ আপনি আপনার লজিকাল ফাংশন (পরিষেবাদি) থেকে আপনার ডেটা (ডোমেন মডেলগুলি) আলাদা করেন।
ওও ভাষা এফপির এক ধাপ কাছাকাছি
আপনি এটিকে আরও খানিকটা এগিয়ে নিয়ে যেতে পারেন এবং আপনার এসওএ পরিষেবাদিগুলিকে দুটি প্রকারে বিভক্ত করতে পারেন।
Alচ্ছিক শ্রেণীর ধরণ 1 : এন্ট্রি পয়েন্টগুলির জন্য সাধারণ ইন্টারফেস-প্রয়োগকারী পরিষেবাদি। এগুলি হবে "অপরিষ্কার" এন্ট্রি-পয়েন্টস যা "খাঁটি" বা "অপবিত্র" অন্যান্য কার্যকারিতাতে কল করতে পারে। এটি কোনও RESTful API থেকে আপনার এন্ট্রি পয়েন্ট হতে পারে।
Alচ্ছিক শ্রেণির ধরণ 2 : খাঁটি ব্যবসায় যুক্তিযুক্ত পরিষেবা। এগুলি স্ট্যাটিক ক্লাস যা "খাঁটি" কার্যকারিতা রয়েছে। এফপিতে, "খাঁটি" অর্থ কোনও পার্শ্ব প্রতিক্রিয়া নেই। এটি স্পষ্টভাবে কোথাও রাষ্ট্র বা দৃistence়তা সেট করে না। (নোট 5 দেখুন)
সুতরাং আপনি যখন কোনও পরিষেবা-ওরিয়েন্টেড আর্কিটেকচারে অবজেক্ট-ওরিয়েন্টেড ল্যাঙ্গুয়েজে ক্লাসগুলির কথা ভাবেন, এটি কেবল আপনার ওও কোডকেই উপকৃত করে না, এটি ফাংশনাল প্রোগ্রামিংটিকে বোঝার পক্ষে খুব সহজ বলে মনে করে।
নোট
নোট 1 : মূল "ধনী" বা "অ্যাক্টিভ-রেকর্ড" অবজেক্ট-ওরিয়েন্টড ডিজাইন এখনও রয়েছে। এর দশকেরও বেশি সময় আগে যখন লোকেরা "এটি সঠিকভাবে করছিল" তখন এর মতো প্রচুর উত্তরাধিকারের কোড রয়েছে। গতবার আমি দেখেছিলাম যে ধরণের কোডটি (সঠিকভাবে সম্পন্ন করা হয়েছিল) সি ++ তে একটি ভিডিও গেমের কোডবেস থেকে ছিল যেখানে তারা যথাযথভাবে মেমরি নিয়ন্ত্রণ করে এবং খুব সীমিত জায়গা ছিল। এফপি এবং পরিষেবা-ওরিয়েন্টেড আর্কিটেকচারগুলি হ'ল জানোয়ার এবং হার্ডওয়্যার বিবেচনা করা উচিত নয়। তবে তারা ক্রমাগত পরিবর্তন, বজায় রাখা, পরিবর্তনশীল ডেটা মাপ এবং অন্যান্য দিকগুলিকে অগ্রাধিকার হিসাবে রাখার ক্ষমতা রাখে। ভিডিও গেমস এবং মেশিন এআইতে আপনি সংকেতগুলি এবং ডেটা খুব স্পষ্টভাবে নিয়ন্ত্রণ করেন।
দ্রষ্টব্য 2 : ডোমেন মডেলগুলির পলিমারফিক আচরণ নেই, বা তাদের বাহ্যিক নির্ভরতা নেই। তারা "বিচ্ছিন্ন"। এর অর্থ এই নয় যে তাদের 100% অ্যানিমিক হতে হবে। এগুলি যদি প্রয়োগ হয় তবে তাদের নির্মাণ এবং পরিবর্তনীয় সম্পত্তি পরিবর্তনের সাথে যুক্ত অনেক যুক্তি থাকতে পারে। ডিডিডি "মান অবজেক্টস" এবং এরিক ইভান্স এবং মার্ক সিমেন দ্বারা সত্তা দেখুন।
দ্রষ্টব্য 3 : লিনক এবং ল্যাম্বদা খুব সাধারণ। কিন্তু যখন কোনও ব্যবহারকারী কোনও নতুন ফাংশন তৈরি করেন, তারা খুব কমই পরামিতি হিসাবে ফানক বা কলযোগ্য ব্যবহার করেন, অন্যদিকে এফপিতে সেই প্যাটার্ন অনুসরণ করে কোনও অ্যাপ্লিকেশনটি দেখতে অদ্ভুত হবে।
দ্রষ্টব্য 4 : উত্তরাধিকারের সাথে বহুবর্ষকে বিভ্রান্ত করছেন না। কোনও ক্যাটমোডেল কোনও প্রাণীতে সাধারণত কোন সম্পত্তি থাকে তা নির্ধারণ করতে অ্যানিমালবেস উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে। তবে আমি যেমন দেখি, এর মতো মডেলগুলি একটি কোড গন্ধ । আপনি যদি এই প্যাটার্নটি দেখতে পান তবে আপনি এটিকে ভেঙে ডেটাতে পরিণত করার বিষয়টি বিবেচনা করতে পারেন।
নোট 5 : খাঁটি ফাংশন প্যারামিটার হিসাবে ফাংশন গ্রহণ করতে পারে (এবং করতে পারে)। আগত ফাংশনটি নাপাক হতে পারে, তবে খাঁটি হতে পারে। পরীক্ষার উদ্দেশ্যে, এটি সর্বদা খাঁটি হবে। উত্পাদনে, যদিও এটি খাঁটি হিসাবে বিবেচিত হয় তবে এতে পার্শ্ব-প্রতিক্রিয়া থাকতে পারে। খাঁটি ফাংশনটি খাঁটি যে সত্য তা পরিবর্তন করে না। যদিও প্যারামিটারের কাজটি অপরিষ্কার হতে পারে। বিভ্রান্তিকর নয়! : ডি