সমস্ত অ্যাক্টিভ রেকর্ড ঘৃণা কেন? [বন্ধ]


103

আমি যেমন ওওপি সম্পর্কে আরও বেশি জানতে এবং বিভিন্ন নকশার নিদর্শনগুলি প্রয়োগ করতে শুরু করি, আমি সেইসব ক্ষেত্রে ফিরে আসতে থাকি যেখানে লোকেরা সক্রিয় রেকর্ডে ঘৃণা করে ।

প্রায়শই, লোকেরা বলে যে এটি ভাল স্কেল করে না (টুইটারকে তাদের প্রধান উদাহরণ হিসাবে উদ্ধৃত করে) - তবে এটি কেন ভালভাবে স্কেল করে না তা বাস্তবে কেউ ব্যাখ্যা করেন না; এবং / অথবা কীভাবে কনসের তুলনায় এআর এর উপসর্গ অর্জন করতে হবে (একইরকম তবে ভিন্ন ধরণের মাধ্যমে?)

আশা করি এটি নকশার নিদর্শনগুলি সম্পর্কে পবিত্র যুদ্ধে পরিণত হবে না - আমি যা জানতে চাই তা হল **** বিশেষত **** অ্যাক্টিভ রেকর্ডে কী সমস্যা আছে।

এটি যদি ভাল স্কেল না হয় তবে কেন নয়?

এটির আর কী সমস্যা আছে?


9
আমার ধারণা সাধারণভাবে ডিজাইনের ধরণগুলির বিরুদ্ধে প্রচুর ঘৃণা ও অপছন্দ ভুল ব্যবহারের সাথে সংযুক্ত। লোকেরা তাদের ভুল প্রসঙ্গে অতিরিক্ত মাত্রায় ব্যবহার এবং ব্যবহার করার প্রবণতা রাখে এবং
মূলটির

1
রুবির অ্যাক্টিভ রেকর্ড বাস্তবায়ন আরও একটি ওআরএম এর মতো।
জিমি টি।

1
একটি সামাজিক ঘটনা রয়েছে যা প্রশংসা পেতে, আরও স্বীকৃতি পেতে, বুদ্ধিমান এবং কাটা রক্তপাত-প্রান্ত হিসাবে মনে করার জন্য, লোকেরা যান্ত্রিকভাবে কোনও বর্তমান মান, মডেল, ব্যাপকভাবে গৃহীত প্রযুক্তিগুলির অবহেলার কোনও হাইপ পুনরাবৃত্তি করার ঝোঁক করে, এটির সাথে বিভ্রান্ত করে পরবর্তী তরঙ্গে বিপ্লবী অগ্রগতি।
আন্দ্রে

উত্তর:


90

আছে ActiveRecord নকশা প্যাটার্ন এবং ActiveRecord পাগল ORM লাইব্রেরী , এবং এছাড়াও অন্যান্য ভাষায় .NET জন্য নক-অফ, একটি টন আছে।

এই সব বিভিন্ন জিনিস। তারা বেশিরভাগই সেই নকশার প্যাটার্নটি অনুসরণ করে তবে এটিকে বিভিন্ন উপায়ে প্রসারিত ও সংশোধন করে, সুতরাং কেউ "অ্যাক্টিভেকর্ডস সাকস" বলার আগে এটি "কোন অ্যাক্টিভেকর্ড, সেখানে স্তূপ রয়েছে?" বলে যোগ্যতা অর্জনের প্রয়োজন?

আমি কেবলমাত্র রেলের অ্যাক্টিভেকর্ডের সাথেই পরিচিত, এটি ব্যবহারের প্রসঙ্গে উত্থাপিত সমস্ত অভিযোগের সমাধানের চেষ্টা করব।

@BlaM

অ্যাক্টিভ রেকর্ডগুলির সাথে আমি যে সমস্যাটি দেখি তা হ'ল এটি সর্বদা কেবল একটি টেবিলের প্রায়

কোড:

class Person
    belongs_to :company
end
people = Person.find(:all, :include => :company )

এটি এসকিউএল সহ জেনারেট করে LEFT JOIN companies on companies.id = person.company_idএবং স্বয়ংক্রিয়ভাবে সম্পর্কিত সংস্থাগুলি উত্পন্ন করে যাতে আপনি করতে পারেন people.first.companyএবং ডেটাবেস হিট করার প্রয়োজন নেই কারণ ডেটা ইতিমধ্যে উপস্থিত রয়েছে।

@ pix0r

অ্যাক্টিভ রেকর্ড সহ অন্তর্নিহিত সমস্যা হ'ল ডেটাবেস কোয়েরিগুলি স্বয়ংক্রিয়ভাবে উত্পন্ন এবং কার্যকর করা হয় বস্তু জনবসতি করতে এবং ডাটাবেস রেকর্ডগুলি সংশোধন করতে

