NHibernate ব্যবহারকারী প্রোগ্রামাররা সবচেয়ে সাধারণ ভুল এবং অ্যান্টি-প্যাটার্নগুলি কী কী?


28

NHibernate ব্যবহারকারী প্রোগ্রামাররা সবচেয়ে সাধারণ ভুল এবং অ্যান্টি-প্যাটার্নগুলি কী কী? সেগুলি কেন খারাপ অভ্যাস তা ব্যাখ্যা করুন বা আরও পড়ার জন্য সংস্থানকে লিঙ্ক দিন।

উদাহরণ স্বরূপ:

  • নতুন এনএইচবারনেট প্রোগ্রামারগুলির জন্য সাধারণ একটি অ্যান্টি-প্যাটার্ন হ'ল ওআরএম স্টাইল অ্যানসেসের পরিবর্তে পরিচয় / নেটিভ পিওআইডি ব্যবহার করা। এখানে আরও পড়ুন ...

1
আপনি এখানে সাধারণ কিছু ভুল খুঁজে পেতে পারেন: এনএইচপ্রুফ সতর্কতা

উত্তর:


34

আমার ব্যক্তিগত "প্রায়শই ব্যাখ্যা করা" সমস্যাগুলি:

এন্টি-প্যাটার্নস

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

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

লেনদেন এবং কাজের প্যাটার্নের একক বোঝা যাচ্ছে না । ঘন ঘন অ্যান্টি-প্যাটার্নগুলি: অন্তর্নিহিত লেনদেন, সেশন-প্রতি-অপারেশন এবং সেশন-প্রতি-অ্যাপ্লিকেশন। আরও কিছু পড়া:

অ্যাপ্লিকেশন লজিক রাখার জন্য এনএইচ ইভেন্টগুলি ব্যবহার করে (উদাঃ ট্র্যাকারগুলি সন্নিবেশ করানো এবং আপডেট করার ট্র্যাকিং পরিবর্তন করা)

টেবিল প্রতি এক ক্লাস তৈরি করুন । কিছু লোক OOD বোঝে না, অন্যরা সম্পর্কের নকশা বুঝতে পারে না।

ভুল

ব্যবহারের একের সাথে এক পরিবর্তে অনেক টু এক। আমি এই উত্তরে ব্যাখ্যা করার চেষ্টা করেছি ।

ব্যবহার আনা যোগদানের SetMaxResult সঙ্গে একযোগে। এই বিষয় সম্পর্কিত আমার সর্বশেষ উত্তর:

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

  IList<Address> Addresses
  {
    get { return addresses; }
    // will cause the addresses collection to be built up from scratch
    // in the database in every session, even when just reading the entity.
    set { addresses = new List<Address>(value); }
  }

  int Whatever
  {
    // will make the entity dirty after reading negative values from the db.
    // this causes unexpected updates after just reading the entity.
    get { if (whatever < 0) return 0; }
    set { whatever = value; }
  }

আরও অনুসরণ করা যেতে পারে।


2
+1: আপনার ইমোতে আপনার তালিকার "ইউনিট অব ওয়ার্ক প্যাটার্ন ব্যবহার করছেন না" এবং "প্রতি অ্যাপ্লিকেশনটিতে একটি সেশন" যুক্ত করা উচিত।
ফালকন

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

5

" নির্বাচন করুন এন + 1 সমস্যা "।

আপনি এখানে (এন) কে হেরফের করতে চান এমন প্রতিটি সত্তার জন্য একটি নির্বাচন এবং সমস্ত সত্তা এবং তার বৈশিষ্ট্যগুলির একক সিলেক্টের পরিবর্তে সত্ত্বার তালিকা (+1) পেতে একটি নির্বাচন নির্বাচন করুন This


1
  • অনেকগুলি বিমূর্ততা
  • এর সাথে অটোম্যাপিংস ব্যবহার করা হচ্ছে না FluentNHibernate

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

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

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

1

এটি বিমূর্ত করার চেষ্টা করছেন যাতে আপনি পরবর্তী তারিখে সত্ত্বা ফ্রেমওয়ার্ক (বা অন্য কিছু) এ স্যুইচ করতে পারেন।

এটি চেষ্টা করা বেশিরভাগ লোকের চেয়ে অনেক কঠিন। দুজনের মধ্যে এমন অনেক পার্থক্য রয়েছে যেগুলি আপনাকে এমন উপায়ে উপভোগ করতে পারে যা অনেক সময় সূক্ষ্ম হতে পারে। আসলে এটির শেষ পর্যন্ত প্রয়োজন হওয়াও খুব অস্বাভাবিক - যাতে আপনার দৃষ্টিভঙ্গিটি সমস্ত ভুল বলে আবিষ্কার করার আগে আপনি বছরের পর বছর ধরে সাবধানতার সাথে এটি বাস্তবায়নের চেষ্টা করতে পারেন।

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

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

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