এমভিসিতে ডিএওকে কন্ট্রোলার বা মডেল থেকে কল করা উচিত


14

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

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

পন্থা # 1

  public class CustomerController extends HttpServlet {

    proctected void doPost(....)  {

            Customer customer = new Customer("xxxxx","23",1);
            new CustomerDAO().save(customer);

    }


 }

পদ্ধতির # 2

  public class CustomerController extends HttpServlet {

    proctected void doPost(....)  {

            Customer customer = new Customer("xxxxx","23",1);
            customer.save(customer);

    }


 }

 public class Customer {

   ...........

   private void save(Customer customer){

        new CustomerDAO().save(customer);

   }

}

দ্রষ্টব্য -

এখানে মডেলের সংজ্ঞাটি কী:

মডেল: মডেলটি অ্যাপ্লিকেশন ডোমেনের আচরণ এবং ডেটা পরিচালনা করে, তার রাজ্য সম্পর্কে তথ্যগুলির জন্য অনুরোধের (সাধারণত দেখুন থেকে) প্রতিক্রিয়া জানায় এবং রাষ্ট্র পরিবর্তন করার জন্য নির্দেশকে (সাধারণত নিয়ামক থেকে) প্রতিক্রিয়া জানায়।

ইভেন্ট-চালিত সিস্টেমে, মডেল পর্যবেক্ষককে (সাধারণত দেখা হয়) তথ্য পরিবর্তন করে যাতে তারা প্রতিক্রিয়া জানাতে পারে if

আমার এ সম্পর্কে একটি বিশেষজ্ঞের মতামত প্রয়োজন কারণ আমি অনেকগুলি # 1 বা # 2 ব্যবহার করে দেখতে পাই, তাই এটি কোনটি?


1
নিয়ন্ত্রকের মডেল থেকে সমস্ত কিছু লোড করা উচিত এবং এটিকে দর্শনে দেওয়া উচিত।
jgauffin

আপনি কি পরামর্শের পদ্ধতির # 2?

1
"একজন নিয়ামক মডেলটির দর্শন উপস্থাপনা পরিবর্তন করতে এর সাথে সম্পর্কিত দৃশ্যে কমান্ড প্রেরণ করতে পারেন (উদাহরণস্বরূপ, কোনও নথির মাধ্যমে স্ক্রোল করে) It .. এএম .. এটি কোথায় বলে, যে নিয়ামকটি ডেটা বের করতে বা এটি চারপাশে পাস করা উচিত?
mefisto

উত্তর:


31

আমার মতে, আপনাকে এমভিসি প্যাটার্ন এবং 3-স্তরীয় স্থাপত্যের মধ্যে পার্থক্য করতে হবে। সংক্ষেপে:

3-স্তরের আর্কিটেকচার:

  • তথ্য: অব্যাহত ডেটা;
  • পরিষেবা: প্রয়োগের যৌক্তিক অংশ;
  • উপস্থাপনা: এইচএমআই, ওয়েব সার্ভিস ...

এমভিসি প্যাটার্নটি উপরের স্থাপত্যের উপস্থাপনা স্তরে স্থান নেয় (একটি ওয়েবপ্যাপের জন্য):

  • ডেটা: ...;
  • পরিষেবা: ...;
  • উপস্থাপনা:
    • নিয়ামক: HTTP অনুরোধটিকে বাধা দেয় এবং HTTP প্রতিক্রিয়া প্রদান করে;
    • মডেল: স্টোর ডেটা প্রদর্শিত / চিকিত্সা করা;
    • ভিউ: আউটপুট / ডিসপ্লে আয়োজন করে।

একটি সাধারণ এইচটিটিপি অনুরোধের জীবনচক্র :

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

1
আপনি যাকে "একটি আদর্শ এইচটিটিপি অনুরোধের জীবনচক্র" বলছেন তা এমভিসি নয়। এবং ডিএও হ'ল একটি অবজেক্ট, যা ডোমেন লজিক এবং অধ্যবসায়ের মধ্যে মিথস্ক্রিয়া / অনুবাদকে সহজ করে। এটি সক্রিয় রেকর্ডের জন্য আলাদা নাম নয় । এছাড়াও .. যেহেতু মডেলটি উপস্থাপনার অংশ হয়ে গেছে ?!
মেফিসটো

1
@ টেরেসকো 1) হ্যাঁ, এটি এমভিসি তবে 3-স্তরের আর্কিটেকচারের মধ্যে। তা না হলে কেন? 2) আপনি ঠিক বলেছেন, আমি সম্পাদনা করেছি। 3) যেহেতু পুরো এমভিসি প্যাটার্নটি উপস্থাপনা স্তরে স্থান নেয়। সাধারণ উদাহরণ: স্প্রিং এমভিসি, যার মডেলগুলি কেবল মানচিত্রের কী-মান যুক্ত রয়েছে। স্প্রিংফিউজও এই পছন্দটি করেছে।
sp00m

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

8

মডেল স্তর থেকে।

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

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


কোনও পরিষেবা স্তর ব্যবহার করতে, এটি ডিডিডি প্যাটার্ন হওয়া উচিত? আমি ভুল হলে শুধরে. আমাদের কি এমভিসিতে পরিষেবা স্তর রয়েছে?

তুমি পেতে পার. পরিষেবাদি প্রয়োগ যুক্তি থেকে ডোমেন যুক্তিকে পৃথক করতে ব্যবহৃত হয় used এটি প্রয়োজনীয় হয়ে ওঠে, তারপরে আপনি খাঁটি সিআরইউডি ডোমেন স্ট্রাকচার (সক্রিয় রেকর্ড) থেকে এমন কোনও স্থানে চলে যান যা স্টোরেজ লজিকে ডোমেন লজিক থেকে পৃথক করে। সম্পূর্ণরূপে উপলব্ধি করা মডেল স্তরে আপনার কাছে 3 টি যৌক্তিক বিচ্ছেদ রয়েছে: অধ্যবসায়, ডোমেন এবং অ্যাপ্লিকেশন।
mefisto

3

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

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