কোড:

person = Person.find_by_sql("giant complicated sql query")

এটি কুৎসিত হওয়ায় নিরুৎসাহিত করা হচ্ছে তবে আপনি কেবল সাদামাটা এবং কেবল কাঁচা এসকিউএল লেখার প্রয়োজন সেখানে এটি খুব সহজেই সম্পন্ন হয়েছে।

@ টিম সুলিভান

... এবং আপনি মডেলের বেশ কয়েকটি উদাহরণ নির্বাচন করেছেন, আপনি মূলত একটি "নির্বাচন করুন ..." থেকে করছেন

কোড:

people = Person.find(:all, :select=>'name, id')

এটি কেবল ডাটাবেস থেকে নাম এবং আইডি কলামগুলি নির্বাচন করবে, ম্যাপযুক্ত অবজেক্টগুলিতে থাকা সমস্ত অন্যান্য 'অ্যাট্রিবিউটস' কেবল শূন্য হবে, যদি না আপনি নিজে নিজে সেই বস্তুটি পুনরায় লোড করেন, ইত্যাদি।


বলশালী! আমি নির্দিষ্ট বৈশিষ্ট্য সম্পর্কে জানতাম না। তবুও আমার কাছে অস্ত্রাগার রাখার জন্য আর-এআর-এর পক্ষে যুক্তি।
টিম সুলিভান

যোগদান সক্রিয় রেকর্ড প্যাটার্ন অতিক্রম করে।
জিমি টি।

"পার্সন.ফাইন্ড_বি_এসকিউএল" মোটেও সক্রিয় রেকর্ড প্যাটার্ন নয়। এটির বেশিরভাগ "অ্যাক্টিভ রেকর্ড" আমাকে ব্যর্থ করেছিল তাই আমার এটি ম্যানুয়ালি প্যাচ করা দরকার।
magallanes

52

আমি সর্বদা খুঁজে পেয়েছি যে অ্যাক্টিভেকর্ড দ্রুত সিআরইউডি-ভিত্তিক অ্যাপ্লিকেশনগুলির জন্য ভাল যেখানে মডেল তুলনামূলকভাবে সমতল (যেমন, অনেক শ্রেণীর স্তরক্রম নয়)। তবে জটিল ওও শ্রেণিবিন্যাসের সাথে অ্যাপ্লিকেশনগুলির জন্য, একটি ডেটা ম্যাপার সম্ভবত এটি আরও ভাল সমাধান। অ্যাক্টিভেকর্ডটি আপনার টেবিলগুলি এবং আপনার ডেটা অবজেক্টগুলির মধ্যে 1: 1 অনুপাত অনুমান করে, এই জাতীয় সম্পর্কটি আরও জটিল ডোমেনগুলির সাথে অনর্থক হয়ে যায়। নিদর্শন সম্পর্কিত তার বইয়ে , মার্টিন ফোলার নির্দেশ করেছেন যে অ্যাক্টিভেকর্ড এমন পরিস্থিতিতে বাছতে থাকে যেখানে আপনার মডেল মোটামুটি জটিল, এবং বিকল্প হিসাবে একটি ডেটা ম্যাপারকে পরামর্শ দেয় ।

আমি বাস্তবে এটি সত্য বলে খুঁজে পেয়েছি। ক্ষেত্রে, যেখানে আপনার ডোমেনে আপনার অনেক উত্তরাধিকার রয়েছে, আপনার আরডিবিএমএসের উত্তরাধিকার মানচিত্রের সাথে ম্যাসেজ করা অ্যাসোসিয়েশন বা সংস্থার চেয়ে বেশি শক্ত।

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

একটি অ্যাক্টিভেকর্ড স্টাইল এপিআই ব্যবহার করে সরাসরি ইউজার অবজেক্টটি লোড করা এবং ডেটা অ্যাক্সেস করার পরিবর্তে, আপনার কন্ট্রোলার কোড উদাহরণস্বরূপ, ইউজারম্যাপার.জেটউজার () পদ্ধতির API এ ফোন করে কোনও ব্যবহারকারী অবজেক্টটি পুনরুদ্ধার করে। এটি সেই ম্যাপার যা তাদের সম্পর্কিত টেবিলগুলি থেকে কোনও সম্পর্কিত অবজেক্ট লোড করার জন্য এবং সম্পূর্ণ ব্যবহারকারী "ডোমেন" বস্তুকে কলারের কাছে ফিরিয়ে দেওয়ার জন্য দায়বদ্ধ।

