ViewModel সেরা অভ্যাস


238

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

মূলত, আমার নিম্নলিখিত প্রশ্নগুলি ছিল:

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

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

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


66
আমি নেড়্ডডিনারকে ঠিক "সেরা অনুশীলন" উদাহরণ হিসাবে বলব না। আপনার অন্তর্দৃষ্টি আপনাকে ভাল কাজ করে। :)
রায়ান মন্টগোমেরি

উত্তর:


211

আমি প্রতিটি দর্শনের জন্য যাকে "ভিউমোডেল" বলি তা তৈরি করি। আমি তাদের আমার এমভিসি ওয়েব প্রকল্পে ভিউমোডেলস নামে একটি ফোল্ডারে রেখেছি। আমি তাদের নামকরণ করি নিয়ন্ত্রক এবং ক্রিয়া (বা দেখুন) এর দ্বারা তারা উপস্থাপন করে। সুতরাং যদি আমাকে সদস্যতা নিয়ন্ত্রকের সাইনআপ ভিউতে ডেটা পাস করার দরকার হয় তবে আমি একটি সদস্যতাসাইনআপ ভিউমোডেল.সি ক্লাস তৈরি করে ভিউমোডেলস ফোল্ডারে রাখি।

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

এটি অন্যান্য ভিউমোডেলগুলির ধরণের বৈশিষ্ট্যযুক্ত সমন্বিত ভিউমোডেলগুলির জন্যও ভাল কাজ করে। উদাহরণস্বরূপ যদি আপনার সদস্যপদ নিয়ন্ত্রকের সূচক পৃষ্ঠায় 5 টি উইজেট থাকে এবং আপনি প্রতিটি আংশিক দৃষ্টির জন্য একটি ভিউমোডেল তৈরি করেন - আপনি কীভাবে সূচক ক্রিয়া থেকে পার্টিয়ালগুলিতে ডেটা পাস করবেন? আপনি MyPartialViewModel টাইপের সদস্যপদ ইন্ডেক্সভিউমোডেলে একটি সম্পত্তি যুক্ত করুন এবং আংশিক রেন্ডার করার সময় আপনি মডেল.মাই পার্টিশিয়ালভিউমোডেলে পাস করবেন।

এটি এভাবে করা আপনাকে সূচক দৃষ্টিভঙ্গিতে কোনও পরিবর্তন না করেই আংশিক ভিউমোডেল বৈশিষ্ট্যগুলি সামঞ্জস্য করতে দেয়। এটি এখনও সবেমাত্র মডেলটিতে পাস করেছে y মাইপার্টিভিয়ালভিউমোডেল তাই আপনার যখন যা করছেন সমস্ত কিছু আংশিক ভিউমোডলে কোনও সম্পত্তি যুক্ত করার সময় কোনও কিছু ঠিক করার জন্য আপনাকে পার্টিয়ালগুলির পুরো শৃঙ্খলে যেতে হবে এমন সম্ভাবনা কম less

আমি ওয়েবকনফাইগে "মাইপ্রজেক্ট.ওয়েব.ভিউমোডেলস" নামস্থানটি যুক্ত করব যাতে প্রতিটি দৃশ্যে কোনও সুস্পষ্ট আমদানি বিবৃতি যোগ না করে আমাকে যে কোনও দৃশ্যে তাদের রেফারেন্স করতে দেয়। এটি একটু পরিষ্কার করে তোলে।


3
আপনি যদি আংশিক দৃষ্টিভঙ্গি থেকে পোস্ট করতে চান এবং পুরো দর্শনটি (মডেল ত্রুটির ক্ষেত্রে) ফিরে আসতে চান? আংশিক দৃশ্যের মধ্যে আপনার প্যারেন্ট মডেলটিতে অ্যাক্সেস নেই।
কস্মো

