একটি সাধারণ ওয়েবসাইট, যেমন একটি পরিচিতি বইয়ের প্রোগ্রামিংয়ে ভাল (ঝরঝরে) আর্কিটেকচার কী?


28

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

আমার দুটি ফাইল রয়েছে:

  1. প্রথমটি ( contacts.php) HTML কোডটি দেখানোর জন্য code এইচটিএমএল কোডের উপরে আমি দ্বিতীয় ফাইলটি অন্তর্ভুক্ত করে ক্লাস তৈরি করি।
  2. দ্বিতীয়টিতে ( contacts_class.php) যোগ করার, মুছতে এবং আপডেট করার জন্য সমস্ত পদ্ধতি রয়েছে।

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

উত্তর:


67

আপনি একটি খুব আকর্ষণীয় এবং মৌলিক প্রশ্ন উত্থাপিত। বড় আকারের প্রকল্প আর্কিটেকচার এবং ফোল্ডার কাঠামো সংগঠন (যা আর্কিটেকচারের ক্ষেত্রে গৌণ) সম্পর্কিত প্রশ্ন।

আজ সিএমএস কাঠামোর আর্কিটেকচার তৈরির সবচেয়ে সাধারণ পন্থা হ'ল এমভিসি প্যাটার্ন ব্যবহার। আপনার নিজের এমভিসি ফ্রেমওয়ার্কগুলি তৈরির বিষয়ে কিছু ভাল নিবন্ধ রয়েছে যার মধ্যে একটি হ'ল পিএইচপি সহ এমভিসি ফ্রেমওয়ার্ক তৈরি করুন

এমভিসি মানে মডেল, ভিউ, কন্ট্রোলার। এমভিসি, এইচএমভিসি, এমভিপি - আপনি এই পছন্দগুলি যা খুশি কল করতে পারেন। সারমর্মটি হ'ল আপনার সিস্টেমের পৃথক উপাদানগুলি বিচ্ছিন্ন করা। "নিয়ন্ত্রণকারী" "মডেল" থেকে ডেটা পুনরুদ্ধার করে এবং তাদের "ভিউ" তে প্রেরণ করে, যা চূড়ান্ত এইচটিএমএল সরবরাহ করে re আপনি ইতিমধ্যে আপনার contacts.php"ভিসি" এবং আপনার "এমসি" প্রয়োগ করেছেন contacts_class.php। সুতরাং আপনি মডেল এবং নিয়ামক থেকে ভিউ বিচ্ছিন্ন করেছেন। এখন আপনি অন্যান্য অংশ অক্ষত রেখে সহজেই আপনার "ভিউ" পরিবর্তন করতে পারেন।

আমি আপনাকে এমভিসি, এমভিপি বা অন্য যে কোনও "এমভি" প্যাটার্নটি অন্ধভাবে অনুসরণ করতে পরামর্শ দিচ্ছি না। এটি যথাযথতা, কার্যকারিতা এবং স্বাদের বিষয়।

সাধারণ গতিশীল ওয়েবসাইট অ্যাপ্লিকেশনটিতে এই জাতীয় উপাদানগুলি অন্তর্ভুক্ত থাকতে পারে:

  • এন্ট্রি পয়েন্ট, বলুন index.php
  • সহায়ক লাইব্রেরি / ক্লাস
  • অনুরোধ রাউটার
  • মডিউল, উপাদান বা নিয়ামক
  • টেম্পলেট ইঞ্জিন বা সম্ভবত একক দর্শন

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

অপারেশন রুটিন ডায়াগ্রাম

