আমি বলতে চাই যে আপনি ক্লায়েন্টের ইন্টারঅ্যাকশনের উভয় দিকের জন্য ভিউমোডেল শব্দটি পুনরায় ব্যবহার করেছেন। আপনি যদি বন্যে যথেষ্ট এএসপি.নেট এমভিসি কোড পড়ে থাকেন তবে আপনি সম্ভবত ভিউমোডেল এবং একটি সম্পাদনা মডেলের মধ্যে পার্থক্য দেখতে পেয়েছেন। আমি যে গুরুত্বপূর্ণ মনে করি।
একটি ভিউমোডেল একটি ভিউ রেন্ডার করতে প্রয়োজনীয় সমস্ত তথ্য উপস্থাপন করে। এর মধ্যে স্ট্যাটিক অ-ইন্টারেক্টিভ জায়গাগুলিতে রেন্ডার করা ডেটা এবং ঠিক কী রেন্ডার করতে হবে তা ঠিক করার জন্য চেক করার জন্য বিশুদ্ধভাবে ডেটা অন্তর্ভুক্ত থাকতে পারে। একটি কন্ট্রোলার জিইটি অ্যাকশন সাধারণত তার ভিউর জন্য ভিউমডেল প্যাকেজিংয়ের জন্য দায়ী।
একটি সম্পাদনা মডেল (বা সম্ভবত কোনও অ্যাকশনমোডেল) ব্যবহারকারী সেই পোস্টের জন্য যে ক্রিয়াটি করতে চেয়েছিল তা সম্পাদনের জন্য প্রয়োজনীয় ডেটার প্রতিনিধিত্ব করে। সুতরাং একটি সম্পাদনা মডেল সত্যই কোনও ক্রিয়া বর্ণনা করার চেষ্টা করছে। এটি সম্ভবত ভিউমোডেল থেকে কিছু ডেটা বাদ দেবে এবং যদিও সম্পর্কিত বলে আমি মনে করি যে এটি সত্যই আলাদা different
ওয়ান আইডিয়া
এটি বলেছে যে আপনার কাছে খুব সহজেই মডেল -> ভিউমোডেল এবং এডিটমোডেল -> মডেল থেকে যাওয়ার জন্য আলাদা একটি অটোম্যাপার কনফিগারেশন থাকতে পারে। তারপরে বিভিন্ন নিয়ামক ক্রিয়াকলাপে কেবল অটোম্যাপার ব্যবহার করা দরকার। মডেলটির বিপরীতে এর বৈশিষ্ট্যগুলি বৈধতা দেওয়ার জন্য এবং মডেলগুলিতে নিজেই এই মানগুলি প্রয়োগ করার জন্য হেল এডিটমোডেল এতে কাজ করতে পারে। এটি অন্য কিছু করছে না এবং যেভাবেই সম্পাদনামোডলে অনুরোধটি ম্যাপ করতে আপনার এমভিসিতে মডেলবাইন্ডার রয়েছে।
আর একটি আইডিয়া
এর বাইরে আমি সম্প্রতি যে অ্যাকশনমোডেলের ধারণাটি সম্পর্কে কাজ করে যাচ্ছি তা হ'ল ক্লায়েন্টটি আপনাকে কী পোস্ট দিচ্ছে তা আসলে ব্যবহারকারী দ্বারা সম্পাদিত বেশ কয়েকটি ক্রিয়াকলাপের বিবরণ এবং কেবলমাত্র একটি বড় গ্লোবাল ডেটা নয়। এটি অবশ্যই ম্যানেজ করার জন্য ক্লায়েন্ট পক্ষের কিছু জাভাস্ক্রিপ্ট প্রয়োজন তবে ধারণাটি আমার কাছে আগ্রহী ig
মূলত আপনি যখন তাদের উপস্থাপিত করেছেন সেই স্ক্রিনে ব্যবহারকারী ক্রিয়া সম্পাদন করে, জাভাস্ক্রিপ্ট ক্রিয়া সামগ্রীর একটি তালিকা তৈরি করা শুরু করবে। একটি উদাহরণ সম্ভবত ব্যবহারকারী কোনও কর্মচারী তথ্য স্ক্রিনে রয়েছে। তারা শেষ নামটি আপডেট করে এবং একটি নতুন ঠিকানা যুক্ত করে কারণ কর্মচারী সম্প্রতি বিবাহিত হয়েছে। কভারগুলির নীচে এটি একটি ChangeEmployeeName
এবং একটি উত্পাদন করেAddEmployeeMailingAddress
একটি তালিকার অবজেক্ট । ব্যবহারকারী পরিবর্তনগুলি সম্পাদন করতে 'সংরক্ষণ করুন' ক্লিক করে এবং আপনি দুটি ক্রিয়াকলাপ সম্পাদনের জন্য প্রয়োজনীয় তথ্য সম্বলিত দুটি বস্তুর তালিকা জমা দেন।
আপনার আরও বুদ্ধিমান মডেলবাইন্ডারের প্রয়োজন হবে তারপরে ডিফল্ট একটি তবে ভাল জেএসওএন সিরিয়ালাইজারটি ক্লায়েন্ট সাইড অ্যাকশন অবজেক্টগুলির ম্যাপিংয়ের জন্য সার্ভারের পক্ষেরগুলিতে যত্ন নিতে সক্ষম হবে। সার্ভারের পক্ষগুলি (যদি আপনি 2-স্তরীয় পরিবেশে থাকেন) সহজেই এমন পদ্ধতি থাকতে পারে যা তারা কাজ করে এমন মডেলটির ক্রিয়া সম্পন্ন করে। সুতরাং কন্ট্রোলার অ্যাকশনটি কেবলমাত্র মডেলের উদাহরণটি টানার জন্য একটি আইডি এবং এটি সম্পাদন করার জন্য ক্রিয়াকলাপের তালিকা পেয়ে শেষ হয়। বা ক্রিয়াগুলি তাদের খুব আলাদা রাখতে আইডি রয়েছে।
তাই সম্ভবত সার্ভারের দিক থেকে এই জাতীয় কিছু উপলব্ধি হতে পারে:
public interface IUserAction<TModel>
{
long ModelId { get; set; }
IEnumerable<string> Validate(TModel model);
void Complete(TModel model);
}
[Transaction]
public ActionResult Save(IEnumerable<IUserAction<Employee>> actions)
{
var errors = new List<string>();
foreach( var action in actions )
{
var employee = _employeeRepository.Get(action.ModelId);
errors.AddRange(action.Validate(employee));
}
foreach( var action in editModel.UserActions )
{
var employee = _employeeRepository.Get(action.ModelId);
action.Complete(employee);
_employeeRepository.Update(employee);
}
}
এটি সত্যিকারের পোস্টিং ব্যাকটিকে মোটামুটি জেনেরিক করে তোলে কারণ আপনি সঠিক আইজিক সম্পাদন করতে বা আপনার আইউজারঅ্যাকশন উদাহরণটি সঠিক যুক্তিটি সম্পাদন করতে বা আপনার তথ্যের সাহায্যে মডেলটিতে (সম্ভবত আরও বেশি) কল করার জন্য আপনার মডেলবাইন্ডারের উপর নির্ভর করছেন।
আপনি যদি তিন স্তরের পরিবেশে থাকতেন তবে আইউসারঅ্যাকশনটি কেবল সীমানা পেরোনোর জন্য সাধারণ ডিটিও করা যেতে পারে এবং অ্যাপ স্তরের অনুরূপ পদ্ধতিতে সঞ্চালিত হতে পারে। আপনি কীভাবে এই স্তরটি করেন তার উপর নির্ভর করে এটি খুব সহজেই বিভক্ত হয়ে যায় এবং এখনও কোনও লেনদেনে থাকতে পারে (যা মনে মনে আসে তা হ'ল আগাথার অনুরোধ / প্রতিক্রিয়া এবং ডিআই এবং এনহাইবার্নেটের পরিচয়ের মানচিত্রের সুবিধা নেওয়া)।
যাইহোক আমি নিশ্চিত এটি নিখুঁত ধারণা নয়, এটি পরিচালনা করার জন্য ক্লায়েন্টের পক্ষে কিছু জেএস প্রয়োজন হবে এবং এটি কীভাবে উদ্ঘাটিত হয় তা দেখার জন্য আমি এখনও কোনও প্রকল্প করতে পারিনি, তবে পোস্টটি কীভাবে তা চিন্তা করার চেষ্টা করছিল সেখানে ফিরে এসে আবার ফিরে এসেছি তাই আমি ভেবেছিলাম আমার চিন্তাভাবনা করব। আমি আশা করি এটি সহায়তা করে এবং আমি ইন্টারঅ্যাকশনগুলি পরিচালনা করার অন্যান্য উপায়গুলি শুনতে পছন্দ করব।