5
@ কসমো: তারপরে এমন একটি ক্রিয়ায় পোস্ট করুন যা কোনও মডেল ত্রুটির ক্ষেত্রে পুরো দৃশ্যটি ফিরিয়ে দিতে পারে। সার্ভারের সাইডে, আপনার কাছে পিতামাতা মডেলটি পুনরায় তৈরি করার পর্যাপ্ত পরিমাণ রয়েছে।
টমাস আসচান

একটি লগইন [POST] এবং লগইন [GET] ক্রিয়া সম্পর্কে কী? বিভিন্ন ভিউমোডেলসের সাথে?
বার্ট ক্যালিক্স্টো

সাধারণত, লগইন [জিইটি] ভিউমোডেলকে কল করবেন না কারণ কোনও ডেটা লোড করার প্রয়োজন নেই।
আন্দ্রে ফিগুয়েরেদো

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

124

বিভাগ দ্বারা বিভাগগুলি আলাদা করা (কন্ট্রোলার, ভিউমোডেলস, ফিল্টার ইত্যাদি) বোকামি।

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

আপনি যদি অ্যাপ্লিকেশন নিয়ন্ত্রণকারী হিসাবে ক্লাসগুলি ভাগ করে থাকেন তবে আপনি এটিকে আপনার প্রকল্পের মূলে রাখতে পারেন।

সম্পর্কিত বিষয়গুলি (হোমকন্ট্রোলার, ইনডেক্সভিউমোডেল) আলাদা করে কেন এমন জিনিসগুলিকে একত্রে রাখে যেগুলির কোনও সম্পর্ক নেই (হোমকন্ট্রোলার, অ্যাকাউন্টকন্ট্রোলার)?


আমি এই বিষয় সম্পর্কে একটি ব্লগ পোস্ট লিখেছি ।


13
আপনি যদি এটি করেন তবে জিনিসগুলি খুব তাড়াতাড়ি খুব অগোছালো হয়ে উঠবে।
আপক্রিক

14
না, অগোছালো সব নিয়ামককে একটি দির / নেমস্পেসে স্থাপন করা put যদি আপনার কাছে 5 টি নিয়ামক থাকে, প্রতিটি প্রত্যেকে 5 টি ভিউ মডেল ব্যবহার করে থাকে তবে আপনার 25 টি ভিউমোডেল রয়েছে। নেমস্পেসগুলি কোড সংগঠিত করার প্রক্রিয়া এবং এখানে অন্য কোনও রকম হওয়া উচিত নয়।
ম্যাক্স তোরো

41
@ ম্যাক্স টোরো: অবাক হলেন আপনি এতটাই হ্রাস পেয়েছেন। কিছু সময় পর ASP.Net MVC কাজ, আমি একটি অনুভব করছি অনেক জমিদারি থেকে ব্যথা সব এক জায়গায় ViewModels সব অন্য নিয়ন্ত্রক, এবং সব মধ্যে এখনও অন্য দেখাগুলি। MVC, সম্পর্কিত টুকরা একটি ত্রয়ী তারা করছে মিলিত - তারা একে অপরের সমর্থন করি। আমি মনে করি যে কোনও সমাধানের জন্য নিয়ন্ত্রক, ভিউমোডেলস এবং ভিউগুলি যদি একই ডিরেক্টরিতে একত্রে থাকে তবে আমি আরও অনেক সংঘবদ্ধ হতে পারি । মাই অ্যাপ / অ্যাকাউন্টস / কন্ট্রোলার.সি, মাই অ্যাপ / অ্যাকাউন্টস / ক্রিয়েট / ভিউমোডেল.সি, মাই অ্যাপ / অ্যাকাউন্টস / ক্রিয়েট / ভিউ.একএসটিএমএল, ইত্যাদি
কোয়ান্টিন-স্টারিন

13
@ রায়ানজেএমসি গোয়ান উদ্বেগের পৃথকীকরণ ক্লাস পৃথকীকরণ নয়।
ম্যাক্স তোরো

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

21

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