মূলত, আপনি কোডটি আরও পরিচালনাযোগ্য করতে কেবল বিমূর্ততার আরও একটি স্তর যুক্ত করছেন। আপনার ডেটাম্যাপার ক্লাসগুলিতে কাঁচা কাস্টম এসকিউএল রয়েছে, বা কোনও ডেটা অ্যাস্ট্রাকশন লেয়ার এপিআইতে কল করা, বা এমনকি একটি অ্যাক্টিভেকর্ড প্যাটার্ন অ্যাক্সেস করা হোক না কেন, কন্ট্রোলার কোডটি কোনও সুন্দর, জনবহুল ব্যবহারকারীর অবজেক্টটি গ্রহণ করছে তা আসলেই বিবেচ্য নয়।

যাইহোক, আমি এটি এটি কিভাবে।


5
আপনার মতামতগুলি কেবল অ্যাক্টিভেকর্ডের সাথে অপরিচিত। "অ্যাক্টিভেকর্ডটি আপনার টেবিলগুলির মধ্যে 1: 1 অনুপাত অনুমান করে"। সহজভাবে মোটেও সত্য নয়। অ্যাক্টিভেকর্ডে সব ধরণের উবার-অসাধারণ সম্পর্কযুক্ত যাদু রয়েছে। দেখুন api.rubyonrails.org/classes/ActtiveRecord/Associations/…
tybro0103

16
@ জোওব্রেগানিয়া - সম্ভবত একটি ব্যঙ্গাত্মক মন্তব্যের পরিবর্তে, আপনি যখন কারও ডেটা তীক্ষ্ণ করা হয় তখন যে সমস্যাগুলি ঘটে থাকে তা আপনি আসলে ব্যাখ্যা করতে পারেন - যাতে আমাদের বাকী কিছু শিখতে পারে :)
তারিন পূর্ব

11

আমি মনে করি কেন অ্যাক্টিভেকর্ডে লোকেরা "ঘৃণা" করছে এবং এর সাথে কী "ভুল" হচ্ছে তার মধ্যে কারণগুলির খুব আলাদা সেট রয়েছে।

ঘৃণার ইস্যুতে, রেল সম্পর্কিত যে কোনও জিনিসের প্রতি প্রচুর পরিমাণে বিষ রয়েছে। এতে যতটা সমস্যা রয়েছে ততটুকু সম্ভবত এটি সমস্ত প্রযুক্তির মতো এবং এমন পরিস্থিতি রয়েছে যেখানে এটি একটি ভাল পছন্দ এবং পরিস্থিতি যেখানে আরও ভাল পছন্দ রয়েছে। আমার অভিজ্ঞতা হিসাবে আপনি যখন রেলস অ্যাক্টিভেকর্ডের বেশিরভাগ বৈশিষ্ট্যের সুবিধা গ্রহণ করতে না পান সেই পরিস্থিতিটিই যেখানে ডাটাবেসটি খারাপভাবে কাঠামোগত রয়েছে। আপনি যদি প্রাথমিক কীগুলি ছাড়াই ডেটা অ্যাক্সেস করে থাকেন তবে এমন জিনিসগুলি যা প্রথম স্বাভাবিক ফর্ম লঙ্ঘন করে, যেখানে ডেটা অ্যাক্সেস করার জন্য প্রচুর পরিমাণে সঞ্চিত পদ্ধতি ব্যবহার করা হয়, আপনি কেবলমাত্র এসকিউএল র‌্যাপারের চেয়ে বেশি এমন কিছু ব্যবহার করা ভাল। যদি আপনার ডাটাবেস তুলনামূলকভাবে সুসংগঠিত হয় তবে অ্যাক্টিভেকর্ড আপনাকে এর সুবিধা নিতে দেয়।

এমন মন্তব্যকারীদের জবাব দেওয়ার প্রতিপাদ্য যোগ করতে যারা বলে যে কোড স্নিপেট পুনর্নির্মাণের সাথে অ্যাক্টিভেকর্ডে জিনিসগুলি শক্ত say

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

user = User.find(id, :include => ["posts", "comments"])
first_post = user.posts.first
first_comment = user.comments.first

অন্তর্ভুক্ত বিকল্পটি ব্যবহার করে অ্যাক্টিভেকর্ড আপনাকে ডিফল্ট অলস-লোডিং আচরণটি ওভাররাইড করতে দেয়।


8

