আমার দীর্ঘ এবং দেরী উত্তর, এমনকি সম্পূর্ণ নয়, তবে একটি ভাল ব্যাখ্যা কেন আমি এই নিদর্শন, মতামত এবং কিছু আবেগকে ঘৃণা করি:
1) সংক্ষিপ্ত সংস্করণ: অ্যাক্টিভ রেকর্ড ডাটাবেস এবং অ্যাপ্লিকেশন কোডের মধ্যে " শক্তিশালী বাঁধাই " এর একটি " পাতলা স্তর " তৈরি করে । যা কোনও যৌক্তিক, কোনও সমস্যা-সমস্যা, কোনও সমস্যাই সমাধান করে না। তবে প্রোগ্রামারটির জন্য কিছু সিনট্যাকটিক চিনি ব্যতীত এটি কোনও ভ্যালু সরবরাহ করে না (যা পরবর্তীকালে কোনও ডেটা অ্যাক্সেস করার জন্য "অবজেক্ট সিনট্যাক্স" ব্যবহার করতে পারে, যা একটি সম্পর্কিত ডেটাবেজে বিদ্যমান)। প্রোগ্রামারদের জন্য কিছুটা স্বাচ্ছন্দ্য তৈরি করার প্রয়াসটি (আইএমএইচও ...) আরও নিম্ন স্তরের ডাটাবেস অ্যাক্সেস সরঞ্জামগুলিতে বিনিয়োগ করা উচিত, উদাহরণস্বরূপ সহজ, সহজ, সরল এবং অনুরূপ পদ্ধতির কিছু প্রকরণ (অবশ্যই, ধারণাগুলি এবং কমনীয়তার সাথে ব্যাপকভাবে পরিবর্তিত হয় ভাষা ব্যবহৃত)।hash_map get_record( string id_value, string table_name, string id_column_name="id" )
2) দীর্ঘ সংস্করণ: যে কোনও ডাটাবেস-চালিত প্রকল্পগুলিতে যেখানে আমার "ধারণাগত নিয়ন্ত্রণ" জিনিস ছিল, আমি এআর এড়িয়ে গিয়েছি এবং এটি ভাল ছিল। আমি সাধারণত একটি স্তরযুক্ত আর্কিটেকচার তৈরি করি (আপনি যত তাড়াতাড়ি বা পরে আপনার সফ্টওয়্যার স্তরগুলিতে বিভক্ত করেন, কমপক্ষে মাঝারি থেকে বড় আকারের প্রকল্পগুলিতে):
এ 1) নিজেই ডাটাবেস, টেবিলগুলি, সম্পর্কগুলি, এমনকি কিছু যুক্তি যদি ডিবিএমএস এটির অনুমতি দেয় তবে (মাইএসকিউএলও এখন বড় হয়েছে)
এ 2) প্রায়শই, ডেটা স্টোরের চেয়ে বেশি থাকে: ফাইল সিস্টেম (ডাটাবেসে ব্লবগুলি সর্বদা একটি ভাল সিদ্ধান্ত হয় না ...), লিগ্যাসি সিস্টেমগুলি (নিজেকে কীভাবে "কল্পনা করা যায় যে তারা অ্যাক্সেস পাবে, বিভিন্ন প্রকারের সম্ভাবনা রয়েছে .. তবে thats বিন্দু নয় ...)
খ) ডাটাবেস অ্যাক্সেস স্তর (এই স্তরে, সরঞ্জামের পদ্ধতিগুলি, সহজেই ডাটাবেসে ডেটা অ্যাক্সেস করতে সহায়তাকারীরা খুব স্বাগত জানায়, তবে কিছু সংশ্লেষীয় চিনি ব্যতীত এআর এখানে কোনও মান সরবরাহ করে না)
গ) অ্যাপ্লিকেশন অবজেক্টস স্তর: "অ্যাপ্লিকেশন অবজেক্টস" কখনও কখনও ডাটাবেসে একটি সারণির সাধারণ সারি হয় তবে বেশিরভাগ সময় তারা যেকোন উপায়ে যৌগিক বস্তু হয় এবং কিছুটা উচ্চতর যুক্তি যুক্ত থাকে, সুতরাং এই স্তরে এআর অবজেক্টগুলিতে সময় বিনিয়োগ করা কেবল স্পষ্টভাবে অকেজো , মূল্যবান কোডার সময়ের অপচয়, কারণ "আসল মান", সেই বস্তুর "উচ্চতর যুক্তি" যে কোনও উপায়ে - এআর অবজেক্টের উপরে প্রয়োগ করা দরকার - এআর সহ এবং ছাড়া! এবং, উদাহরণস্বরূপ, আপনি কেন "লগ এন্ট্রি অবজেক্টস" এর বিমূর্ততা রাখতে চান? অ্যাপ লজিক কোড সেগুলি লিখেছে, তবে সেগুলিতে আপডেট করার বা মুছার ক্ষমতা থাকতে হবে? নির্বোধ শোনায়, এবং এর App::Log("I am a log message")
থেকে কিছু মাপের ব্যবহার করা সহজle=new LogEntry(); le.time=now(); le.text="I am a log message"; le.Insert();
। এবং উদাহরণস্বরূপ: আপনার অ্যাপ্লিকেশনটিতে লগ ভিউতে একটি "লগ এন্ট্রি অবজেক্ট" ব্যবহার করা 100, 1000 বা এমনকি 10000 লগ লাইনের জন্য কাজ করবে তবে খুব শীঘ্রই আপনাকে অপ্টিমাইজ করতে হবে - এবং আমি বেশিরভাগ ক্ষেত্রেই বাজি ধরছি, আপনি ঠিক আপনার অ্যাপ্লিকেশন যুক্তিতে সেই ছোট্ট সুন্দর এসকিউএল সিলেক্ট স্টেটমেন্টটি ব্যবহার করুন (যা পুরোপুরি এআর ধারণাটি ভেঙে দেয় ..), সেই ছোট স্টেটমেন্টটিকে দৃ rig় স্থির এআর আইডেমের ফ্রেমে মোড়কের পরিবর্তে প্রচুর কোড মোড়ানো এবং লুকিয়ে রাখুন। আপনি আরআর কোড লেখার এবং / বা বিল্ডিংয়ের সাথে যে সময় নষ্ট করেছেন তা লগ-এন্ট্রিগুলির তালিকা পড়ার জন্য আরও চতুর ইন্টারফেসে বিনিয়োগ করা যেতে পারে (অনেকগুলি, অনেক উপায়ে আকাশ সীমাবদ্ধতা)। কোডাররা তাদের প্রয়োগ যুক্তি বুঝতে সক্ষম যাতে নতুন অ্যাপ্লিকেশন যুক্ত করতে পারে যা নির্ধারিত অ্যাপ্লিকেশনটির সাথে খাপ খায় এবং মূর্খতার সাথে নিরীহ নিদর্শনগুলি পুনরায় প্রয়োগ না করে, প্রথম দেখায় ভাল লাগছে!
ডি) অ্যাপ্লিকেশন লজিক - অ্যাপ্লিকেশন লজিক অবজেক্টগুলির ইন্টারঅ্যাক্টিং অবজেক্টস তৈরি এবং মুছে ফেলার (!) লজিক প্রয়োগ করে (না, সেই কাজগুলিকে খুব কমই অ্যাপ্লিকেশন লজিক অবজেক্টে অ্যাঙ্কর করা উচিত: আপনার ডেস্কের কাগজের পত্রকটি কি বলে? আপনি কি আপনার অফিসের অন্যান্য সমস্ত পত্রকের নাম এবং অবস্থানগুলি? অবজেক্টের তালিকা তৈরির জন্য "স্থিতিশীল" পদ্ধতিগুলি ভুলে যান, নির্বোধ, মানুষের চিন্তাভাবনার উপায়টিকে [কিছু-না-সমস্ত-এআর-ফ্রেমওয়ার্ক-এর মতো) উপযোগী করার জন্য তৈরি একটি খারাপ সমঝোতা -] এআর চিন্তাভাবনা)
ঙ) ইউজার ইন্টারফেস - ভাল, আমি নিম্নলিখিত লাইনে যা লিখব তা খুব, খুব, খুব সাবজেক্টিভ, তবে আমার অভিজ্ঞতায়, এআর-র উপর নির্মিত প্রকল্পগুলি প্রায়শই একটি অ্যাপ্লিকেশনটির ইউআই অংশ অবহেলা করে - সময় অস্পষ্ট বিমূর্তকরণের জন্য সময় নষ্ট করে দেয় । শেষ পর্যন্ত এই জাতীয় অ্যাপ্লিকেশনগুলি অনেক কোডার সময় নষ্ট করে এবং কোডারগুলির জন্য কোডারগুলির কাছ থেকে অ্যাপ্লিকেশনগুলির মতো মনে হয়, অভ্যন্তরীণ এবং বাইরের দিকে প্রযুক্তি-প্রবণ। কোডাররা ভাল অনুভব করে (কঠোর পরিশ্রম অবশেষে শেষ হয়েছে, কাগজে থাকা ধারণা অনুসারে সবকিছু শেষ হয়েছে এবং সঠিক হয়েছে ...) এবং গ্রাহকদের "কেবল এটির মতো হওয়া দরকার" শিখতে হবে, কারণ এটি "পেশাদার"। ঠিক আছে, দুঃখিত, আমি digress ;-)
ঠিক আছে, সত্যই, এগুলি বিষয়গত, তবে এটি আমার অভিজ্ঞতা (রুবি অন রেলসকে বাদ দেওয়া হয়েছে, এটি আলাদা হতে পারে, এবং সেই পদ্ধতির সাথে আমার শূন্য ব্যবহারিক অভিজ্ঞতা আছে)।
প্রদত্ত প্রকল্পগুলিতে, আমি প্রায়শই উচ্চ স্তরের অ্যাপ্লিকেশন যুক্তির জন্য বিল্ডিং ব্লক হিসাবে কিছু "সক্রিয় রেকর্ড" অবজেক্ট তৈরি শুরু করার দাবিটি শুনেছিলাম। আমার অভিজ্ঞতায়, এটি প্রায়শই প্রায়শই ঘটেগ্রাহকের (বেশিরভাগ ক্ষেত্রে একটি সফ্টওয়্যার দেব সংস্থা) একটি ভাল ধারণা, একটি বড় দৃষ্টিভঙ্গি, পণ্যটি শেষ পর্যন্ত কী হওয়া উচিত তার একটি ওভারভিউ ছিল না এর জন্য একধরণের অজুহাত ছিল। এই গ্রাহকরা দৃ fra় ফ্রেমে চিন্তা করেন ("প্রকল্পে দশ বছর আগে এটি ভালভাবে কাজ করেছিল .."), তারা সত্তাগুলি তৈরি করতে পারে, তারা সত্তার সম্পর্ককে সংজ্ঞায়িত করতে পারে, তারা ডেটা সম্পর্কগুলি ভেঙে দিতে পারে এবং বেসিক অ্যাপ্লিকেশনটির যুক্তি সংজ্ঞায়িত করতে পারে তবে তারা থামতে পারে এবং এটি আপনাকে হস্তান্তর করুন, এবং আপনার যা প্রয়োজন তা মনে করুন ... এগুলি প্রায়শই অ্যাপ্লিকেশন লজিক, ইউজার ইন্টারফেস, ব্যবহারযোগ্যতা এবং আরও অনেক কিছু সম্পর্কে সম্পূর্ণ ধারণার অভাব হয় ... তাদের মধ্যে বড় দৃষ্টিভঙ্গি নেই এবং তাদের প্রতি ভালবাসার অভাব রয়েছে বিশদ বিবরণ এবং তারা আপনাকে এআর-এর জিনিসগুলি অনুসরণ করতে চায়, কারণ .. ভাল, কেন, এটি বহু বছর আগে এই প্রকল্পে কাজ করেছিল, এটি লোককে ব্যস্ত এবং নীরব রাখে? আমি জানি না। তবে "বিশদ" ছেলেদের থেকে পুরুষদের আলাদা করুন, বা .. মূল বিজ্ঞাপনের স্লোগানটি কেমন ছিল? ;-)
বহু বছর পরে (সক্রিয় বিকাশের দশ বছরের অভিজ্ঞতা) পরে যখনই কোনও গ্রাহক "সক্রিয় রেকর্ড প্যাটার্ন" উল্লেখ করেন, আমার অ্যালার্ম বেল বাজে। আমি তাদের সেই প্রয়োজনীয় ধারণাগত পর্যায়ে ফিরিয়ে আনতে চেষ্টা করতে শিখেছি , তাদের দু'বার চিন্তা করতে দাও, তাদের ধারণাগত দুর্বলতাগুলি দেখানোর চেষ্টা করুন বা যদি তারা উদ্বেগজনক হয় তবে এগুলি এড়িয়ে চলুন (শেষ পর্যন্ত, আপনি জানেন যে এমন কোনও গ্রাহক যা এখনও করেননি এটি কী চায় তা জানেন, এমনকি এমনকি এটি জানেন বলেও মনে করে বা আমার কাছে বিনা মূল্যে ধারণার কাজটি বহিরাগত করার চেষ্টা করে, আমার অনেক মূল্যবান ঘন্টা, দিন, সপ্তাহ এবং মাস আমার ব্যয় করে, লাইভ খুব ছোট ...)।
সুতরাং, পরিশেষে: এই সমস্ত কারণেই আমি সেই নির্বাক "সক্রিয় রেকর্ড প্যাটার্ন" ঘৃণা করি এবং যখনই সম্ভব হয় আমি তা এড়াতে চাই।
সম্পাদনা : আমি এটিকে একটি ন-প্যাটার্নও বলব। এটি কোনও সমস্যার সমাধান করে না (নিদর্শনগুলি সিনট্যাকটিক চিনি তৈরির উদ্দেশ্যে নয়)। এটি অনেকগুলি সমস্যা তৈরি করে: এর সমস্ত সমস্যার মূল (এখানে বহু উত্তরে উল্লেখ করা হয়েছে), এটি হ'ল এটি কেবল পুরানো সু-বিকাশযুক্ত এবং শক্তিশালী এসকিউএলকে একটি ইন্টারফেসের পিছনে লুকিয়ে রাখে যা নিদর্শন সংজ্ঞা দ্বারা অত্যন্ত সীমিত।
এই প্যাটার্নটি সিনট্যাকটিক চিনির সাথে নমনীয়তা প্রতিস্থাপন করে!
এটি ভেবে দেখুন, এআর আপনার জন্য কোন সমস্যার সমাধান করে?