আমি / কোর / ভিউডেটা / যেখানে আমি সাধারণ সাইটের বিস্তৃত বৈশিষ্ট্য সঞ্চয় করি সেখানে বেসভিউ ডেটা ক্লাস তৈরি করি।

এর পরে আমি একই ফোল্ডারে আমার ভিউ ডেটা ক্লাসগুলিও তৈরি করি যা বেসভিউ ডেটা থেকে প্রাপ্ত এবং নির্দিষ্ট বৈশিষ্ট্যগুলি দেখায়।

তারপরে আমি একটি অ্যাপ্লিকেশন নিয়ন্ত্রণকারী তৈরি করি যা আমার সমস্ত কন্ট্রোলার থেকে প্রাপ্ত। অ্যাপ্লিকেশন কন্ট্রোলারের নীচে জেনেরিক গেটভিউ ডেটা পদ্ধতি রয়েছে:

protected T GetViewData<T>() where T : BaseViewData, new()
    {
        var viewData = new T
        {
           Property1 = "value1",
           Property2 = this.Method() // in the ApplicationController
        };
        return viewData;
    }

অবশেষে, আমার কন্ট্রোলার অ্যাকশনে আমি আমার ভিউটাটা মডেলটি তৈরি করতে নিম্নলিখিতগুলি করি

public ActionResult Index(int? id)
    {
        var viewData = this.GetViewData<PageViewData>();
        viewData.Page = this.DataContext.getPage(id); // ApplicationController
        ViewData.Model = viewData;
        return View();
    }

আমি মনে করি এটি সত্যিই ভাল কাজ করে এবং এটি আপনার দৃষ্টিভঙ্গি এবং আপনার নিয়ামকদের চর্মসার রাখে।


13

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

আপনার ভিউমোডেল ক্লাসগুলি তাদের নিজস্ব ফাইলে, নিজস্ব ডিরেক্টরিতে রেখে দেওয়া অর্থপূর্ণ হবে। আমার প্রকল্পগুলিতে আমার কাছে ভিউমোডেলস নামে মডেল ফোল্ডারের একটি উপ-ফোল্ডার রয়েছে। আমার ভিউমোডেলগুলি (যেমন ProductViewModel.cs) এখানে থাকে।


13

আপনার মডেলগুলিকে রাখতে কোনও ভাল জায়গা নেই the যদি প্রকল্পটি বড় হয় এবং প্রচুর ভিউমোডেলস (ডেটা ট্রান্সফার অবজেক্টস) থাকে তবে আপনি এটিকে আলাদা সমাবেশে রাখতে পারেন। এছাড়াও আপনি এটিকে সাইট প্রকল্পের পৃথক ফোল্ডারে রাখতে পারেন। উদাহরণস্বরূপ, অক্সাইটে এগুলিকে অক্সাইট প্রকল্পে স্থাপন করা হয় যার মধ্যে অনেকগুলি ক্লাস রয়েছে। অক্সাইটের কন্ট্রোলাররা পৃথক প্রকল্পে স্থানান্তরিত হয় এবং পৃথক প্রকল্পে দেখাও হয়।
ইন CodeCampServer ViewModels * ফরম নামকরণ করা হয় এবং তারা মডেল ফোল্ডারে UI 'তে প্রকল্পে স্থাপন করা হয়।
ইন MvcPress প্রকল্পের তারা ডেটা এই অনুষ্ঠানে ডাটাবেস এবং একটি বিট আরো সঙ্গে কাজ করার সব কোড রয়েছে স্থাপিত হয় (কিন্তু আমি এই পদ্ধতির সুপারিশ করা হয়নি, এটি একটি নমুনা জন্য শুধু)
সুতরাং আপনি দেখতে অনেক দৃষ্টিকোণ আছে। আমি সাধারণত আমার ভিউমোডেলগুলি (ডিটিও অবজেক্টস) সাইট প্রকল্পে রাখি। তবে যখন আমার কাছে 10 টিরও বেশি মডেল রয়েছে আমি তাদের পৃথক সমাবেশে স্থানান্তরিত করতে পছন্দ করি। সাধারণত এক্ষেত্রে আমি নিয়ন্ত্রকদেরও পৃথক সমাবেশে স্থানান্তরিত করছি।
আরেকটি প্রশ্ন হ'ল মডেল থেকে আপনার ভিউমোডেলে কীভাবে সমস্ত ডেটা ম্যাপ করা যায়। আমি অটোম্যাপার লাইব্রেরিটি একবার দেখার পরামর্শ দিই । আমি এটি খুব পছন্দ করি, এটি আমার জন্য সমস্ত নোংরা কাজ করে।
এবং আমি শার্পআরকিটেকচার প্রকল্পটি দেখার পরামর্শও দিই । এটি প্রকল্পগুলির জন্য খুব ভাল আর্কিটেকচার সরবরাহ করে এবং এতে প্রচুর শীতল ফ্রেমওয়ার্ক এবং গাইডেন্স এবং দুর্দান্ত সম্প্রদায় রয়েছে।