আমার দীর্ঘ এবং দেরী উত্তর, এমনকি সম্পূর্ণ নয়, তবে একটি ভাল ব্যাখ্যা কেন আমি এই নিদর্শন, মতামত এবং কিছু আবেগকে ঘৃণা করি:

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় ফ্রেমে চিন্তা করেন ("প্রকল্পে দশ বছর আগে এটি ভালভাবে কাজ করেছিল .."), তারা সত্তাগুলি তৈরি করতে পারে, তারা সত্তার সম্পর্ককে সংজ্ঞায়িত করতে পারে, তারা ডেটা সম্পর্কগুলি ভেঙে দিতে পারে এবং বেসিক অ্যাপ্লিকেশনটির যুক্তি সংজ্ঞায়িত করতে পারে তবে তারা থামতে পারে এবং এটি আপনাকে হস্তান্তর করুন, এবং আপনার যা প্রয়োজন তা মনে করুন ... এগুলি প্রায়শই অ্যাপ্লিকেশন লজিক, ইউজার ইন্টারফেস, ব্যবহারযোগ্যতা এবং আরও অনেক কিছু সম্পর্কে সম্পূর্ণ ধারণার অভাব হয় ... তাদের মধ্যে বড় দৃষ্টিভঙ্গি নেই এবং তাদের প্রতি ভালবাসার অভাব রয়েছে বিশদ বিবরণ এবং তারা আপনাকে এআর-এর জিনিসগুলি অনুসরণ করতে চায়, কারণ .. ভাল, কেন, এটি বহু বছর আগে এই প্রকল্পে কাজ করেছিল, এটি লোককে ব্যস্ত এবং নীরব রাখে? আমি জানি না। তবে "বিশদ" ছেলেদের থেকে পুরুষদের আলাদা করুন, বা .. মূল বিজ্ঞাপনের স্লোগানটি কেমন ছিল? ;-)

বহু বছর পরে (সক্রিয় বিকাশের দশ বছরের অভিজ্ঞতা) পরে যখনই কোনও গ্রাহক "সক্রিয় রেকর্ড প্যাটার্ন" উল্লেখ করেন, আমার অ্যালার্ম বেল বাজে। আমি তাদের সেই প্রয়োজনীয় ধারণাগত পর্যায়ে ফিরিয়ে আনতে চেষ্টা করতে শিখেছি , তাদের দু'বার চিন্তা করতে দাও, তাদের ধারণাগত দুর্বলতাগুলি দেখানোর চেষ্টা করুন বা যদি তারা উদ্বেগজনক হয় তবে এগুলি এড়িয়ে চলুন (শেষ পর্যন্ত, আপনি জানেন যে এমন কোনও গ্রাহক যা এখনও করেননি এটি কী চায় তা জানেন, এমনকি এমনকি এটি জানেন বলেও মনে করে বা আমার কাছে বিনা মূল্যে ধারণার কাজটি বহিরাগত করার চেষ্টা করে, আমার অনেক মূল্যবান ঘন্টা, দিন, সপ্তাহ এবং মাস আমার ব্যয় করে, লাইভ খুব ছোট ...)।

সুতরাং, পরিশেষে: এই সমস্ত কারণেই আমি সেই নির্বাক "সক্রিয় রেকর্ড প্যাটার্ন" ঘৃণা করি এবং যখনই সম্ভব হয় আমি তা এড়াতে চাই।

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

এই প্যাটার্নটি সিনট্যাকটিক চিনির সাথে নমনীয়তা প্রতিস্থাপন করে!

এটি ভেবে দেখুন, এআর আপনার জন্য কোন সমস্যার সমাধান করে?


1
এটি একটি ডেটা উত্সের স্থাপত্য নিদর্শন pattern সম্ভবত আপনার এন্টারপ্রাইজ অ্যাপ্লিকেশন আর্কিটেকচারের ফোলার্সের প্যাটার্নগুলি পড়া উচিত? প্রকৃতপক্ষে প্যাটার্ন / ওআরএম ব্যবহার করা এবং এটি কতটা সরল করে তোলে তা অনুসন্ধান করার আগে আমার আপনার একই ধারণা ছিল।
ম্যাটএমসিএকনাইট

1
আমি আপনার অনুভূতি শেয়ার করছি। যখন কোনও ফ্রেমওয়ার্ক যৌগিক কীগুলি সমর্থন করে না তখন আমি কিছু ভুল গন্ধ পেয়েছি .... এসকিউএলএলচেমির আগে আমি কোনও ধরণের ওআরএম এড়িয়ে গিয়েছিলাম এবং আমরা প্রায়শই এটি এসকিউএল জেনারেটর হিসাবে নিম্ন স্তরে ব্যবহার করি। এটি ডেটা ম্যাপার প্রয়োগ করে এবং খুব নমনীয়।
মার্কো মারিয়ানি

1
যেহেতু আমি দু'দিন ধরে এমন একটি প্রকল্পের সাথে জড়িত যা "স্টেট অফ দ্য-আর্ট" ওআরএম ব্যবহার করে, সম্ভবত বাস্তবায়নগুলি এখন পরিপক্ক হয়েছে (কিছু বছর আগে আমি যা করেছি তার সাথে তুলনায়)। হতে পারে, আমার মন পরিবর্তন হবে, আমরা তিন মাসের মধ্যে দেখতে পাব :-)
ফ্রুনসী

