আমাদের এমভিসি অ্যাপ্লিকেশন সম্পর্কে আমি আজ একটি উত্তপ্ত আলোচনা করেছি। আমাদের এমভিসিতে লিখিত একটি ওয়েবসাইট রয়েছে ( এএসপি.এনইটি ), এবং এটি সাধারণত দৃশ্যে কিছু করার প্যাটার্ন অনুসরণ করে -> নিয়ামককে চাপুন -> নিয়ামক একটি মডেল তৈরি করে (কোনও ম্যানেজারকে ডেটা দেয়, মডেলটি বিল্ট করে নিয়ন্ত্রক পদ্ধতি নিজেই) -> মডেলটি দেখতে যায় -> ধুয়ে ফেলুন এবং পুনরাবৃত্তি করুন।
তিনি বলেছিলেন যে আমাদের কোডটি খুব দৃ coup়ভাবে সংযুক্ত হয়েছিল। উদাহরণস্বরূপ, আমরা যদি একটি ডেস্কটপ অ্যাপ্লিকেশনও চাইতাম তবে আমরা আমাদের বিদ্যমান কোডটি ব্যবহার করতে সক্ষম হব না।
তিনি যে সমাধানটি এবং সর্বোত্তম অনুশীলন করেছিলেন তা হ'ল একটি API তৈরি করা এবং তারপরে আপনার API এর উপরে আপনার ওয়েবসাইট তৈরি করা এবং তারপরে একটি ডেস্কটপ অ্যাপ্লিকেশন, মোবাইল অ্যাপ্লিকেশন ইত্যাদি তৈরি করা খুব সহজ।
এটি বিভিন্ন কারণে আমার কাছে খারাপ ধারণা বলে মনে হচ্ছে।
যাইহোক আমি গুগল করে এমন কিছু খুঁজে পাচ্ছি না যা এই অনুশীলনটি নিয়ে আলোচনা করতে পারে। কারও কাছে উপকার, কনস, আপনার কেন করা উচিত, আপনার কেন বা আরও পড়া উচিত নয় সে সম্পর্কে কোনও তথ্য আছে?
কিছু কারণ হিসাবে আমি মনে করি এটি একটি খারাপ ধারণা:
আপনার ব্যাকএন্ডটি কোনও এপিআই বন্ধ করে দেওয়ার পক্ষে এটি বেশ বিমূর্ত। আপনি এটিকে খুব নমনীয় করে তোলার চেষ্টা করছেন যা এটি নিয়ন্ত্রণহীন গোলযোগ তৈরি করবে।
ভূমিকা এবং প্রমাণীকরণের মতো এমভিসিতে অন্তর্নির্মিত সমস্ত জিনিসই অকেজো মনে হয়। উদাহরণস্বরূপ, [অনুমোদন] বৈশিষ্ট্য এবং সুরক্ষা; আপনাকে নিজের রোল করতে হবে।
আপনার সমস্ত এপিআই কলগুলির জন্য সুরক্ষার তথ্য সংযুক্ত করা দরকার এবং আপনাকে একটি টোকেন সিস্টেম এবং কী বিকাশ করতে হবে।
আপনার প্রোগ্রামটি করবে এমন প্রতিটি একক ফাংশনের জন্য আপনাকে সম্পূর্ণ API কলগুলি লিখতে হবে। আপনি প্রয়োগ করতে চান এমন প্রতিটি পদ্ধতি একটি এপিআই থেকে চালানো দরকার। প্রতিটি ব্যবহারকারীর জন্য একটি গেট / আপডেট / মুছুন, পাশাপাশি একে অপরের ক্রিয়াকলাপের জন্য একটি বৈকল্পিক যেমন ব্যবহারকারীর নাম আপডেট করুন, কোনও গোষ্ঠীতে ব্যবহারকারী যুক্ত করা ইত্যাদি etc. ইত্যাদি and প্রতিটিই একটি পৃথক এপিআই কল হবে।
আপনি যখন এপিআইতে আসেন তখন ইন্টারফেস এবং বিমূর্ত ক্লাসের মতো সমস্ত ধরণের সরঞ্জাম হারাবেন। ইন্টারফেসের জন্য ডাব্লুসিএফের মতো স্টাফের খুব ধ্রুব সমর্থন রয়েছে।
আপনার কাছে এমন একটি পদ্ধতি রয়েছে যা ব্যবহারকারী তৈরি করে বা কোনও কার্য সম্পাদন করে। আপনি যদি 50 জন ব্যবহারকারী তৈরি করতে চান তবে আপনি কেবল 50 বার এটি কল করতে পারেন। আপনি যখন এপিআই হিসাবে এই পদ্ধতিটি করার সিদ্ধান্ত নেন আপনার স্থানীয় ওয়েবসার্ভার নামক পাইপগুলি এর সাথে সংযুক্ত করতে পারে এবং কোনও সমস্যা নেই - আপনার ডেস্কটপ ক্লায়েন্ট এটিতেও আঘাত করতে পারে, তবে হঠাৎ আপনার প্রচুর ব্যবহারকারী তৈরির ফলে ইন্টারনেটটিতে 50 বার API এ হাতুড়ি জড়িত থাকবে ভাল না। সুতরাং আপনাকে একটি বাল্ক পদ্ধতি তৈরি করতে হবে, তবে সত্যই আপনি কেবল এটি ডেস্কটপ ক্লায়েন্টদের জন্য তৈরি করছেন। এইভাবে, আপনি ক) আপনার এপিআই এর সাথে কী সংহত হচ্ছে তার ভিত্তিতে পরিবর্তন করুন এবং আপনি কেবল এটির সাথে সরাসরি সংহত করতে পারবেন না, খ) অতিরিক্ত ফাংশন তৈরি করতে আরও অনেক বেশি কাজ করুন do
YAGNI । আপনি যদি না নির্দিষ্টভাবে দুটি অভিন্ন কার্যকারী অ্যাপ্লিকেশন, একটি ওয়েব এবং একটি উইন্ডোজ অ্যাপ্লিকেশন উদাহরণের জন্য লেখার পরিকল্পনা না করেন তবে এটি একটি বিশাল পরিমাণের অতিরিক্ত উন্নয়ন কাজ।
আপনি শেষ-শেষের দিকে যেতে না পারলে ডিবাগিং আরও শক্ত।
প্রচুর স্বতন্ত্র অপারেশনগুলির জন্য প্রচুর পিছনে প্রয়োজন হবে, উদাহরণস্বরূপ কিছু কোড বর্তমান ব্যবহারকারী পেতে পারে, ব্যবহারকারী প্রশাসকের ভূমিকাতে রয়েছে কিনা তা পরীক্ষা করে, ব্যবহারকারীকে যে কোম্পানির মালিকানাধীন করে তোলে, অন্য সদস্যদের একটি তালিকা পেতে পারে, তাদের সমস্ত প্রেরণ করে একটি ইমেল. এর জন্য অনেকগুলি এপিআই কল প্রয়োজন হবে, বা একটি বিসপোক পদ্ধতিটি নির্দিষ্ট কাজটি আপনি চান তা লিখতে হবে, যেখানে এই স্পোক পদ্ধতির একমাত্র উপকারের গতি হবে তবে ক্ষতির দিকটি হবে জটিলতা lex
সম্ভবত আরও কিছু কারণ এগুলি আমার মাথার উপরের অংশে।
এটি কেবল আমার কাছে মনে হচ্ছে যদি না আপনার সত্যিকারের দুটি অনুরূপ অ্যাপ্লিকেশন প্রয়োজন হয় তবে তা সত্যিই এটির পক্ষে উপযুক্ত নয়। আমি কখনও কখনও এএসপি.এনইটি অ্যাপ্লিকেশনটি দেখিনি, আপনাকে দুটি পৃথক অ্যাপ্লিকেশন (এপিআই এবং আপনার কোড) লিখতে হবে এবং সংস্করণগুলিও উভয়কেই নিয়ন্ত্রণ করতে হবে (যদি আপনার ব্যবহারকারীর পৃষ্ঠাটি একটি নতুন ক্ষেত্র পায় তবে আপনি ' কোন অসুবিধাগুলি নিশ্চিত করতে বা এটিকে শক্তিশালী রাখার জন্য প্রচুর অতিরিক্ত কাজ করা উচিত নয়) একই সাথে API এবং আপনার গ্রাহক কোডটি আপডেট করতে হবে।
সম্পাদনা: কিছু দুর্দান্ত প্রতিক্রিয়া, এটি এখন কী বোঝায় তা ভাল ধারণা পেতে শুরু করে। সুতরাং আমার প্রশ্নটি প্রসারিত করার জন্য, আপনি কীভাবে এই এপিআই কাঠামোটি অনুসরণ করতে একটি এমভিসি অ্যাপ্লিকেশন গঠন করবেন?
উদাহরণস্বরূপ, আপনার একটি ওয়েবসাইট রয়েছে যা ব্যবহারকারীর সম্পর্কে তথ্য প্রদর্শন করে। এমভিসির আওতায় আপনার কাছে রয়েছে:
দেখুন - (সিএস) এইচটিএমএল পৃষ্ঠা যা একটি ইউজারভিউমোডেল কন্ট্রোলার প্রদর্শন করে - গেটউজার () কল করে এবং একটি ইউজারভিউমোডেল তৈরি করে যা এটি ভিউ ম্যানেজার শ্রেণিতে (আপনার API এর ধরণের) পাস করে যার একটি গেটউজার পদ্ধতি রয়েছে।
নিয়ামকটি getUser () করে তবে আপনি একটি ডেস্কটপ অ্যাপ্লিকেশনও চান। এর অর্থ আপনার গেট ইউজারটি কোনও ধরণের এপিআইর মাধ্যমে প্রকাশ করা দরকার। আপনি ডাব্লুসিএফ, অথবা সম্ভবত রিমোটিং টিসিপি সংযোগ চাইবেন। আপনি এমন একটি মোবাইল অ্যাপ্লিকেশনও চান যা নিরবচ্ছিন্ন সংযোগগুলি দুর্বল হওয়ার কারণে এটি বিশ্রামের হবে।
তাহলে আপনি কি প্রত্যেকটির জন্য একটি API লিখবেন, একটি ডাব্লুসিএফ ওয়েব পরিষেবা যার একটি পদ্ধতি গেটউজার () আছে এবং কোডটি return new UserManager().GetUser()
কী করে ? এবং একটি এমভিসি 4 ওয়েব এপিআই পদ্ধতি যা একই জিনিস করে? আপনার এমভিসি নিয়ামক পদ্ধতিতে সরাসরি গেটউজারকে কল করা চালিয়ে যাওয়ার সময়?
অথবা আপনি কী সেই সমাধানটি বেছে নেবেন যা তিনটি (ওয়েব এপিআই আরইএসটি পরিষেবা) এর জন্য কাজ করবে এবং তার উপর সবকিছু তৈরি করবে, তাই তিনটি অ্যাপ্লিকেশনই এপিআই কল করে (এমভিসিগুলি, লোকাল মেশিনে)।
এবং এটি কি কেবল একটি তাত্ত্বিক নিখুঁত দৃশ্য? আমি এইভাবে বিকাশের ক্ষেত্রে বড় ওভারহেডগুলি দেখতে পাচ্ছি, বিশেষত যদি আপনাকে এমনভাবে বিকাশ করতে হয় যা আপনাকে বিশ্রামের উপায়ে অপারেশন করতে দেয়। আমি মনে করি এর উত্তরে জবাব দেওয়া হয়েছে some
সম্পাদনা 2: আরও স্টাফ পড়ার পরে, আমি নীচে একটি মন্তব্য রেখেছি যা আমি মনে করি এটি ব্যাখ্যা করতে পারে। প্রশ্নটি আমার মনে হয় এমন একটি কৌশল bit আপনি যদি আপনার ব্যাক-এন্ড লিখতে চান তবে একটি এআইপি আমাকে এই ভেবে বিভ্রান্ত করেছিল যে কোনও একক ওয়েবসার্চ হওয়া উচিত যা সবকিছু (এমভিসি অ্যাপ, ডেস্কটপ অ্যাপ, মোবাইল অ্যাপ্লিকেশন) স্টাফ করতে বলে do
আমি যে উপসংহারে এসেছি তা হ'ল আপনার ব্যবসায়ের যুক্তি স্তরটি সঠিকভাবে decoupled হয়েছে তা নিশ্চিত হওয়া উচিত। আমার কোডটি দেখে, আমি ইতিমধ্যে এটি করছি - নিয়ামক GetUser()
কোনও পরিচালককে কল করবেন , তারপরে একটি ভিউ দিয়ে রেন্ডার করার জন্য এটি থেকে একটি ভিউ মডেল তৈরি করুন। সত্যিই তাই, ব্যবসা লজিক স্তর হল একটি API। আপনি যদি ডেস্কটপ অ্যাপ্লিকেশন থেকে যদিও এটি কল করতে চান তবে আপনাকে ডাব্লুসিএফ পরিষেবা হিসাবে কল করার সুবিধার্থে এমন কিছু লিখতে হবে। এমনকি GetUser()
কোডটি রয়েছে এমন একটি ডাব্লুসিএফ পদ্ধতি থাকাও return MyBusinessLayer.GetUser()
যথেষ্ট হবে। সুতরাং এপিআই হ'ল ব্যবসায়ের যুক্তি এবং ডাব্লুসিএফ / ওয়েব এপিআই ইত্যাদি কোডের বাইরের অ্যাপ্লিকেশনগুলিকে কল করার জন্য কেবল কোডের টাইটবিট।
সুতরাং কিছু ওভারহেড রয়েছে যার মধ্যে আপনার প্রয়োজন অনুসারে আপনাকে আপনার ব্যবসায়ের লজিক স্তরটি বিভিন্ন API এ আবদ্ধ করতে হবে এবং আপনার অন্যান্য অ্যাপ্লিকেশনগুলি করতে চান এমন প্রতিটি অপারেশনের জন্য আপনাকে একটি API পদ্ধতি লিখতে হবে, এবং আপনাকে আরও প্রয়োজন হবে প্রমাণীকরণ করার একটি উপায় বাছাই করুন, তবে বেশিরভাগ অংশের জন্য এটি একই same একটি পৃথক প্রকল্পে (শ্রেণি পাঠাগার) আপনার ব্যবসায়ের যুক্তি আটকে দিন এবং আপনার সম্ভবত কোনও সমস্যা হবে না!
আশা করি এই ব্যাখ্যাটি সঠিক। এটি তৈরি করা সমস্ত আলোচনা / মন্তব্যগুলির জন্য ধন্যবাদ।