এমভিসিতে আমার কোথায় এপিআই অনুরোধ করা উচিত?


25

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

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

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

তো, আপনি কি আমাকে সে সম্পর্কে কিছু ইঙ্গিত দিতে পারেন? এবং দয়া করে, আপনি কি আমাকে বলতে পারেন যে আমি এমভিসি আর্কিটেকচার সম্পর্কে কিছু ভুল করছি?


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

2
ডাটাবেজ? তথ্য সূত্র? এটি ঠিক তথ্য।

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

2
এছাড়াও, আপনার ফ্রন্টএন্ড জাভাস্ক্রিপ্ট কোড থেকে এপিআই কল করার বিষয়ে বিবেচনা করুন এবং এটি আপনার ব্যাকএন্ড "এমভিসি" স্টাফটি একেবারেই স্পর্শ না করে।
রিমকো জারলিচ

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

উত্তর:


37

মডেলটি ডাটাবেসের সাথে কথোপকথনের মধ্যে সীমাবদ্ধ নয়, মডেলটি ডেটা পাওয়ার এবং হেরফেরের জন্য দায়ী।

সুতরাং, আপনার দৃষ্টিভঙ্গি এবং নিয়ামকের কাছে, কোনও তাত্পর্য হওয়া উচিত নয়, যদি ডেটাটি ডাটাবেস থেকে বা ওয়েবসার্ভিস থেকে আসে বা সম্পূর্ণরূপে এলোমেলো হয়, সুতরাং আপনার এটি মডেলে করা উচিত।

এমভিসি একটি উপস্থাপনা প্যাটার্ন, যা কেবলমাত্র বিভিন্ন উপস্থাপনা স্তরকে পৃথক করে।

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

আপনার মডেলটিতে একটি সর্বজনীন পদ্ধতি এর মতো কাঠামোযুক্ত করা যেতে পারে (সিউডো কোড), যা আপনার নিয়ামক দ্বারা কল করা যেতে পারে:

public MyDataClass getData(int id) {
    WebServiceData wsData = WebService->getData(id);
    DatabaseData dbData = ORM->getData(id);
    return new MyDataClass(wsData, dbData);
}

WebServiceএবং ORMএমন ইন্টারফেসের উদাহরণ হতে পারে যা নির্ভরতা ইনজেকশনের মাধ্যমে মক দ্বারা প্রতিস্থাপন করা যেতে পারে, তবে পরীক্ষার উদ্দেশ্যে আপনার নিয়ামক এবং দর্শনগুলি পরিবর্তন করতে হবে না।


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

3
@ সিএলডাব্লু: মডেল! = ডেটা মডেল। আরো বিস্তারিত অন্য কোথাও পাওয়া যাবে, যেমন stackoverflow.com/a/14045514/124983
অবশিষ্টাংশ

2
@ সিএলডব্লিউ: ব্যবসায়ের যুক্তি এম, ভি বা সি তে হওয়া উচিত নয় মডেলগুলি কোনও ডেটা স্টোরের বিমূর্ততা, ভিউ এবং কন্ট্রোলারগুলি আপনার ব্যবহারকারী ইন্টারফেস। এগুলি হ'ল আপনি যে প্রকৃত অ্যাপ্লিকেশনটি তৈরি করছেন তার পরিধি, যা "জাস্ট কোড" হওয়া উচিত, এটি ডাটাবেস এবং ওয়েবের মতো জিনিস সম্পর্কে জানতে হবে না।
রিমকো গ্রিলিচ

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

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

12

এম, ভি এবং সি কী তা সম্পর্কে একটি সাধারণ (ইচ্ছাকৃত?) ভুল ধারণা রয়েছে। না ভূমিকাগুলির সম্বন্ধে তারা নিতে, কিন্তু কি হয় তারা।

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

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

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


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

1
শব্দটির মূল স্মার্টটাক ব্যবহারে, ইন্টারফেসের প্রতিটি ইউআই নিয়ন্ত্রণের নিজস্ব মডেল, ভিউ এবং নিয়ামক ছিল।
রিমকো জারলিচ

5

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

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

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


2

এখানে , মডেলটির বর্ণনা দেওয়া হয়েছে:

একটি মডেল এমন ডেটা সঞ্চয় করে যা নিয়ামকের কাছে ফিরে পাওয়া যায় এবং ভিউতে প্রদর্শিত হয়। যখনই ডেটাতে কোনও পরিবর্তন হয় এটি নিয়ামক আপডেট করে।

আমি বলব যে নিয়ামকটি হয় পরিষেবাটি কল করার যুক্তি যুক্ত করে বা একটি পৃথক Serviceবস্তু কল করে । পরিষেবাটি পৃথক থাকলে, আপনি আরও সহজে পরীক্ষা তৈরি করতে পারেন, বলুন, যদি কোনও নেটওয়ার্কের সাথে কোনও পরিষেবার সাথে কোনও সংযোগ দেওয়া সম্ভব না হয়, তবে কিছু স্থানীয়ভাবে TestServiceপ্রতিক্রিয়া সরবরাহ করতে পারে Service

এই উত্তরটিও দেখুন যা পরামর্শ দেয় যে কন্ট্রোলার পরিষেবাটি কল করে।


2

আপনার মডেলটিতে কখনই কোনও আসল কোড থাকা উচিত নয় এবং নিয়ামক দ্বারা চালিত কন্টেন্ট পরিচালনা করতে এবং দৃশ্যের দ্বারা প্রদর্শিত কোনও ম্যাসেজ বা স্ট্রাক্ট হিসাবে দেখা উচিত।

আপনার নিয়ামককে কোনও API, ডাটাবেস, পরিষেবা ইত্যাদির সাথে যোগাযোগ করার জন্য দায়বদ্ধ হতে হবে ... পরিবর্তনের জন্য অনুরোধ করা এবং মডেলটিতে প্রয়োজনীয় আপডেটগুলি পরিচালনা করার জন্য।

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

এটি কোডের আরও ভাল পুনরায় ব্যবহারের অনুমতি দেয় কারণ একটি মডেল বিভিন্ন নিয়ামক এবং দর্শনগুলির মধ্যে ভাগ করা যায়।


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

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

1

এখানে যেতে পারে তবে ওয়েব অ্যাপস সম্পর্কে আমি অনেকটাই মনে করি এবং [জটিল] দূরবর্তী এপিআই এর সাথে কাজ করে যাচ্ছি:

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

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