2
প্রকল্পটি সম্পন্ন হয়েছে, এবং আপনি কি জানেন? ওআরএম এখনও চুষে ফেলে, ম্যাপিংয়ের সমস্যাগুলির সাথে আমি এতটা সময় নষ্ট করি যা সহজেই "অবজেক্ট-ওরিয়েন্টেড কোড" এর একগুচ্ছের সাথে সম্পর্কিতভাবে প্রকাশ করা হয়। ওয়েল, অবশ্যই ওআরএম একটি ধরণের ওওপি + এসকিউএল-মিক্সের মধ্যে কোয়েরি প্রকাশ করার উপায় সরবরাহ করেছিল - অবশ্যই একটি ওওপি-জাতীয় সিনট্যাক্সে - তবে এটি কেবল এসকিউএল কোয়েরি লেখার চেয়ে বেশি সময় নিয়েছিল। বিমূর্ততা ফাঁস, OOP এর শীর্ষে "OOPSQLExperiment" - ব্যবহারকারীদের ওওপি সিনট্যাক্সে এসকিউএল লেখার অনুমতি দেওয়ার জন্য এটি ছিল সবচেয়ে খারাপ ধারণা। না, আর কখনও হবে না।
ফ্রুনসী

1
আমি বহু বছরের জন্য প্রতিটি কাঁচা এসকিউএল লিখেছি। রেল এআর আমাকে মাঝে মাঝে হতাশ করে এবং নিষ্ক্রিয় অনুসন্ধানের জন্য আমি আপনার সাথে প্রায় একমত কিন্তু এটিই এটি সমাধান করে: 1) ডেটা সংরক্ষণ করা যথেষ্ট শক্ত করে তোলে যা বৈধতা ব্যর্থ করে। 2) শেষ থেকে এখনও স্মৃতিতে কি পরিবর্তন হয়েছে তা অনুসরণ করা। 3) পয়েন্ট 2 ব্যবহার before_saveকরে রেকর্ডের মধ্যে ধারাবাহিকতা বজায় রাখতে বুদ্ধিমান কলব্যাকগুলি লিখতে 4) after_commitবাহ্যিক পরিষেবা ট্রিগারগুলির জন্য হুক। ৫) ডিডিএল পরিবর্তনগুলি পরিবর্তন (মাইগ্রেশন) এ সংগঠিত করার জন্য একটি ভাল ডিএসএল। (সেখানে এখনও ব্যথা রয়েছে তবে> 1 বিকাশকারী যখন কোনও প্যাটার্ন না থাকা আরও খারাপ))
অমানবশ

6

কিছু বার্তা আমাকে বিভ্রান্ত করছে। কিছু উত্তর "ওআরএম" বনাম "এসকিউএল" বা এর মতো কিছুতে চলেছে।

আসল বিষয়টি হ'ল এআর হ'ল একটি সরলকরণ প্রোগ্রামিং প্যাটার্ন যেখানে আপনি সেখানে নিজের ডাটাবেস অ্যাক্সেস কোড লেখার জন্য ডোমেন অবজেক্টের সুবিধা গ্রহণ করেন।

এই অবজেক্টগুলিতে সাধারণত ব্যবসায়িক বৈশিষ্ট্য (শিমের বৈশিষ্ট্য) এবং কিছু আচরণ (এমন পদ্ধতি যা সাধারণত এই বৈশিষ্ট্যগুলিতে কাজ করে) থাকে।

এআর কেবল ডাটাবেস সম্পর্কিত কার্যগুলিতে "এই ডোমেন অবজেক্টগুলিতে কিছু পদ্ধতি যুক্ত করুন" বলেছে।

এবং আমার বলতে হবে, আমার মতামত এবং অভিজ্ঞতা থেকে, যে প্যাটার্নটি আমি পছন্দ করি না।

প্রথম দর্শনে এটি বেশ ভাল শোনাতে পারে। স্প্রিং রু এর মতো কয়েকটি আধুনিক জাভা সরঞ্জামগুলি এই প্যাটার্নটি ব্যবহার করে।

আমার জন্য, আসল সমস্যাটি কেবল ওওপি উদ্বেগ নিয়ে। এআর প্যাটার্ন আপনাকে কোনওভাবে ইনফ্রাস্ট্রাকচার অবজেক্টগুলিতে আপনার অবজেক্ট থেকে নির্ভরতা যুক্ত করতে বাধ্য করে। এই ইনফ্রাস্ট্রাকচার অবজেক্টগুলি এআর দ্বারা প্রস্তাবিত পদ্ধতিগুলির মাধ্যমে ডোমেনটিকে ডাটাবেসটি জিজ্ঞাসা করতে দেয়।

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

