সঠিক মডেল-দেখুন-ডিজাইন ____


14

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

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

আমি ঘুরছি

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

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

দ্রষ্টব্য: আমি মডেল-ভিউ- এর রহস্যময় তৃতীয় অংশের জন্য "ব্রিজ" ব্যবহার করব? এটি "হওয়া উচিত" এর কোনও অবচেতন পরামর্শ এড়াতে।

মডেল

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

দৃশ্য

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

সেতু

  • মডেল এবং ভিউয়ের মধ্যে সমন্বয়কারী এবং অনুবাদক।
  • মডেল এবং ভিউয়ের মধ্যে পাস করা তথ্যে কোনও উপযুক্ত বিন্যাসের পরিবর্তন করে।
  • "কাকে কী জানা দরকার" সে সম্পর্কিত তথ্য ধরে রাখে।
  • মডেল এবং ভিউ উভয়েরই জ্ঞান রয়েছে।

অতিরিক্ত নোট

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

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

এবং সর্বদা হিসাবে, আপনার সময় জন্য আপনাকে ধন্যবাদ।


2
ভিউ ব্লকের একটি অনুলিপি-পেস্ট-ত্রুটি রয়েছে। আমার ধারণা শেষ বুলেটটি "মডেলটির শূন্য স্বীকৃতি আছে" পড়তে হবে। এবং 1 ম অতিরিক্ত নোটের শেষ বাক্যটি সম্ভবত "মডেল" দিয়ে "ব্রিজ" নয় শেষ হওয়া উচিত ??
জোহানেস এস

উত্তর:


7

আপনার বাক্যাংশ

"মডেল এবং ভিউয়ের মধ্যে সমন্বয়কারী এবং অনুবাদক।"

আপনার ব্রিজটি এমভিপি আর্কিটেকচারের উপস্থাপক হিসাবে নির্দেশ করে।

এমভিপি এবং এমভিসি খুব সমান, কেবল এমভিপিতে কেবল উপস্থাপকই মডেলটি পর্যবেক্ষণ করেন এবং এমভিসি-তে ভিউটিকে সরাসরি "ব্রিজ" হিসাবে উপস্থাপক ছাড়া) মডেলটি পর্যবেক্ষণ করার অনুমতি দেওয়া হয়।

আপনার মডেল দায়িত্ব

"ডেটা পরিবর্তন হলে সেতুকে অবহিত করে (তথ্যের জন্য সেতু আগ্রহ প্রকাশ করেছে)"।

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

"বাইরের গ্রাহকগণ (যার সম্পর্কে এটি কিছুই জানে না) এর অবস্থা বা গণনার ফলাফলগুলি পর্যবেক্ষণ করার অনুমতি দেয়" "

যদি আপনার মডেলটির আপনার কন্ট্রোলার বা ভিউতে কোনও নির্ভরতা না থাকে তবে এটি পরীক্ষা করা সহজ এবং আরও বেশি বহনযোগ্য।


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

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

1
আপনি একটি ভাল নকশা পেয়েছেন মনে হচ্ছে, তারপর। পিএস এমভিপিকে এমভিসি বিবেচনা করার কারণ হ'ল শৃঙ্খলা ছাড়াই উপস্থাপক অতিরিক্ত বোঝা হয়ে উঠতে পারেন।
ল্যারি ওব্রায়ান

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

5

আমি যে বিষয়গুলিকে আপনাকে বিভ্রান্ত করছে তার মধ্যে একটি সন্দেহ করি যে দুটি সম্পূর্ণ ভিন্ন প্যাটার্ন রয়েছে যা উভয়ই বলা হয় মডেল-ভিউ-নিয়ামক।

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

আপনার বিবরণটি আমার কাছে মনে হচ্ছে এটি ওয়েব-এমভিসি-র বেশিরভাগ সংজ্ঞার মধ্যে বসে।


এটি ব্যাখ্যা করতে পারে যে কেন ধারণাটি ঘিরে আমার মাথা গুটিয়ে রাখাতে এত সমস্যা হচ্ছে। ধন্যবাদ; এটা জেনে রাখা ভাল যে আমি (সম্ভবত) এমভিসি ধারণাটি নিয়ে ভয়ানকভাবে কোনও ভুল করছি না।
কোরাটড্রেগনডেন