নিম্নলিখিত সাধারণ কাঠামো অপারেশন রুটিন:

  1. ব্রাউজারের অনুরোধটি সরাসরি প্রবেশের পয়েন্ট এক্সিকিউটেবল / স্ক্রিপ্টে প্রেরণ করা হয় index.php
  2. এন্ট্রি পয়েন্ট স্ক্রিপ্ট সহায়ক গ্রন্থাগারগুলি, ক্লাসগুলি লোড করে এবং আমাদের প্রোগ্রামিং পরিবেশের আরও কিছু সূচনা করে।
  3. ইউআরএল অনুরোধ রাউটার উদাহরণে পাস করা হয়। এই পদক্ষেপটি দ্বিতীয় ধাপের অংশ হতে পারে।
  4. অনুরোধ রাউটারটি ইউআরএলকে বিশ্লেষণ করে এবং কোনও নির্দিষ্ট উপাদান, মডিউল বা নিয়ামকের কাছে ক্রিয়াকলাপটি প্রেরণ করে।
  5. উপাদান (বা নিয়ামক) রাউটেড অনুরোধটি প্রক্রিয়া করে এবং উপাত্তকে রেন্ডার করার জন্য প্রেরণ করে।

সংশ্লিষ্ট প্রকল্প ফোল্ডার কাঠামোটি চিত্রটিতে প্রদর্শিত হয়।

আমি আপনাকে অন্যান্য ফ্রেমওয়ার্কগুলি কীভাবে কার্যকর করা হয় তা তদন্ত করার পরামর্শ দেব would শুরু হওয়া প্রস্তাবিত সিএমএস / ফ্রেমওয়ার্কগুলি হ'ল কোডইগনিটার, ওপেনকার্ট, জুমলা 1.5 এবং ট্যাঙ্গো সিএমএস।


3
আপনি এই চিত্রটি তৈরি করতে কী ব্যবহার করেছেন? দুর্দান্ত উত্তর!
মার্ক টমলিন

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

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

2

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

দয়া করে সচেতন হন যে বইটি ইতিমধ্যে বেশ পুরানো (আইটি জমিতে) তবে অনেকগুলি নীতি এখনও বৈধ বা আপনার এগুলি শিখতে হবে। (এর কোনও মানে ছিল?)

(সফ্টওয়্যার) আর্কিটেকচার একটি খুব বিস্তৃত বিষয়, একটি রূপালী বুলেট আশা করবেন না তবে সময় এবং অর্থ শেষ না হওয়া পর্যন্ত সবসময় আরও প্রশ্ন এবং আরও সন্দেহ হয় এবং আপনাকে এখন পর্যন্ত সেরা সমাধানটি সহ্য করতে হবে।


2

সবার আগে, উন্নত প্রকল্পটি দেখুন to ওয়ার্ডপ্রেস কোড কাঠামোর খুব পরিষ্কার উদাহরণ: এটি বোঝা সহজ তবে প্রচুর "প্লাগ" সরবরাহ করে offers সুতরাং "প্লাগ ইন" এর মাধ্যমে ওয়ার্ডপ্রেস সহজতর।

দ্বিতীয়ত, আপনার আর্কিটেকচারটি পরীক্ষা করার একটি খুব সহজ উপায় ইউনিট পরীক্ষা লেখার চেষ্টা করছে। উদাহরণস্বরূপ, যদি ক্লাসের "কার্ড ডেক" এর "শাফল ()" পদ্ধতি থাকে তবে আপনাকে অবশ্যই পূর্বনির্ধারিত আকারের একটি কার্ড ডেক তৈরি করতে সক্ষম হতে হবে (অর্থাত্ 5 টি কার্ড 1,2,3,4,5), কল এলোমেলো করে একটিতে যাচাই করা উচিত সহজ উপায় ফলাফল (আইডি 1,4,2,5,3)

পুরো প্রকল্পের ক্লাসগুলি তাত্ক্ষণিক না করে আপনি এটি করতে সক্ষম হবেন এবং পরীক্ষাটি অবশ্যই পড়তে হবে clean

যদি আপনি এটি না করতে পারেন তবে ক্লাসের মধ্যে স্তরগুলি যুক্ত করতে হবে, পুনর্গঠন করতে হবে, যতক্ষণ না আপনি এটি করার সহজ উপায় পান get