এআর এর স্প্রিং রু বাস্তবায়ন আকর্ষণীয়, কারণ এটি নিজেই বস্তুর উপর নির্ভর করে না, তবে কিছু AspectJ ফাইলগুলিতে। তবে পরে যদি আপনি আরুর সাথে কাজ করতে না চান এবং প্রকল্পটি রিফ্যাক্টর করতে চান তবে এআর পদ্ধতিগুলি আপনার ডোমেন অবজেক্টগুলিতে সরাসরি প্রয়োগ করা হবে।

আর একটি দৃষ্টিভঙ্গি। কল্পনা করুন যে আমরা আমাদের অবজেক্টগুলি সঞ্চয় করতে কোনও সম্পর্কিত ডেটাবেস ব্যবহার করি না। কল্পনা করুন অ্যাপ্লিকেশনটি আমাদের ডোমেন অবজেক্টগুলিকে কোনও নোএসকিউএল ডেটাবেস বা কেবলমাত্র এক্সএমএল ফাইলগুলিতে সঞ্চয় করে। আমরা কি আমাদের ডোমেন অবজেক্টগুলিতে এই কাজগুলি করার পদ্ধতিগুলি প্রয়োগ করব? আমি মনে করি না (উদাহরণস্বরূপ, এক্সএমের ক্ষেত্রে, আমরা আমাদের ডোমেন অবজেক্টগুলিতে এক্সএমএল সম্পর্কিত নির্ভরতা যুক্ত করব ... সত্যই দুঃখের সাথে আমি মনে করি)। তারপরে আর প্যাটার্নটি যেমন বলে, তখন কেন আমাদের ডোমেন অবজেক্টে রিলেশনাল ডিবি পদ্ধতি প্রয়োগ করতে হবে?

সংক্ষেপে, এআর প্যাটার্নটি ছোট এবং সাধারণ অ্যাপ্লিকেশনগুলির জন্য সহজ এবং ভাল শোনায়। তবে, যখন আমাদের জটিল এবং বৃহত্তর অ্যাপ্লিকেশন রয়েছে, তখন আমি মনে করি শাস্ত্রীয় স্তরযুক্ত আর্কিটেকচারটি আরও ভাল পদ্ধতির।


তাই আপনাকে স্বাগতম। আপনার মন্তব্যটির প্রশংসা করেছেন কিন্তু এই প্রশ্নটি গঠনমূলক না হিসাবে বন্ধ করা হয়েছে নুল ইউজারএক্সেপশন দ্বারা 17 ডিসেম্বর '11 এ 1:17
টনি

3

প্রশ্নটি সক্রিয় রেকর্ড ডিজাইন প্যাটার্ন সম্পর্কে। কোনও orm সরঞ্জাম নয়।

আসল প্রশ্নটি রেলের সাথে ট্যাগ হয় এবং টুইটারকে বোঝায় যা রবিলে রুবিতে নির্মিত। রেলের মধ্যে অ্যাক্টিভেকর্ড ফ্রেমওয়ার্ক হ'ল ফোলারের অ্যাক্টিভ রেকর্ড ডিজাইন নকশার প্রয়োগ implementation


2

অ্যাক্টিভ রেকর্ড সম্পর্কে অভিযোগের সাথে আমি যে প্রধান জিনিসটি দেখেছি তা হ'ল আপনি যখন কোনও টেবিলের চারপাশে একটি মডেল তৈরি করেন এবং আপনি মডেলের বেশ কয়েকটি উদাহরণ নির্বাচন করেন, আপনি মূলত একটি "নির্বাচন করুন ..." থেকে করছেন। এটি কোনও রেকর্ড সম্পাদনা করার জন্য বা রেকর্ড প্রদর্শনের জন্য ঠিক আছে, তবে আপনি যদি চান, বলতে, আপনার ডাটাবেসে সমস্ত পরিচিতির জন্য শহরের একটি তালিকা প্রদর্শন করতে চান, আপনি "সিটি সিলেক্ট ..." করতে পারেন এবং কেবল শহরগুলি পেতে পারেন । অ্যাক্টিভ রেকর্ড সহ এটি করার জন্য আপনি সমস্ত কলামগুলি নির্বাচন করছেন তবে কেবল শহর ব্যবহার করবেন।

অবশ্যই, বিভিন্ন বাস্তবায়ন এটিকে অন্যভাবে পরিচালনা করবে। তবুও, এটি একটি ইস্যু।

এখন, আপনি যে নির্দিষ্ট জিনিসটি করার চেষ্টা করছেন তার জন্য একটি নতুন মডেল তৈরি করে আপনি এটি পেতে পারেন তবে কিছু লোক যুক্তি দেখিয়েছেন যে এটি সুবিধার চেয়ে বেশি প্রচেষ্টা than

