অ্যাক্টিভেকর্ড প্যাটার্নটি কি SOLID নকশার নীতিগুলি অনুসরণ / উত্সাহিত করে?


43

আমি কিনা ActiveRecord প্যাটার্ন আগ্রহী পাগল নেভিগেশন রুবি বিখ্যাত তৈরী উদ্দীপনা জাগায় বা ব্যবহার discourages কঠিন নকশা নীতির।

উদাহরণস্বরূপ, এটি আমার কাছে মনে হয় যে অ্যাক্টিভেকর্ড অবজেক্ট উভয় ক্ষেত্রেই ডোমেন লজিক এবং অধ্যবসায় যুক্তি রয়েছে যা একক দায়িত্বের লঙ্ঘন।


6
২০০৯ রুবি সম্মেলনে সলিড রুবি টকের শেষে জিম ওয়েইরিচ শ্রোতাদের জিজ্ঞাসা করেছেন: "অ্যাক্টিভেকর্ড অবজেক্টগুলি একটি ডোমেন ধারণা এবং একটি অধ্যবসায় ধারণার প্রয়োগ করে। এটি কি এসআরপি (একক দায়িত্বের নীতিমালা) লঙ্ঘন করে?" শ্রোতারা সম্মত হন যে এটি এসআরপি লঙ্ঘন করে না। জিম জিজ্ঞাসা করে এটি কি তাদের বিরক্ত করে। দর্শকদের অনেক সদস্য হ্যাঁ বলে say কেন? এটি পরীক্ষা আরও শক্ত করে তোলে। এটি অধ্যবসায়কে অনেক ভারী করে তোলে।
ডেভিড জে

উত্তর:


56

অ্যাক্টিভেকর্ডে কিছু বৈধ সমালোচনা আছে। সর্বদা হিসাবে, চাচা বব একেবারে নিখুঁতভাবে যোগ করেছেন :

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

অন্যদিকে, অনেকে তাদের অ্যাক্টিভ রেকর্ড ক্লাসে ব্যবসায়ের নিয়ম পদ্ধতি রাখেন; যা তাদেরকে বস্তু হিসাবে উপস্থিত করে তোলে। এটি একটি দ্বিধা বাড়ে। সক্রিয় রেকর্ডটি লাইনের কোন দিকে পড়ে? এটা কি কোন বস্তু? নাকি এটি কোনও ডেটা স্ট্রাকচার?

উইকিপিডিয়া একটি টেস্টিবিলিটি উদ্বেগের সমালোচনাটিকে সমষ্টি করে :

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

বিশেষত: রুবেল অন রেল বাস্তবায়নের জন্য, গ্যাভিন কিং লিখেছেন (জোর দেওয়া খনি):

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

এছাড়াও রুবেল অন রেল বাস্তবায়নের বিষয়ে জন জানুসস্কাক লিখেছেন (জোর দেওয়া খনি):

সমস্যা # 1: স্থিতিশীল পদ্ধতি

...

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

সমস্যা # 2: বিশ্বব্যাপী কনফিগারেশন সেটিং

...

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

অ্যাক্টিভেকর্ড এবং ওআরএমকে কেন সাধারণত বিরোধী-নিদর্শন হিসাবে বিবেচনা করা হয় সে সম্পর্কে আরও কয়েকটি সংস্থান:

অ্যাক্টিভেকর্ড সর্বদা একটি অত্যন্ত কার্যকর অ্যান্টি-প্যাটার্নের মতো অনুভূত হয়েছিল , তবে আমি সম্মত হই যে এটি এসআরপি এবং সংযোজনবিরোধীর বিরুদ্ধে যায় যে এটি নির্ভরতা বিপরীত নীতির বিরুদ্ধে যায়।


রেল 5+ এর জন্য গুরুত্বপূর্ণ আপডেট: "এবং কীভাবে আমার আইডিই সেগুলি স্বয়ংক্রিয়ভাবে পূর্ণ করতে পারে? অবশ্যই, রেল লোকেরা এই প্রশ্নের একটি দ্রুত উত্তর দিতে পারে ওহ, কেবলমাত্র আপনার ডাটাবেস ক্লায়েন্টকে জ্বালিয়ে দিন এবং ডাটাবেসটিতে সন্ধান করুন!" বৈধ নয় আর। বৈশিষ্ট্যগুলি এপিআই সহ আপনি মডেলটিতে সমস্ত উপলব্ধ কলামগুলি সংজ্ঞায়িত করতে পারেন
ফিলিপ বার্তুজি

6

(আমি ধরে নিচ্ছি যে অ্যাক্টিভেকর্ড শ্রেণি নির্ভরতা ইনজেকশনের কোনও সম্ভাবনা ছাড়াই বাস্তবায়িত হয়েছে)।

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

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

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