8
ভিউমোডেলস! = ডিটিও
বার্ট ক্যালিক্স্টো

6

আমার সেরা অনুশীলনগুলি থেকে এখানে একটি কোড স্নিপেট রয়েছে:

    public class UserController : Controller
    {
        private readonly IUserService userService;
        private readonly IBuilder<User, UserCreateInput> createBuilder;
        private readonly IBuilder<User, UserEditInput> editBuilder;

        public UserController(IUserService userService, IBuilder<User, UserCreateInput> createBuilder, IBuilder<User, UserEditInput> editBuilder)
        {
            this.userService = userService;
            this.editBuilder = editBuilder;
            this.createBuilder = createBuilder;
        }

        public ActionResult Index(int? page)
        {
            return View(userService.GetPage(page ?? 1, 5));
        }

        public ActionResult Create()
        {
            return View(createBuilder.BuildInput(new User()));
        }

        [HttpPost]
        public ActionResult Create(UserCreateInput input)
        {
            if (input.Roles == null) ModelState.AddModelError("roles", "selectati macar un rol");

            if (!ModelState.IsValid)
                return View(createBuilder.RebuildInput(input));

            userService.Create(createBuilder.BuilEntity(input));
            return RedirectToAction("Index");
        }

        public ActionResult Edit(long id)
        {
            return View(editBuilder.BuildInput(userService.GetFull(id)));
        }

        [HttpPost]
        public ActionResult Edit(UserEditInput input)
        {           
            if (!ModelState.IsValid)
                return View(editBuilder.RebuildInput(input));

            userService.Save(editBuilder.BuilEntity(input));
            return RedirectToAction("Index");
        }
}

5

আমরা আমাদের সমস্ত ভিউমোডেলগুলিকে মডেল ফোল্ডারে ফেলে দিই (আমাদের ব্যবসায়ের সমস্ত যুক্তি একটি পৃথক সার্ভিস লায়ার প্রকল্পে রয়েছে)


4

ব্যক্তিগতভাবে আমি পরামর্শ দিই যে ভিউমোডেল যদি তুচ্ছ ছাড়া অন্য কিছু হয় তবে একটি পৃথক বর্গ ব্যবহার করুন।

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


2

আমাদের ক্ষেত্রে আমাদের কাছে নিয়ন্ত্রণগুলি সহ একটি প্রকল্পের ভিউগুলি থেকে পৃথক রয়েছে।

থাম্বের নিয়ম হিসাবে, আমরা ভিউমোডেলে বেশিরভাগ ভিউডাটা ["..."] স্টাফ স্থানান্তর এবং এড়াতে চেষ্টা করেছি সুতরাং আমরা thusালাই এবং যাদু স্ট্রিং এড়াতে পারি, এটি একটি ভাল জিনিস good

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

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


0

