এমভিসি সহ একটি পরিষেবা স্তর ব্যবহার করুন


13

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

  • আমি যদি কেবল কোনও পরিষেবা শ্রেণীর ভিতরে যুক্তিটি গুটিয়ে রাখি তবে আমি এক / দুটি পদ্ধতিতে একগুচ্ছ পরিষেবাগুলি পাব। এটি একটি কোড গন্ধ মত অনুভূত। এ সম্পর্কে কোন সেরা অনুশীলন?

  • একটি পরিষেবা মডেল ইনস্ট্যানিয়েট করতে পারেন?

  • যদি কোনও পরিষেবা মডেলগুলি ইনস্ট্যান্ট করে, পরিষেবাগুলি ইউনিট পরীক্ষা করা যায় না। এগুলি কি কেবলমাত্র ইন্টিগ্রেশন টেস্টের আওতায় আসে?

উত্তর:


25

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

পরিষেবাগুলি সাধারণত বড় অ্যাপ্লিকেশনগুলিতে ডিটিওগুলি বা সরাসরি ছোট অ্যাপ্লিকেশনগুলিতে ডোমেন মডেলগুলি ফেরত দেয়। ডিটিওগুলি সাধারণত আরও কাজ বোঝায় তবে উদ্বেগের থেকে আলাদা করা। সাধারণ প্রবাহটি হ'ল:

  • কন্ট্রোলার কল পরিষেবা
  • পরিষেবা কোনও বস্তু ফেরত দেয় (এটি একটি ডিটিও, ডোমেন মডেল বা অন্য কিছু হোক)
  • কন্ট্রোলার ডিটিও / ডোমেন মডেলটিকে একটি ভিউ মডেলে মানচিত্র করে

ম্যাপিং ম্যানুয়ালি করা যেতে পারে তবে বেশিরভাগ বিকাশকারী অটোম্যাপারের মতো অটো ম্যাপিং কাঠামো ব্যবহার করতে পছন্দ করেন কারণ আমরা নদীর গভীরতানির্ণয় কোড লিখতে পছন্দ করি না এবং আমরা বেশ অলস হতে পারি :-)

http://en.wikipedia.org/wiki/Interface_segregation_principle

https://github.com/AutoMapper/AutoMapper

ডিটিও এবং ডোমেন মডেলগুলির ব্যবহার সম্পর্কিত স্ট্যাকওভারফ্লো সম্পর্কে অনেকগুলি আলোচনার মধ্যে একটি: /programming/2680071/dto-or-domain-model-object-in-the-view-layer



অটোম্যাপার একটি বিল্ট-ইন ইউনিট পরীক্ষার কার্যকারিতা নিয়ে আসে যা আপনাকে আপনার সমস্ত ম্যাপিং রুটিনকে এক লাইনের সাথে যাচাই করতে দেয়। এই পোস্টের লেখক এটি উল্লেখ করেন নি।
কোডার্ট

তবে তিনি এটি সম্পর্কে জানেন এবং এটি ব্যবহার করেছেন। মন্তব্যগুলি এই কিছুটা .োকা।
ড্যানিয়েল লিটল

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

3

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

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

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


3

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

তবুও মডেলটি বেশ বড় হতে পারে ... আমি যে সমাধানটি পেয়েছি তা নিয়ামকের অভ্যন্তরে একটি পরিবর্তনশীল ছিল যা কোন মডেলটি লোড করতে হবে এবং নির্দিষ্ট কাজের জন্য আমি নির্দিষ্ট মডেলটি লোড করি তা বলে।

মডেল-ভিউ-কন্ট্রোলার মডেলটিকে এইভাবে পরিষ্কার করার চেষ্টা করুন:

  • দেখুন: তথ্য প্রদর্শন করে
  • কন্ট্রোলার: ইউজার ইনপুট সংগ্রহ করে, অনুরোধ করা ডেটার জন্য মডেল জিজ্ঞাসা করে এবং আবার দর্শনে প্রেরণ করে
  • মডেল: ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করে এবং তথ্য প্রস্তুত করতে যৌক্তিক ক্রিয়া সম্পাদন করে

-1

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

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

শুধু বলছি তুমি ....


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