আধুনিক একক পৃষ্ঠার ওয়েব অ্যাপ্লিকেশনগুলির জন্য, আমরা ক্লায়েন্ট পক্ষের ক্লাসিক এমভিসি প্যাটার্নে ফিরে এসেছি।
কেভিন cline

2

এই সঠিক নামকরণ সম্পর্কে প্রোগ্রামিং সম্প্রদায়ের মধ্যে প্রচুর আলোচনা রয়েছে। কেউ খুব একটা বিষয়ে রাজি বলে মনে হয় না।

আমার জন্য, ব্রিজটি কীভাবে দেখার জন্য তারযুক্ত হয় তা বেশিরভাগরূপে নামটি নির্ধারণ করে।

  • যদি সেতুতে প্রতিটি দর্শন সংগ্রহ থাকতে পারে তবে সেতুটি একটি নিয়ামক।
  • যদি সেতুতে সর্বদা এক দর্শন থাকে তবে সেতুটি উপস্থাপক।
  • যদি প্রতি ভিউ ব্রিজের সংগ্রহ থাকতে পারে তবে সেতুটি ভিউ মডেল।

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


পার্শ্ব নোট হিসাবে, আমি এই জাতীয় দায়িত্বগুলি যুক্ত করতে চাই:

মডেল

প্রাথমিক দায়বদ্ধতা: তথ্য বহাল রাখুন
মাধ্যমিক ভূমিকা: আপডেটগুলি বৈধ করুন, আপডেটের পর্যবেক্ষকদের অবহিত করুন

দৃশ্য

প্রাথমিক দায়বদ্ধতা: উপাত্ত উপস্থাপনা
মাধ্যমিক ভূমিকা: ইনপুট গ্রহণ করুন, বর্তমান ইউএক্স

সেতু

প্রাথমিক দায়িত্ব: ডেটা আপডেট করুন
মাধ্যমিক ভূমিকা: পরিষ্কার ইনপুট, সিঙ্ক ডেটা এবং দর্শন


0

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

আমি নীচের প্যাটার্নটি ব্যবহার করে আপনার ধারণাগুলি প্রসারিত করার পরামর্শ দিচ্ছি (অ্যামি প্যালামাউন্টের আলাপ থেকে নেওয়া শত্রু):

মডেল

  • ডেটা স্টোরের সাথে রাজ্য সিঙ্ক করুন
  • নতুন / আপডেট হওয়া তথ্যের বৈধতা হ্যান্ডেল করুন
  • ইভেন্টগুলি যখন রাষ্ট্র পরিবর্তন করে তখন তাদের উত্থাপন করুন

দেখেছে

  • টেমপ্লেটগুলি রেন্ডার করুন
  • মডেল ইভেন্টগুলি পরিচালনা করুন
  • DOM ইভেন্টগুলি পরিচালনা করুন
  • মডেল এবং ডিওমের মধ্যে ইন্টারঅ্যাকশন মধ্যস্থতা করে

কন্ট্রোলার

  • বেশিরভাগ দম্পতি পরিচালনা করে মডেল & দেখার
  • একটি ধারক মধ্যে ভিউ ট্র্যাক রাখে

মডিউল

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

লেআউট ম্যানেজার

  • বিন্যাস রচনার জন্য দায়বদ্ধ Respons
  • মডিউলগুলি তাদের বিষয়বস্তু উপস্থাপন করতে পারে এমন অঞ্চলগুলির সাথে ডিওমে একটি অ্যাপ্লিকেশন শেল সংজ্ঞা দেয়

ডেস্প্যাচার

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

আবেদন

  • সামগ্রিক সেটআপের জন্য দায়ী, এ জাতীয় জিনিস ইনস্ট্যান্ট করে দেয়:
    • ডেস্প্যাচার
    • রাউটার
    • পাবসব স্ট্রিম
    • loggers
    • ইত্যাদি

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

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

আমি অ্যামি প্যালামাউন্টের টক অফ দ্য স্টেট অফ এনিম (যা থেকে এই ধারণাগুলি এসেছে) দেখার বা কমপক্ষে আলোচনা থেকে স্লাইডগুলি সন্ধান করার পরামর্শ দিচ্ছি ।

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