তারপরে আপনার প্রকল্পের সমস্ত মূল শ্রেণীর জন্য এই পদক্ষেপটি পুনরায় তৈরি করুন।

সর্বশেষে তবে সর্বনিম্ন নয়: একটি ভাল আর্কিটেকচার নন-ক্লোর ক্লাসগুলিতে "অলস" হতে পারে (এটি অর্থনীতির একটি বিষয়: খুব ভাল ডিজাইনের জিনিসগুলি বাস্তব জগতে খুব বেশি ব্যয় করে)।


1

বড় আকারের প্রকল্পগুলির জন্য একটি ভাল আর্কিটেকচার হ'ল এমভিসি (মডেল ভিউ কন্ট্রোলার): http://en.wikedia.org/wiki/Model%E2%80%93 ভিউ ৯০E2%80%93 নিয়ন্ত্রণকারী

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


এটি একটি নিদর্শন, কোনও স্থাপত্য নয়।
হাফদান

আমি যুক্তি দেব যে তারা এই ক্ষেত্রে একই। আপনি কিভাবে দুটি পার্থক্য করতে হবে? এছাড়াও, আমি পোস্ট করা উইকিপিডিয়া পৃষ্ঠার প্রথম লাইনটি পড়ুন।
ক্রিস ল্যাপ্লেন্ট

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

এমভিসি হ'ল এক ধরণ, প্রতি আর্কিটেকচার নয়, তবে এটি আর্কিটেকচারের অংশ হিসাবে বিবেচনা করা যেতে পারে। এবং এটি এত জটিল নয়।

1

যদি আমি আপনার প্রশ্নটি সঠিকভাবে বুঝতে পারি তবে আপনি প্রকল্প ফোল্ডারের কাঠামো সম্পর্কে কথা বলছেন এবং মূলত কোনও আর্কিটেকচার নয় not যদি আমার বোঝাপড়াটি সঠিক হয় তবে পড়ুন; অন্যথায় আপনার প্রশ্ন সম্পাদনা করুন বা একটি মন্তব্য দিন এবং আমি সেই অনুযায়ী আমার উত্তর সম্পাদনা করব।

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

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

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


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

1

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

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


1

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

অন্যান্য চরম অবস্থানের জন্য একটি ভাল অনুভূতি পেতে, সমুদ্রের তীরে একবার দেখুন


1

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

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


0

এমভিসি হ'ল সর্বাধিক ব্যবহৃত আর্কিটেকচার যা বেশিরভাগ সমস্যার সমাধানে প্রমাণিত। একটি ভাল আর্কিটেকচারে নিম্নলিখিত বৈশিষ্ট্যগুলি (এবং আরও অনেকগুলি, অর্কোর্স) থাকবে

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

0

আপনি যে কোনও প্রোডাকশন কোড লেখার আগে ২ সপ্তাহ (রাত :) সময় নেবে এবং এই বইটি পড়বে। প্রোগ্রামিং আর্কিটেকচার, অনুশীলন এবং প্যাকেজিং সম্পর্কে এটি আপনার মনকে দীর্ঘ সময়ের জন্য পরিবর্তন করবে।

প্রফটিস হলের দ্বারা চৌকস নীতি, প্যাটার্নস এবং অনুশীলন সি #

উদাহরণগুলি সি # তে রয়েছে তবে তারা পড়তে সহজ এটি প্রোগ্রামার হিসাবে কীভাবে ভাবতে হয় তা সঠিক কোড সিনট্যাক্স কীভাবে লিখবেন তা নয়।

আমি প্রতিজ্ঞা করছি আপনি এটি আপনার পিসির সবচেয়ে অ্যাক্সেসযোগ্য স্থানে সংরক্ষণ করবেন এবং আপনি অবাক হয়ে যাবেন যে আপনি এটি না জেনে প্রোগ্রামিং করেছেন। এটি আপনার চিন্তাভাবনা বদল করবে।

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