উত্তর:
এসকিউএল-তে লাইনকিউ আপনাকে ক্লাস-প্রতি-শ্রেণীর প্যাটার্ন ব্যবহার করতে বাধ্য করে। এই প্যাটার্নটি ব্যবহারের সুবিধাগুলি হ'ল এটি দ্রুত এবং কার্যকর করা সহজ এবং একটি বিদ্যমান ডাটাবেস কাঠামোর ভিত্তিতে আপনার ডোমেনটি চালাতে খুব কম প্রচেষ্টা লাগে effort সাধারণ অ্যাপ্লিকেশনগুলির জন্য, এটি পুরোপুরি গ্রহণযোগ্য (এবং প্রায়শই এমনকি পছন্দনীয়) তবে আরও জটিল অ্যাপ্লিকেশনগুলির জন্য ডিভগুলি প্রায়শই পরিবর্তে একটি ডোমেন চালিত ডিজাইনের প্যাটার্ন ব্যবহার করার পরামর্শ দেয় (যা এনএইচবারনেট সহজতর করে)।
টেবিল-প্রতি-শ্রেণীর প্যাটার্নের সমস্যাটি হ'ল আপনার ডোমেন ডিজাইনটির উপরে আপনার ডাটাবেস কাঠামোর প্রত্যক্ষ প্রভাব রয়েছে। উদাহরণস্বরূপ, আসুন আমরা গ্রাহকের প্রাথমিক ঠিকানার তথ্য ধরে রাখতে নিম্নলিখিত কলামগুলির সাথে গ্রাহক টেবিল রয়েছে:
এখন, ধরা যাক আপনি গ্রাহকের মেইলিং ঠিকানার জন্য কলামগুলিও যুক্ত করতে চান যাতে আপনি গ্রাহকদের টেবিলে নিম্নলিখিত কলামগুলিতে যুক্ত করতে পারেন:
লিনকিউ থেকে এসকিউএল ব্যবহার করে, আপনার ডোমেনে গ্রাহক অবজেক্টের এখন এই আটটি কলামের প্রত্যেকটিরই বৈশিষ্ট্য থাকবে। তবে আপনি যদি কোনও ডোমেইন চালিত ডিজাইনের ধরণ অনুসরণ করে থাকেন তবে আপনি সম্ভবত একটি ঠিকানা শ্রেণি তৈরি করতে এবং আপনার গ্রাহক শ্রেণীর দুটি ঠিকানা বৈশিষ্ট্য থাকতে হবে, একটি মেইলিং ঠিকানার জন্য এবং একটি তাদের বর্তমান ঠিকানার জন্য।
এটি একটি সহজ উদাহরণ, তবে এটি দেখায় যে টেবিল-প্রতি-শ্রেণীর প্যাটার্নটি কীভাবে কিছুটা দুর্গন্ধযুক্ত ডোমেনে নিয়ে যেতে পারে। শেষ পর্যন্ত, এটি আপনার উপর নির্ভর করে। আবার, সহজ অ্যাপ্লিকেশনগুলির জন্য যা কেবলমাত্র বেসিক সিআরইউডি প্রয়োজন (তৈরি করুন, পড়ুন, আপডেট করুন, মুছুন) কার্যকারিতা, লিনকিউ থেকে এসকিউএল সরলতার কারণে আদর্শ। তবে ব্যক্তিগতভাবে আমি এনএইচবারনেট ব্যবহার করতে পছন্দ করি কারণ এটি একটি ক্লিনার ডোমেনকে সহায়তা করে।
সম্পাদনা করুন: @ লমাএক্সএক্স - হ্যাঁ, আমি যে উদাহরণটি ব্যবহার করেছি তা সরল ছিল এবং লিনকিউ থেকে এসকিউএল দিয়ে ভালভাবে কাজ করার জন্য অনুকূলিত হতে পারে। আমি পয়েন্টটি হোম চালানোর জন্য এটি যতটা সম্ভব বেসিক রাখতে চেয়েছিলাম। পয়েন্টটি এখনও রয়ে গেছে যে বেশ কয়েকটি দৃশ্যপট রয়েছে যেখানে আপনার ডাটাবেস কাঠামোটি নির্ধারণ করা আপনার ডোমেন কাঠামোটি একটি খারাপ ধারণা হতে পারে, বা কমপক্ষে সাবওটিমল ওও ডিজাইনের দিকে পরিচালিত করে।
দুটি পয়েন্ট যা এখনও মিস করা হয়েছে:
লিনকিউ থেকে এসকিউএল এসকিউএল সার্ভার ব্যতীত ওরাকল বা কোনও ডাটাবেসের সাথে কাজ করে না। তবে তৃতীয় পক্ষগুলি ওরাকল, যেমন ডিআআরআরটের ডটকনেক্ট , ডিবি লিনক , মাইন্ডস্কেপের লাইটস্পিড এবং আলিনিকের জন্য আরও ভাল সমর্থন দেয় । (এগুলির সাথে আমার কোনও ব্যক্তিগত অভিজ্ঞতা নেই)
লিনক থেকে এনএইচবারনেট আপনাকে লিনককে নিহিবারেট ব্যবহার করতে দেয়, সুতরাং এটি ব্যবহার না করার কোনও কারণ মুছে ফেলতে পারে।
এছাড়াও নাইবারনেট- এর নতুন সাবলীল ইন্টারফেসটি নীবারনেটের ম্যাপিংটি কনফিগার করতে কম বেদনাদায়ক বলে মনে হচ্ছে। (নীবারনেটের একটি ব্যথার পয়েন্ট মুছে ফেলা)
হালনাগাদ
Linq Nhiberate করার Nhiberate v3 এর মধ্যে যে এখন উত্তম আলফা । দেখে মনে হচ্ছে এই বছরের শেষের দিকে নিহাইরেট ভি 3 চালিয়ে যেতে পারে।
সত্তা ফ্রেম ওয়ার্ক .net 4 যেমন একটি বাস্তব বিকল্প মত চেহারা শুরু হয়।
@ কেভিন: আমি মনে করি আপনি যে উদাহরণটি উপস্থাপন করছেন তাতে সমস্যাটি হ'ল আপনি খুব কম ডাটাবেস ডিজাইন ব্যবহার করছেন। আমি ভাবতাম আপনি গ্রাহক টেবিল এবং একটি ঠিকানা টেবিল তৈরি করে টেবিলগুলিকে সাধারণকরণ করবেন। যদি আপনি এটি করেন তবে আপনি যে দৃশ্যের পরামর্শ দিচ্ছেন তার জন্য অবশ্যই লিনক টু এসকিউএল ব্যবহার করতে পারবেন। স্কট গুথ্রি লিঙ্ক টু এসকিউএল ব্যবহার করার ক্ষেত্রে একটি দুর্দান্ত সিরিজ পোস্ট করেছেন যা আমি আপনাকে দৃ strongly ়তার সাথে চেক আউট করার পরামর্শ দিচ্ছি।
আমি মনে করি না আপনি বলতে পারেন যে লিনক এবং এনহাইবারনেট একে অপরের পরিপূরক হিসাবে এটি বোঝায় যে এগুলি একসাথে ব্যবহার করা যেতে পারে, এবং এটি সম্ভব হলেও আপনি একটিটিকে বেছে নেওয়া এবং এটির সাথে আঁকড়ে থাকাই আরও ভাল।
এনএইচবারনেট আপনাকে আপনার ডোমেনের টেবিলগুলিকে আপনার ডোমেন অবজেক্টগুলিতে অত্যন্ত নমনীয় উপায়ে মানচিত্র করতে দেয়। এটি আপনাকে ডাটাবেসটি জিজ্ঞাসা করতে এইচবিএল ব্যবহার করার অনুমতি দেয়।
লিঙ্ক টু এসকিউএল আপনাকে ডাটাবেসে আপনার ডোমেন অবজেক্টগুলি ম্যাপ করার অনুমতি দেয় তবে এটি ডাটাবেস অনুসন্ধানের জন্য লিনক ক্যোয়ারী বাক্য গঠনটি ব্যবহার করে
এখানে মূল পার্থক্য হ'ল লিংক ক্যোয়ারী বাক্য গঠনটি আপনার প্রশ্নগুলি বৈধ কিনা তা নিশ্চিত করতে সংকলক দ্বারা সংকলন সময়ে পরীক্ষা করা হয়।
লিনাকের সাথে সচেতন হওয়ার মতো কিছু বিষয় হ'ল এটি কেবল। নেট 3.x এ উপলব্ধ এবং কেবল ভিএস2008 এ সমর্থিত। এনএইচবারনেট 2.0 এবং 3.x পাশাপাশি ভিএস2005 এ উপলব্ধ।
এনএইচবারনেটের সাথে সচেতন হওয়ার মতো কয়েকটি বিষয় হ'ল এটি আপনার ডোমেন অবজেক্ট তৈরি করে না, ম্যাপিং ফাইলগুলিও উত্পন্ন করে না। আপনার এটি ম্যানুয়ালি করা দরকার। লিনক আপনার
জন্য এটি স্বয়ংক্রিয়ভাবে করতে পারে।
সাবলীল এনএইচবারনেট সহজ কনভেনশনগুলির উপর ভিত্তি করে আপনার ম্যাপিং ফাইলগুলি তৈরি করতে পারে। কোনও এক্সএমএল-লিখন এবং দৃ strongly়ভাবে টাইপ করা হয়নি।
আমি সম্প্রতি একটি প্রকল্পে কাজ করেছি, যেখানে পারফরম্যান্সের কারণে আমাদের লিনক থেকে এসকিউএল থেকে এনএইচবারনেটে পরিবর্তন করতে হবে। বিশেষত এল 2 এস এর বস্তুগুলিকে রূপায়িত করার পদ্ধতি এনএইচবারনেটের ডিট্টোর চেয়ে ধীর বলে মনে হচ্ছে এবং পরিবর্তন পরিচালনটিও বেশ ধীর। এবং নির্দিষ্ট পরিস্থিতিতে যেখানে এটির প্রয়োজন নেই সেখানে পরিবর্তন পরিচালনা বন্ধ করা শক্ত হতে পারে।
যদি আপনি উদাহরণস্বরূপ ডাব্লুসিএফ দৃশ্যে - ডেটা কনটেক্সট থেকে সংযোগ বিচ্ছিন্নভাবে আপনার সত্ত্বাগুলি ব্যবহার করতে যাচ্ছেন - পরিবর্তনগুলি আপডেট করার জন্য আপনাকে আবার ডেটা কনটেক্সট এ সংযুক্ত করতে অনেক সমস্যা হতে পারে। NHibernate এর সাথে আমার কোনও সমস্যা হয়নি।
আমি এল 2 এস থেকে যে জিনিসটি মিস করব তা হ'ল বেশিরভাগ কোড জেনারেশন যা সত্তার উভয় প্রান্তে সম্পর্ককে আপ টু ডেট রাখে। তবে আমার ধারণা এনহাইবারনেটকেও সেখানে করার জন্য কিছু সরঞ্জাম রয়েছে ...
.ObjectTrackingEnabled = false
আপনার উপর DataContext
আপনার পরিবর্তন ট্র্যাকিং সমস্যা সমাধান হবে। যতক্ষণ আপনি ইউনিট-অফ ওয়ার্ক প্যাটার্নে কেনেন এবং ডিডিডি করার চেষ্টা করছেন না ততক্ষণ লিনক-টু-এসকিউএল সত্যিই বিতরণ করে।
আপনি কি "লিনকিউ" বলতে চাইছেন তা কি স্পষ্ট করে বলতে পারেন?
লিনকুই কোনও ডেটা অ্যাক্সেস প্রযুক্তি নয়, এটি কেবলমাত্র একটি ভাষা বৈশিষ্ট্য যা দেশীয় নির্মাণ হিসাবে অনুসন্ধান করা সমর্থন করে। এটি নির্দিষ্ট কোনও ইন্টারফেস সমর্থন করে এমন কোনও বস্তু মডেলকে জিজ্ঞাসা করতে পারে (যেমন আইকুয়েরেবল)।
অনেকে লিনকউ থেকে এসকিউএলকে লিনকুই হিসাবে উল্লেখ করেন তবে এটি মোটেই সঠিক নয়। মাইক্রোসফ্ট .NET 3.5 এসপি 1 দিয়ে লিনক টু সত্তা সবেমাত্র প্রকাশ করেছে। অতিরিক্তভাবে, এনহাইবারনেটটির একটি লিনকিউ ইন্টারফেস রয়েছে, সুতরাং আপনি আপনার ডেটা পেতে লিনকিউ এবং এনহাইবারনেট ব্যবহার করতে পারেন।
লিনকিউ দ্বারা, আমি ধরে নিচ্ছি যে আপনি লিনকিউকে এসকিউএল বলে বোঝাচ্ছেন কারণ লিনকুই এর সাথে কোনও ডেটাবেস "চলমান" নেই। এটি কেবল একটি ক্যোয়ারী ভাষা যা এসকিউএল-ইশ দেখতে এটির জন্য সিনট্যাক চিনির একটি নৌকা-বোঝা রয়েছে।
বেসিক উদাহরণগুলির খুব বেসিক ক্ষেত্রে, এনএইচবারনেট এবং লিনকিউ থেকে এসকিউএল উভয়ই একই সমস্যা সমাধান করছে বলে মনে হচ্ছে। একবার আপনি পাস হয়ে গেলে আপনি শীঘ্রই বুঝতে পারবেন যে এনএইচবারনেটের এমন অনেকগুলি বৈশিষ্ট্যের জন্য সমর্থন রয়েছে যা আপনাকে সত্যিকারের সমৃদ্ধ ডোমেন মডেল তৈরি করতে দেয়। NHibernate প্রকল্পের জন্য একটি লিনকিউ রয়েছে যা আপনাকে এসকিউএল থেকে লিনকিউ ব্যবহার করার মতো লাইনকিউ যেমন NHibernate জিজ্ঞাসা করতে লিনকিউ ব্যবহার করতে দেয়।
প্রথমে দুটি আলাদা জিনিস আলাদা করা যাক: ডাটাবেস মডেলিং ডেটা সম্পর্কে উদ্বিগ্ন এবং অবজেক্ট মডেলিং সত্তা এবং সম্পর্কের বিষয়ে উদ্বিগ্ন।
লিনাক-টু-এসকিউএল সুবিধা হ'ল ডেটাবেস স্কিমার বাইরে ক্লাস তৈরি করা যাতে তারা সক্রিয় রেকর্ড অবজেক্ট হিসাবে ব্যবহার করতে পারে (সক্রিয় রেকর্ড ডিজাইনের নকশা সংজ্ঞাটি দেখুন)।
NHibernate সুবিধা হ'ল আপনার অবজেক্ট মডেলিং এবং ডাটাবেস মডেলিংয়ের মধ্যে নমনীয়তার অনুমতি দেওয়া। উদাহরণস্বরূপ কর্মক্ষমতা বিবেচনা করে আপনার ডেটাটিকে সর্বোত্তম প্রতিফলিত করার জন্য ডেটাবেসকে মডেল করা যায়। যদিও আপনার অবজেক্ট মডেলিং ডোমেন-ড্রাইভড-ডিজাইনের মতো একটি পদ্ধতির ব্যবহার করে ব্যবসায়ের নিয়মের উপাদানগুলি সর্বোত্তমভাবে প্রতিফলিত করবে। (কেভিন পাং মন্তব্য দেখুন)
দুর্বল মডেলিং এবং / অথবা নামকরণের কনভেনশন সহ উত্তরাধিকারের ডেটাবেসগুলির সাথে লিনাক-টু-এসকিউএল আপনার ক্লাসে এই অযাচিত কাঠামো এবং নামগুলি প্রতিফলিত করবে। তবে এনএইচবারনেট ডেটা ম্যাপের সাহায্যে এই জগাখিচুটি লুকিয়ে রাখতে পারে।
গ্রিনফিল্ড প্রকল্পগুলিতে যেখানে ডাটাবেসের ভাল নামকরণ এবং কম জটিলতা রয়েছে, লিনক-টু-এসকিউএল ভাল পছন্দ হতে পারে।
তবে কনভেনশন হিসাবে ম্যাপিংয়ের মাধ্যমে আপনি একই উদ্দেশ্যে স্বতঃ-ম্যাপিংয়ের সাথে ফ্লুয়েন্ট এনএইচবারনেট ব্যবহার করতে পারেন । এক্ষেত্রে আপনি এক্সএমএল বা সি # সহ যে কোনও ডেটা ম্যাপারগুলি নিয়ে উদ্বেগ প্রকাশ করবেন না এবং এনএইচবারনেটকে আপনার সংস্থাগুলি থেকে ডেটাবেস স্কিমা তৈরি করতে দিন যা আপনি পছন্দসই করতে পারেন based
অন্যদিকে লিনাক-টু-এসকিউএল শেখার বক্ররেখা NHibernate এর চেয়ে ছোট smaller
অথবা আপনি ক্যাসেল অ্যাক্টিভেকর্ডস প্রকল্পটি ব্যবহার করতে পারেন। আমি উত্তরাধিকার প্রকল্পের জন্য কিছু নতুন কোড র্যাম্প করার জন্য অল্প সময়ের জন্য এটি ব্যবহার করছি। এটি এনহাইবারনেট ব্যবহার করে এবং সক্রিয় রেকর্ড প্যাটার্নে কাজ করে (আমি জানি এটির নাম দিয়ে অবাক করে দিয়েছি)। আমি চেষ্টা করিনি, তবে আমি ধরে নিয়েছি যে আপনি এটি ব্যবহার করার পরে যদি আপনি সরাসরি এনএইচবারনেট সমর্থন থেকে নেমে যাওয়ার প্রয়োজন বোধ করেন তবে অংশ বা আপনার সমস্ত প্রকল্পের জন্য এটি করা খুব বেশি হবে না।
আপনি যেমন লিখেছেন "যে কোনও ব্যক্তির জন্য যার মধ্যে একটিও ব্যবহৃত হয়নি" লিনকিউ থেকে এসকিউএল ব্যবহার করা সহজ তাই যে কোনও এটি সহজেই ব্যবহার করতে পারে এটি পদ্ধতিগুলিও সমর্থন করে যা বেশিরভাগ সময় সাহায্য করে। ধরুন আপনি একাধিক টেবিল থেকে ডেটা পেতে চান তারপরে একটি পদ্ধতি লিখুন এবং সেই পদ্ধতিটি ডিজাইনারের কাছে টেনে আনুন এবং এটি আপনার জন্য সবকিছু তৈরি করবে, ধরুন আপনার পদ্ধতির নাম "CUSTOMER_ORDER_LINEITEM" যা এই তিনটি সারণী থেকে রেকর্ড এনেছে তবে কেবল লিখুন
MyDataContext db = new MyDataContext();
List<CUSTOMER_ORDER_LINEITEMResult> records = db.CUSTOMER_ORDER_LINEITEM(pram1, param2 ...).ToList<CUSTOMER_ORDER_LINEITEMResult>();
আপনি ফোরচ লুপে রেকর্ড অবজেক্টটিও ব্যবহার করতে পারেন, যা এনএইচবারনেট দ্বারা সমর্থিত নয়