এটি একটি সুন্দর মুক্ত সমাপ্ত প্রশ্ন। আমি একটি নতুন প্রকল্প শুরু করব এবং ডাটাবেস অ্যাক্সেসের সাথে সংহত করার জন্য বিভিন্ন ওআরএম খুঁজছি at
যদি আপনার কোন পছন্দসই আছে? আপনি কি পরিষ্কার থাকার পরামর্শ দিবেন?
এটি একটি সুন্দর মুক্ত সমাপ্ত প্রশ্ন। আমি একটি নতুন প্রকল্প শুরু করব এবং ডাটাবেস অ্যাক্সেসের সাথে সংহত করার জন্য বিভিন্ন ওআরএম খুঁজছি at
যদি আপনার কোন পছন্দসই আছে? আপনি কি পরিষ্কার থাকার পরামর্শ দিবেন?
উত্তর:
আমি ওআরএম ব্যবহার বন্ধ করে দিয়েছি।
কারণটি ধারণার কোনও দুর্দান্ত ত্রুটি নয়। হাইবারনেট ভাল কাজ করে। পরিবর্তে, আমি দেখতে পেয়েছি যে ক্যোয়ারির ওভারহেড কম রয়েছে এবং আমি প্রচুর জটিল লজিককে বড় এসকিউএল কোয়েরিতে ফিট করতে পারি এবং আমার প্রচুর প্রক্রিয়াকরণ ডেটাবেসে স্থানান্তর করতে পারি।
সুতরাং কেবল জেডিবিসি প্যাকেজটি ব্যবহার করে বিবেচনা করুন।
কোনওটি নয়, কারণ একটি ওআরএম থাকা খুব সামান্য সুবিধা নিয়ে দূরে চলে away অর্ডার করা সময় সাশ্রয়টি খুব সহজেই উড়িয়ে দেওয়া হয় যখন আপনাকে ওআরএম ব্যবহারের ফলে অস্বাভাবিকতা ডিবাগ করতে হয়। তদুপরি, ওআরএমগুলি বিকাশকারীদের এসকিউএল শিখতে এবং কীভাবে সম্পর্কিত ডেটাবেসগুলি কাজ করে এবং তাদের সুবিধার জন্য এটি ব্যবহার করে তা নিরুৎসাহিত করে।
অনেকগুলি ওআরএম দুর্দান্ত, আপনি জেডিবিসির শীর্ষে কেন বিমূর্তি যুক্ত করতে চান তা আপনার জানতে হবে। আমি আপনাকে http://www.jooq.org সুপারিশ করতে পারি (অস্বীকৃতি: আমি jOOQ এর স্রষ্টা, সুতরাং এই উত্তরটি পক্ষপাতদুষ্ট)। jOOQ নিম্নলিখিত দৃষ্টান্তটি আলিঙ্গন করে:
আরও অনেক ভাল ওআরএম রয়েছে। বিশেষত হাইবারনেট বা আইবাটিস একটি দুর্দান্ত সম্প্রদায় রয়েছে। তবে আপনি যদি কোনও স্বজ্ঞাত, সাদামাটা সন্ধান করছেন, আমি বলব JOOQ ব্যবহার করে দেখুন। তুমি এটা পছন্দ করবে! :-)
এই উদাহরণটি এসকিউএল দেখুন:
// Select authors with books that are sold out
SELECT *
FROM T_AUTHOR a
WHERE EXISTS (SELECT 1
FROM T_BOOK
WHERE T_BOOK.STATUS = 'SOLD OUT'
AND T_BOOK.AUTHOR_ID = a.ID);
এবং এটি কীভাবে JOOQ এ প্রকাশ করা যেতে পারে:
// Alias the author table
TAuthor a = T_AUTHOR.as("a");
// Use the aliased table in the select statement
create.selectFrom(a)
.whereExists(create.selectOne()
.from(T_BOOK)
.where(T_BOOK.STATUS.equal(TBookStatus.SOLD_OUT)
.and(T_BOOK.AUTHOR_ID.equal(a.ID))))));
হাইবারনেট, কারণ এটি মূলত জাভাতে ডিফাক্টো স্ট্যান্ডার্ড এবং জেপিএ তৈরির অন্যতম চালিকা শক্তি ছিল। এটি বসন্তে দুর্দান্ত সমর্থন পেয়েছে এবং প্রায় প্রতিটি জাভা ফ্রেমওয়ার্ক এটিকে সমর্থন করে। পরিশেষে, জিওআরএম এটির চারপাশে একটি দুর্দান্ত শীতল র্যাপার যা ডায়নামিক অনুসন্ধানকারী এবং গ্রোভিকে ব্যবহার করে doing
এমনকি এটি নেট। (NHibernate) এ পোর্ট করা হয়েছে যাতে আপনি এটি সেখানেও ব্যবহার করতে পারেন।
হাইবারনেট, কারণ এটি:
ওআরএম কেন (এবং কখন) ব্যবহার করবেন সে সম্পর্কে কয়েকটি পয়েন্ট:
আমি মাঝারি আকারের জাভাএসই অ্যাপ্লিকেশন লেখার সময় আভাজে ইবেইনের সাথে আমার খুব ভাল অভিজ্ঞতা হয়েছিল।
এটি সত্তা সংজ্ঞায়িত করতে স্ট্যান্ডার্ড জেপিএ টীকাগুলি ব্যবহার করে তবে অনেক সহজ এপিআই প্রকাশ করে (কোনও এনটিটিম্যানেজার বা কোনও সংযুক্ত / বিচ্ছিন্ন সংস্থাগুলির ক্র্যাপ নয়)। এটি আপনাকে যখন প্রয়োজন হয় তখন সহজেই এসকিউএল কোয়েরি বা ইভেন্ট প্লেন জেডিবিসি কলগুলি সহজেই ব্যবহার করতে দেয়।
এটিতে ক্যোয়ারির জন্য খুব সুন্দর তরল এবং টাইপ-নিরাপদ এপিআই রয়েছে। আপনি এই জাতীয় জিনিস লিখতে পারেন:
List<Person> boys = Ebean.find(Person.class)
.where()
.eq("gender", "M")
.le("age", 18)
.orderBy("firstName")
.findList();
সিম্পলআরএম , কারণ এটি সোজা-ফরোয়ার্ড এবং কোনও যাদু নয়। এটি জাভা কোডের সমস্ত মেটা ডেটা স্ট্রাকচার সংজ্ঞায়িত করে এবং খুব নমনীয়।
সিম্পলআরএম মেমরির জাভা অবজেক্টগুলিতে একটি রিলেশনাল ডাটাবেসে ডেটা ম্যাপিংয়ের মাধ্যমে হাইবারনেটের অনুরূপ কার্যকারিতা সরবরাহ করে। প্রশ্নগুলি জাভা অবজেক্টের নিরিখে নির্দিষ্ট করা যেতে পারে, অবজেক্টের পরিচয় ডাটাবেস কীগুলির সাথে একত্রিত করা হয়, অবজেক্টের মধ্যে সম্পর্ক বজায় থাকে এবং পরিবর্তিত বস্তুগুলি স্বয়ংক্রিয়ভাবে আশাবাদী লক সহ ডাটাবেসে ফ্লাশ হয়।
তবে হাইবারনেটের বিপরীতে, সিম্পলআরএম খুব সাধারণ অবজেক্ট স্ট্রাকচার এবং আর্কিটেকচার ব্যবহার করে যা জটিল পার্সিং, বাইট কোড প্রসেসিং ইত্যাদির প্রয়োজনীয়তা এড়ায় Simple নির্ভরতা (Slf4j)। (হাইবারনেট 2400K এর বেশি এবং প্রায় 2000K নির্ভরশীল জার্সের ওপরে)) এটি সরলঅরএমটি বুঝতে সহজ করে তোলে এবং প্রযুক্তিগত ঝুঁকি হ্রাস করে।
গ্রহন লিংক , অনেক কারণে, তবে উল্লেখযোগ্যভাবে আমি মনে করি এটির অন্যান্য মূল স্ট্রিম সলিউশনগুলির তুলনায় (কম-বেশি আপনার মুখের ফোটা ফোটা) কম ফুলেছে।
ওহ এবং এক্সলিপস লিঙ্কটি জেপিএ ২.০ এর জন্য রেফারেন্স বাস্তবায়ন হিসাবে বেছে নেওয়া হয়েছে
আমি ফ্রি-ফর্ম এসকিউএল প্রশ্নের জন্য জাভা প্রতিস্থাপন সম্পর্কিত উদ্বেগগুলি ভাগ করার সময়, আমি সত্যিই মনে করি যে সাধারণভাবে দুর্বল অ্যাপ্লিকেশন ডিজাইনের কারণে ওআরএমের সমালোচনা করা লোকেরা এটি করছে।
সত্য OOD ক্লাস এবং সম্পর্ক দ্বারা চালিত, এবং ওআরএম আপনাকে বিভিন্ন সম্পর্কের ধরণ এবং অবজেক্টের ধারাবাহিক ম্যাপিং দেয়। যদি আপনি একটি ওআরএম সরঞ্জাম ব্যবহার করেন এবং ওআরএম কাঠামো সমর্থন করে যে কোনও কোয়েরি ভাষায় কোডিং কোয়েরি এক্সপ্রেশনগুলি শেষ করে (তবে জাভা এক্সপ্রেশন ট্রি, ক্যোয়ারির পদ্ধতি, ওকিউএল ইত্যাদিতে সীমাবদ্ধ নয়) আপনি অবশ্যই কিছু ভুল করছেন, অর্থাত আপনার ক্লাসের মডেল সম্ভবত আপনার প্রয়োজনীয়তা যেমনভাবে করা উচিত তেমন সমর্থন করে না। একটি পরিষ্কার অ্যাপ্লিকেশন ডিজাইনের অ্যাপ্লিকেশন স্তরের সত্যিকারের প্রশ্নের দরকার নেই। আমি প্রচুর প্রকল্পগুলিকে রিফেক্টর করে যাচ্ছি যেভাবে লোকেরা তাদের কোডটিতে এসকিউএল স্ট্রিং কনস্ট্যান্টগুলি এম্বেড করার জন্য একইভাবে একটি ওআরএম কাঠামো ব্যবহার শুরু করেছিল এবং শেষ পর্যন্ত আপনি মিললে পুরো অ্যাপ্লিকেশনটি কতটা সহজ এবং বজায় রাখতে সক্ষম হয় তা সম্পর্কে সবাই আশ্চর্য হয়ে গেলেন you আপনার ক্লাস মডেলটি ব্যবহারের মডেলটি আপ করুন। মঞ্জুরিপ্রাপ্ত, অনুসন্ধান কার্যকারিতা ইত্যাদির জন্য যেমন আপনার জন্য একটি কোয়েরি ভাষা প্রয়োজন, তবে তবুও ক্যোয়ারীগুলি এতটাই সীমাবদ্ধ যে একটি জটিল জটিল ভিউ তৈরি করা এবং কেবলমাত্র পঠনযোগ্য অবিচ্ছিন্ন শ্রেণীর কাছে ম্যাপিংটি বিল্ডিংয়ের মত প্রকাশের চেয়ে বজায় রাখা এবং দেখার পক্ষে খুব সুন্দর is আপনার অ্যাপ্লিকেশন কোডটিতে কিছু প্রশ্নের ভাষায়। ভিউউ পদ্ধতির মাধ্যমে ডেটাবেস ক্ষমতাও উপকৃত হয় এবং মেটেরিয়ালাইজেশনের মাধ্যমে আপনার জাভা উত্সের যে কোনও হাতের লিখিত এসকিউএল এর চেয়ে আরও ভাল পারফরম্যান্স-ভিত্তিক হতে পারে। সুতরাং, আমি অপ্রয়োজনীয় অ্যাপ্লিকেশনটি ওআরএম ব্যবহার না করার কোনও কারণ দেখতে পাচ্ছি না। তবে তবুও কোয়েরিগুলি এতটাই সীমিত যে একটি জটিল জটিল ভিউ তৈরি করা এবং কেবলমাত্র পঠনযোগ্য অধ্যবসায়ী শ্রেণীর কাছে ম্যাপিং করা আপনার আবেদনের কোডে কিছু প্রশ্নের ভাষায় ভাব প্রকাশের চেয়ে বজায় রাখা এবং দেখার পক্ষে খুব সুন্দর। ভিউউ পদ্ধতির মাধ্যমে ডেটাবেস ক্ষমতাও উপকৃত হয় এবং মেটেরিয়ালাইজেশনের মাধ্যমে আপনার জাভা উত্সের যে কোনও হাতের লিখিত এসকিউএল এর চেয়ে আরও ভাল পারফরম্যান্স-ভিত্তিক হতে পারে। সুতরাং, আমি অপ্রয়োজনীয় অ্যাপ্লিকেশনটি ওআরএম ব্যবহার না করার কোনও কারণ দেখতে পাচ্ছি না। তবে তবুও কোয়েরিগুলি এতটাই সীমিত যে একটি জটিল জটিল ভিউ তৈরি করা এবং কেবলমাত্র পঠনযোগ্য অধ্যবসায়ী শ্রেণীর কাছে ম্যাপিং করা আপনার আবেদনের কোডে কিছু প্রশ্নের ভাষায় ভাব প্রকাশের চেয়ে বজায় রাখা এবং দেখার পক্ষে খুব সুন্দর। ভিউউ পদ্ধতির মাধ্যমে ডেটাবেস ক্ষমতাও উপকৃত হয় এবং মেটেরিয়ালাইজেশনের মাধ্যমে আপনার জাভা উত্সের যে কোনও হাতের লিখিত এসকিউএল এর চেয়ে আরও ভাল পারফরম্যান্স-ভিত্তিক হতে পারে। সুতরাং, আমি অপ্রয়োজনীয় অ্যাপ্লিকেশনটি ওআরএম ব্যবহার না করার কোনও কারণ দেখতে পাচ্ছি না।