আমি যখনই স্ট্যাকওভারফ্লোতে অটোম্যাপার স্টাফ সন্ধান করছি, আমি ভ্যালুইঞ্জেক্টর সম্পর্কে কিছু পড়ছি ।
কেউ কি আমাকে তাদের মধ্যকার উপকারিতা এবং কার্যকারিতা বলতে পারেন (পারফরম্যান্স, ফিচারস, এপিআই ব্যবহার, এক্সটেনসিবিলিটি, টেস্টিং)?
আমি যখনই স্ট্যাকওভারফ্লোতে অটোম্যাপার স্টাফ সন্ধান করছি, আমি ভ্যালুইঞ্জেক্টর সম্পর্কে কিছু পড়ছি ।
কেউ কি আমাকে তাদের মধ্যকার উপকারিতা এবং কার্যকারিতা বলতে পারেন (পারফরম্যান্স, ফিচারস, এপিআই ব্যবহার, এক্সটেনসিবিলিটি, টেস্টিং)?
উত্তর:
ValueInjecter এর স্রষ্টা হিসাবে , আমি আপনাকে বলতে পারি যে আমি এটি করেছি কারণ আমি কিছু সহজ এবং খুব নমনীয় পেতে চেয়েছিলাম
আমি সত্যিই বেশি লেখা বা প্রচুর লাইক লেখা পছন্দ করি না monkey code
:
Prop1.Ignore, Prop2.Ignore etc.
CreateMap<Foo,Bar>(); CreateMap<Tomato, Potato>(); etc.
ভ্যালুআইঞ্জেক্টর এটির প্লাগইনগুলির সাথে মজিলার মতো কিছু , আপনি ভ্যালুআইঞ্জেকশন তৈরি করে সেগুলি ব্যবহার করেন
চ্যাপ্টা, অপরিবর্তনীয় এবং কিছু উত্তরাধিকার সূত্রে তৈরির জন্য অন্তর্নির্মিত ইনজেকশন রয়েছে
এবং এটি একটি দিক ধরণের আরও কাজ করে , আপনাকে সমস্ত বৈশিষ্ট্য 1-থেকে -1 নির্দিষ্ট করতে হবে না, পরিবর্তে আপনি এমন কিছু করতে হবে:
উত্স থেকে সমস্ত ইন্টিরিটি বৈশিষ্ট্য গ্রহণ করুন যার নামটি "আইডি" দিয়ে শেষ হয়, মানটি রূপান্তর করুন এবং প্রত্যেকে আইড প্রত্যয় ছাড়াই একই নামের সাথে উত্স অবজেক্টের একটি সম্পত্তিতে সেট করুন এবং এটি টাইপটি সত্তা থেকে উত্তরাধিকার সূত্রে প্রাপ্ত
সুতরাং একটি স্পষ্ট পার্থক্য, ValueInjecter এমনকি সমতল এবং অপরিবর্তনীয় উইন্ডোজ আকারে ব্যবহৃত হয়, এটি কতটা নমনীয়
(অবজেক্ট থেকে ফর্ম নিয়ন্ত্রণ এবং পিছনে ম্যাপিং)
অটোম্যাপার, উইন্ডোজ ফর্মগুলিতে ব্যবহারযোগ্য নয়, কোনও অপরিবর্তনীয় নয়, তবে এতে সংগ্রহ ম্যাপিংয়ের মতো ভাল জিনিস রয়েছে, সুতরাং যদি ভ্যালুইঞ্জেক্টরের সাথে আপনার এটির প্রয়োজন হয় তবে আপনি ঠিক যেমন কিছু করেন:
foos.Select(o => new Bar().InjectFrom(o));
আপনি বেনামি এবং গতিশীল অবজেক্ট থেকে মানচিত্র করতে ValueInjecter ব্যবহার করতে পারেন
পার্থক্য:
প্রতিটি মানচিত্রের সম্ভাবনার জন্য অটোমেপার কনফিগারেশন তৈরি করুন ক্রিয়েটম্যাপ ()
যেকোন অবজেক্ট থেকে যেকোন অবজেক্টে ভ্যালেনিনজেক্টর ইনজেকশন (এমন কোনও ঘটনাও ঘটে যখন আপনি অবজেক্ট থেকে ভ্যালুয়েটাইপ ইনজেক্ট করেন)
অটোম্যাপারটি এটিকে চ্যাপ্টা করে তৈরি করেছে এবং এটি কেবল সহজ প্রকারের জন্য বা একই ধরণের, এবং এতে অবিচ্ছিন্নতা নেই
যদি আপনার এটির প্রয়োজন হয় তবেই মানটিজেক্টর target.InjectFrom<FlatLoopValueInjection>(source); also <UnflatLoopValueInjection>
এবং যদি আপনার কাছে থেকে Foo.Bar.Name of type String
আপনি FooBarName of type Class1
ফ্ল্যাটলুপভ্যালুআইজেনশন উত্তরাধিকার সূত্রে পান এবং এটি নির্দিষ্ট করুন
ডিফল্টরূপে অটোম্যাপার একই বৈশিষ্ট্যযুক্ত বৈশিষ্ট্যগুলির মানচিত্রগুলি এবং বাকীগুলির জন্য আপনাকে একে একে নির্দিষ্ট করতে হবে এবং প্রোপ 1 এর মতো স্টাফ করতে হবে I
valueinjecter এর একটি ডিফল্ট ইনজেকশন রয়েছে nInjectFrom () যা একই নাম এবং প্রকারের সাথে বৈশিষ্ট্যগুলি দেয়; অন্য সমস্ত কিছুর জন্য আপনি স্বতন্ত্র ম্যাপিং যুক্তি / নিয়মগুলির সাথে আপনার কাস্টম মান সংযোগ তৈরি করেন, আরও দিকগুলির মতো, যেমন টাইপ ফু এর সমস্ত প্রপস থেকে শুরু করে টাইপ বারের সমস্ত প্রপস পর্যন্ত
<pedant>
দেখতে দুর্দান্ত লাগছে, তবে সম্ভবত এটি ValueInjectOr হওয়া উচিত? </pedant>
যেহেতু আমি অন্য কোনও সরঞ্জাম ব্যবহার করি নি, আমি কেবল অটোম্যাপার সম্পর্কেই কথা বলতে পারি। অটোম্যাপার তৈরির জন্য আমার কয়েকটি লক্ষ্য ছিল:
আপনি যদি এই জিনিসগুলি করতে চান তবে অটোম্যাপার আপনার জন্য খুব ভাল কাজ করে। অটোম্যাপার যে জিনিসগুলি ভাল করে না সেগুলি হ'ল:
কারণ এই জিনিসগুলি করার আমার কখনই প্রয়োজন ছিল না। বেশিরভাগ অংশে, আমাদের সত্তাগুলির কোনও সেটটার নেই, সংগ্রহগুলি প্রকাশ করা হবে না, তাই এটি সেখানে নেই। আমরা ডিটিওতে ফ্ল্যাট করার জন্য অটোম্যাপার ব্যবহার করি এবং বার্তাগুলি এবং এ জাতীয় পছন্দ করতে ইউআই মডেলগুলি থেকে ম্যাপ করি। এটিই আমাদের সত্যিকার অর্থে কাজ করে।
আমি উভয়ই চেষ্টা করে দেখেছি এবং মানটি পছন্দ করি কারণ এটি এত সহজ:
myObject.InjectFrom(otherObject);
আমার ইনজেকশন প্রয়োজনের বিশাল সংখ্যাগরিষ্ঠতার জন্য এটিই জানা দরকার। এটি সম্ভবত এর চেয়ে সহজ এবং মার্জিত হতে পারে না।
this object
সেখানে এক্সটেনশন পদ্ধতি?
InjectFrom()
এক্সটেনশন পদ্ধতিটি নিজেরাই প্রয়োগ করতে হবে ।
এটি এমন একটি প্রশ্ন যা আমি খুব গবেষণা করে চলেছি, এবং আমার ব্যবহারের ক্ষেত্রে এটি মূল্যবান জিনকে হাতছাড়া করে বলে মনে হচ্ছে। এটি ব্যবহারের জন্য পূর্বের কোনও সেটআপের প্রয়োজন নেই (আমার ধারণা অনুযায়ী পারফরম্যান্সে আঘাত হানতে পারে, যদিও এটি যদি স্মার্টভাবে প্রয়োগ করা হয় তবে প্রতিবারের প্রতিফলনের পরিবর্তে ম্যাপিংগুলি ভবিষ্যতের অনুরোধগুলির জন্য ক্যাশে করতে পারে), সুতরাং সেগুলি ব্যবহারের আগে আপনাকে কোনও ম্যাপিং পূর্বনির্ধারিত করার দরকার নেই।
সর্বাধিক গুরুত্বপূর্ণ তবে এটি বিপরীত ম্যাপিংয়ের অনুমতি দেয়। এখন আমি এখানে কিছু অনুপস্থিত হতে পারি যেহেতু জিমি উল্লেখ করেছেন যে যেখানে প্রয়োজন সেখানে তিনি কোনও ব্যবহারের ঘটনা দেখেন না, তাই আমার প্যাটার্নটিও ভুল আছে, তবে আমার ব্যবহারের ক্ষেত্রে হ'ল আমি আমার ওআরএম থেকে একটি ভিউমোডেল অবজেক্ট তৈরি করছি। আমি তখন এটি আমার ওয়েবপৃষ্ঠায় প্রদর্শন করি display একবার ব্যবহারকারী শেষ হয়ে গেলে আমি ভিউমোডেলটিকে https এ আবার ফিরে আসি, কীভাবে এটি মূল ওআরএম ক্লাসে রূপান্তরিত হয়? আমি অটোম্যাপার সহ প্যাটার্নটি জানতে পছন্দ করব। ভ্যালুআইজেক্টর দিয়ে এটি তুচ্ছ এবং এটি এমনকি অবিচ্ছিন্ন হবে। যেমন একটি নতুন সত্তা তৈরি করা
সত্তা ফ্রেমওয়ার্ক দ্বারা তৈরি মডেল (প্রথম মডেল):
public partial class Family
{
public int Id { get; set; }
public string FamilyName { get; set; }
public virtual Address Address { get; set; }
}
public partial class Address
{
public int Id { get; set; }
public string Line1 { get; set; }
public string Line2 { get; set; }
public string TownCity { get; set; }
public string County { get; set; }
public string Postcode { get; set; }
public virtual Family Family { get; set; }
}
ভিউমোডেল (যা আমি ভ্যালিডেটরগুলির সাথে সজ্জিত করতে পারি):
public class FamilyViewModel
{
public int Id { get; set; }
public string FamilyName { get; set; }
public int AddressId { get; set; }
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public string AddressTownCity { get; set; }
public string AddressCounty { get; set; }
public string AddressPostcode { get; set; }
}
ভিউকন্ট্রোলার:
//
// GET: /Family/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Family/Create
[HttpPost]
public ActionResult Create(FamilyViewModel familyViewModel)
{
try
{
Family family = new Family();
family.InjectFrom<UnflatLoopValueInjection>(familyViewModel);
db.Families.Add(family);
db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
আমার মনে, এটি এর চেয়ে সহজ সরল হয় না?
(সুতরাং এই প্রশ্নটি উত্থাপন করে, আমি যে ধাঁচে এটি চালাচ্ছি তাতে কী ভুল হয়েছে (এবং এটি অন্য অনেকের মনে হয়), এটি অটোম্যাপারের কাছে মূল্য হিসাবে দেখা যায় না?)
তবে, যদি এই প্যাটার্নটি বাতিল হয়ে যায়, আপনি যদি এটি ব্যবহার করতে চান তবে আমার ভোটটি একটি দেশের মাইল অনুসারে ভ্যালিনইঞ্জেক্টর।