আমি, আমি সক্রিয় রেকর্ড খনন করি। :-)

আছে HTH


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

1

আমি সাবসনিক এক কলামে কেবল জিনিসটিই পছন্দ করি।
উভয় ক্ষেত্রেই

DataBaseTable.GetList(DataBaseTable.Columns.ColumnYouWant)

, বা:

Query q = DataBaseTable.CreateQuery()
               .WHERE(DataBaseTable.Columns.ColumnToFilterOn,value);
q.SelectList = DataBaseTable.Columns.ColumnYouWant;
q.Load();

অলস লোডিংয়ের বিষয়টি আসে তবে লিনক এখনও রাজা is


1

@ ব্লেম: কখনও কখনও আমি যোগদানের ফলে সক্রিয় রেকর্ড কার্যকর করেছিলাম। সর্বদা সম্পর্ক টেবিল হতে হবে না <--> সক্রিয় রেকর্ড। "যোগদানের বিবৃতিটির ফলাফল" কেন নয় <<> সক্রিয় রেকর্ড?


1

আমি ডিজাইনের ধরণ হিসাবে সক্রিয় রেকর্ড সম্পর্কে কথা বলতে যাচ্ছি, আমি আরওআর দেখিনি n't

কিছু বিকাশকারী অ্যাক্টিভ রেকর্ডকে ঘৃণা করে, কারণ তারা পরিষ্কার এবং ঝরঝরে কোড লেখার বিষয়ে স্মার্ট বই পড়ে এবং এই বইগুলিতে বলা হয় যে সক্রিয় রেকর্ডটি একক শ্বাসনশীলতার নীতি লঙ্ঘন করে, ডিডিডি বিধি লঙ্ঘন করে যে ডোমেন অবজেক্টটি দৃ ign়ভাবে অজ্ঞ থাকতে হবে এবং এই জাতীয় বই থেকে অনেকগুলি বিধি রয়েছে lates ।

অ্যাক্টিভ রেকর্ডে দ্বিতীয় জিনিসটির ডোমেন অবজেক্টগুলি ডেটাবেস সহ 1-থেকে -1 থাকে, এটি কোনও কোনও সিস্টেমে সীমাবদ্ধতা হিসাবে বিবেচিত হতে পারে (বেশিরভাগ এন-টায়ার)।

এটি কেবল বিমূর্ত জিনিসগুলি, আমি এই ধরণের বাস্তবের বাস্তবায়নকে রেলপথে রুবিকে দেখিনি।


0

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

হ্যাঁ, যোগদানের সাধারণত খারাপ চেয়ে কোন সব সময়ে যোগদানের যখন এটি কর্মক্ষমতা আসে, কিন্তু যোগদানের সাধারণত বেশী ভালো "জাল" যোগদানের প্রথম পুরো টেবিল একটি পড়া ও তারপর অর্জন তথ্য ব্যবহার করে পড়া এবং ফিল্টার টেবিল বি দ্বারা