নিয়ামক কোড:

    [HttpGet]
        public ActionResult EntryEdit(int? entryId)
        {
            ViewData["BodyClass"] = "page-entryEdit";
            EntryEditViewModel viewMode = new EntryEditViewModel(entryId);
            return View(viewMode);
        }

    [HttpPost]
    public ActionResult EntryEdit(Entry entry)
    {
        ViewData["BodyClass"] = "page-entryEdit";            

        #region save

        if (ModelState.IsValid)
        {
            if (EntryManager.Update(entry) == 1)
            {
                return RedirectToAction("EntryEditSuccess", "Dictionary");
            }
            else
            {
                return RedirectToAction("EntryEditFailed", "Dictionary");
            }
        }
        else
        {
            EntryEditViewModel viewModel = new EntryEditViewModel(entry);
            return View(viewModel);
        }

        #endregion
    }

মডেল দেখুন কোড:

public class EntryEditViewModel
    {
        #region Private Variables for Properties

        private Entry _entry = new Entry();
        private StatusList _statusList = new StatusList();        

        #endregion

        #region Public Properties

        public Entry Entry
        {
            get { return _entry; }
            set { _entry = value; }
        }

        public StatusList StatusList
        {
            get { return _statusList; }
        }

        #endregion

        #region constructor(s)

        /// <summary>
        /// for Get action
        /// </summary>
        /// <param name="entryId"></param>
        public EntryEditViewModel(int? entryId)
        {
            this.Entry = EntryManager.GetDetail(entryId.Value);                 
        }

        /// <summary>
        /// for Post action
        /// </summary>
        /// <param name="entry"></param>
        public EntryEditViewModel(Entry entry)
        {
            this.Entry = entry;
        }

        #endregion       
    }

প্রকল্প:

  • DevJet.Web (ASP.NET MVC ওয়েব প্রকল্প)

  • DevJet.Web.app.D অভিধান (একটি পৃথক শ্রেণীর গ্রন্থাগার প্রকল্প)

    এই প্রকল্পে আমি কিছু ফোল্ডার তৈরি করেছি যেমন: ডাল, বিএলএল, বিও, ভিএম (দেখার মডেলের জন্য ফোল্ডার)


হাই, আপনি কি এন্ট্রি ক্লাসের কাঠামোটি শেয়ার করতে পারবেন?
ডেনিস ক্রুজ

0

একটি ভিউ মডেল বেস শ্রেণি তৈরি করুন যার অপারেশনের ফলাফল এবং প্রাসঙ্গিক ডেটার মতো সাধারণ প্রয়োজনীয় বৈশিষ্ট্য রয়েছে, আপনি বর্তমান ব্যবহারকারীর ডেটা এবং ভূমিকা রাখতে পারেন

class ViewModelBase 
{
  public bool HasError {get;set;} 
  public string ErrorMessage {get;set;}
  public List<string> UserRoles{get;set;}
}

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

ভিউ মডেলগুলিকে বিভিন্ন পেতে ক্রিয়াকলাপে পপুলেশন করতে, অ্যাবস্ট্রাক্ট পদ্ধতি ফিলমোডেল সহ বেস কন্ট্রোলার রেখে এটি সামঞ্জস্য করা যায়

class BaseController :BaseController 
{
   public PopulateViewModelBase(ViewModelBase model) 
{
   //fill up common data. 
}
abstract ViewModelBase FillModel();
}

নিয়ন্ত্রকদের মধ্যে

class MyController :Controller 
{

 public ActionResult Index() 
{
   return View(FillModel()); 
}

ViewModelBase FillModel() 
{ 
    ViewModelBase  model=;
    string currentAction = HttpContext.Current.Request.RequestContext.RouteData.Values["action"].ToString(); 
 try 
{ 
   switch(currentAction) 
{  
   case "Index": 
   model= GetCustomerData(); 
   break;
   // fill model logic for other actions 
}
}
catch(Exception ex) 
{
   model.HasError=true;
   model.ErrorMessage=ex.Message;
}
//fill common properties 
base.PopulateViewModelBase(model);
return model;
}
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.