@ ব্ল্যাম: আপনি একেবারে ঠিক বলেছেন। যদিও আমি কখনও অ্যাক্টিভ রেকর্ড ব্যবহার করি নি, আমি অন্যান্য বোল্টড অন ওআরএম সিস্টেমগুলি (বিশেষত এনএইচবারনেট) ব্যবহার করেছি, এবং আমার কাছে আরও দুটি বড় অভিযোগ রয়েছে: অবজেক্ট তৈরির বোকামি উপায় (যেমন, .hbm.xML ফাইল, যার প্রতিটি পাওয়া যায়) তাদের নিজস্ব সমাবেশে সংকলিত) এবং পারফরম্যান্সটি কেবল লোডিং অবজেক্টগুলিকে ব্যয় করে (এনএইচবারনেট এক সিকিওর কোর প্রসকে কয়েক সেকেন্ডের জন্য এমন কোনও কোয়েরি চালাতে পারে যা কিছুতেই বোঝা যায় না, যখন কোনও সমতুল্য এসকিউএল কোয়েরি প্রায় কোনও প্রক্রিয়াজাত করে না)। অবশ্যই অ্যাক্টিভ রেকর্ডের সাথে সুনির্দিষ্ট নয়, তবে আমি বেশিরভাগ ওআরএম সিস্টেমগুলি (এবং
ওআরএম

Hbm.xML ফাইল ব্যবহার করার জন্য অনেকগুলি বিকল্প রয়েছে। উদাহরণস্বরূপ এনএইচবারনেট.ম্যাপিং দেখুন ttপরিচয় এবং সাবলীল-নিবারনেট n
মৌরিসিও শেফার

অবজেক্ট তৈরির পারফরম্যান্স সম্পর্কে, আমি কখনও এ জাতীয় পারফেক্ট সমস্যায় পড়ি না, আপনি কোনও প্রোফাইলারের সাথে চেক করতে চান।
মৌরিসিও শেফার

@ মাউশ: প্রোফাইলারের দরকার নেই। এটি মোটামুটি সুপরিচিত একটি সমস্যা। এটি সর্বশেষতম সংস্করণে প্রযোজ্য কিনা তা জানেন না (যা আমি এখনও আমার কাজে ব্যবহার করছি না)। ayende.com/Blog/archive/2007/10/26/…
TheSmurf

4
ব্যবহার করে: যোগ দেয় বা: আইআই গ্রাহকফাইন্ড (: সমস্ত, অন্তর্ভুক্ত =>: পরিচিতি,: শর্তাবলী => "সক্রিয় = 1") এর মধ্যে একটি এসকিউএল যোগদান করবে, কোনওটির পুরো টেবিল স্ক্যান নয়।
টাইলেন্ডর

0

অ্যাক্টিভেকর্ডের সমস্যাটি হ'ল এটি আপনার জন্য স্বয়ংক্রিয়ভাবে উত্পন্ন উত্পন্ন প্রশ্নগুলি পারফরম্যান্স সমস্যার কারণ হতে পারে।

আপনি প্রশ্নগুলি অনুকূল করতে কিছু অনিচ্ছাকৃত কৌশল অবলম্বন করছেন যা ভাবছেন যে আপনি যদি জিজ্ঞাসাটি লিখতে আরও বেশি কার্যকর হয়ে যেতেন তবে প্রথম দিকে।


0

যদিও এসকিউএল অপ্টিমাইজেশান সম্পর্কিত অন্যান্য সমস্ত মন্তব্য অবশ্যই বৈধ, তবে সক্রিয় রেকর্ড প্যাটার্নের সাথে আমার মূল অভিযোগ হ'ল এটি সাধারণত প্রতিবন্ধকতা মেলে না । আমি আমার ডোমেনটি পরিষ্কার এবং সঠিকভাবে এনপ্যাপসুলেটেড রাখতে পছন্দ করি যা সক্রিয় রেকর্ড প্যাটার্নটি সাধারণত সমস্ত কাজের আশা নষ্ট করে দেয়।


অ্যাক্টিভেকর্ডটি আসলে একটি সম্পর্কিত সম্পর্কের স্কিমার বিরুদ্ধে আপনাকে ওও ফ্যাশনে কোড দেওয়ার মাধ্যমে প্রতিবন্ধকতা ম্যাচমিচ সমস্যাটি সমাধান করে।
মৌরিসিও শেফার

বিশদ যত্ন? সাধারণ sensক্যমত্য হ'ল যে কোনও সম্পর্কযুক্ত ডাটাবেসের পরে তৈরি করা বস্তুগুলি সংজ্ঞা অনুসারে বস্তু ভিত্তিক নয় (যেহেতু সম্পর্কিত ডেটাবেসগুলি ওও ধারণাগুলি যেমন উত্তরাধিকার এবং পলিমারফিজমের চারদিকে ঘোরে না)।
কেভিন পানং

একটি সম্পর্কিত স্কিমায় উত্তরাধিকার মানচিত্রের তিনটি উপায় আছে ways রেফ: কাস্ত্রপ্রজেক্ট.আর
মরিসিও শেফার

আমি মনে করি আপনি অ্যাক্টিভ রেকর্ড ডিজাইনের প্যাটার্নের জন্য ক্যাসল অ্যাক্টিভ রেকর্ড ওএসএস প্রকল্পটিকে ভুল করছেন। মূল প্রশ্নটি (এবং আমার প্রতিক্রিয়া) নকশার প্যাটার্নটি উল্লেখ করছে। ক্যাসল অ্যাক্টিভ রেকর্ড প্রকল্পে ওও উন্নয়নে সহায়তা করার জন্য এতে কিছু বেকড রয়েছে তবে প্যাটার্নটি নিজেই তা করে না।
কেভিন পাং

আমি কেবল ক্যাসেলকে রেফারেন্স হিসাবে উদ্ধৃত করছিলাম। আরআর এর অ্যাক্টিভেকর্ড কেবলমাত্র একক টেবিলের উত্তরাধিকার প্রয়োগ করে ( মার্টিনফাউলর / আইএগ্যাটালগাল / সান্টেবল ইনহিরিট্যান্স এইচটিএমএল ), তবে অন্যান্য কৌশলগুলি বিবেচনা করা হচ্ছে ( blog.zerosum.org/2007/2/16/… )
মরিসিও

0

বহু বহু বহু সম্পর্কের সাথে অনেকগুলি করার চেষ্টা করুন। এত সহজ নয়. বিশেষত যখন আপনি এসটিআই ব্যবহার করছেন না।

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