दिलचस्प पोस्ट
कैसे खोल स्क्रिप्ट में postgresql से pg_backend_pid को बढ़ाने और इसे किसी अन्य प्रक्रिया के पास? फोनगैप InAppBrowser प्रदर्शन पीडीएफ 2.7.0 अतुल्यकालिक बनाम तुल्यकालिक निष्पादन, इसका वास्तव में क्या अर्थ है? उद्धरण और तारांकन के साथ स्ट्रिंग के रूप में संग्रहीत एक बेस कमांड को कैसे निष्पादित करें SMTPClient, SendAsync और .NET 4.0 के तहत निपटान करने के लिए सर्वोत्तम प्रथाएं क्या हैं I अजगर का "सुपर" सही काम कैसे करता है? हेक्स को एनएसएसटीइंग के उद्देश्य-सी में कैसे रूपांतरित करना है? मैं मेवेन के साथ अंतिम जार फाइल के अंदर पुस्तकालय फ़ोल्डर में सभी जरूरी जार फाइल कैसे डालूं? कैसे PHP में उत्पन्न कई arrays में आइटम के सभी संयोजन Java regex कार्यान्वयन से अनुपलब्ध सुविधाओं को कैसे जोड़ें? समुद्री शैवाल के साथ समय-श्रृंखला डेटा का प्लॉटिंग करना मूल्यों के आधार पर मानचित्र <कुंजी, मान> सॉर्ट करें (जावा) जड़ में पुनरावर्ती डेटा संरचनाएं वायदा के साथ स्काला में अतुल्यकालिक IO JQuery में एक मोबाइल डिवाइस का पता लगाने का सबसे अच्छा तरीका क्या है?

देखेंमॉडल बेस्ट प्रैक्टिस

इस प्रश्न से , ऐसा लगता है कि यह एक नियंत्रक बनाने के लिए समझ में आता है कि एक व्यू मॉोडल बना है, जो मॉडल को प्रदर्शित करने का प्रयास कर रहा है, जो अधिक सटीक रूप से दर्शाता है, लेकिन मैं कुछ सम्मेलनों (मैं एमवीसी पैटर्न के लिए नया हूँ , अगर यह पहले से स्पष्ट नहीं था)।

असल में, मेरे पास निम्नलिखित प्रश्न थे:

  1. मुझे सामान्य रूप से एक वर्ग / फ़ाइल है क्या यह दृश्यमॉडल के साथ समझ में आता है, अगर यह केवल एक नियंत्रक से डेटा को देखने के लिए बनाया जा रहा है?
  2. यदि एक व्यू मॉडेल अपनी फाइल में है, और आप एक अलग वस्तु रखने के लिए एक निर्देशिका / परियोजना संरचना का उपयोग कर रहे हैं, तो व्यू मॉडल फ़ाइल कहां है? नियंत्रकों निर्देशिका में?

यह मूल रूप से अब के लिए है मेरे पास कुछ और सवाल आ रहे हैं, लेकिन यह मुझे आखिरी घंटे या उससे भी ज्यादा परेशान कर रहा है, और मुझे कहीं और मिलकर मार्गदर्शन मिल सकता है।

संपादित करें: कोडप्लेक्स पर नमूना NerdDinner ऐप को देखते हुए, ऐसा लगता है कि ViewModels नियंत्रकों का हिस्सा हैं, लेकिन यह अभी भी मुझे असुविधाजनक बनाता है कि वे अपनी फ़ाइलों में नहीं हैं

वेब के समाधान से एकत्रित समाधान "देखेंमॉडल बेस्ट प्रैक्टिस"

मैं जो प्रत्येक दृश्य के लिए "व्यू मॉोडेल" को कॉल करता हूं I मैंने उन्हें अपने एमवीसी वेब प्रोजेक्ट में दृश्यमॉडल्स नामक फ़ोल्डर में रखा था मैं उन्हें नियंत्रक और क्रिया (या देखने) के बाद नाम देता है, वे प्रतिनिधित्व करते हैं। इसलिए यदि मुझे सदस्यता नियंत्रक पर साइनअप दृश्य में डेटा देना होगा, तो मैं एक सदस्यता Create SignupViewModel.cs वर्ग बना और उसे ViewModels फ़ोल्डर में डाल दिया।

इसके बाद मैं नियंत्रक से डेटा के दृश्य को ट्रांसफर करने के लिए आवश्यक गुणों और विधियों को जोड़ता हूं। मैं अपने ViewModel से डोमेन मॉडल में प्राप्त करने के लिए और यदि आवश्यक हो तो फिर से वापस आटोमैपर का उपयोग करता हूं।

यह समग्र दृश्यमोडल के लिए अच्छी तरह से काम करता है जिसमें अन्य व्यू मॉडेल्स के प्रकार के गुण होते हैं। उदाहरण के लिए यदि आपके पास सदस्यता नियंत्रक में अनुक्रमणिका पृष्ठ पर 5 विगेट्स हैं, और आपने प्रत्येक आंशिक दृश्य के लिए एक व्यू मॉडेल बनाया है – आप आंशिक रूप से इंडेक्स एक्शन से डेटा कैसे निकालते हैं? आप MyPartialViewModel के सदस्यत्वइंडएक्सव्यू मॉडल के लिए एक संपत्ति जोड़ते हैं और आंशिक प्रदान करते समय आप Model.MyPartialViewModel में पास होते हैं।

इसे इस तरह से करने से आप आंशिक ViewModel गुणों को समायोजित करने की अनुमति देता है बिना सूचकांक को बदलना। यह अभी भी मॉडल में गुजरता है। MyPartialViewModel इसलिए एक मौका है कि आपको आंशिक पूरे श्रृंखला के माध्यम से जाना होगा कुछ ठीक करने के लिए जब आप सब कर रहे हैं आंशिक ViewModel के लिए एक संपत्ति जोड़ रहा है कम है

मैं web.config पर नाम स्थान "MyProject.Web.ViewModels" भी जोड़ूंगा, ताकि प्रत्येक दृश्य पर कभी भी एक स्पष्ट आयात स्टेटमेंट जोड़कर मुझे किसी भी दृश्य में उन्हें संदर्भ देने की अनुमति दें। बस इसे थोड़ा क्लीनर बनाता है

श्रेणियों (नियंत्रकों, व्यूमोल्स, फ़िल्टर आदि) द्वारा कक्षाओं को अलग करना बकवास है।

यदि आप अपनी वेबसाइट के गृह अनुभाग (/) के लिए कोड लिखना चाहते हैं तो घर का नाम फ़ोल्डर बनायें, और होम कंट्रोलर, इंडेक्सव्यूमोडेल, के बारे में व्यू मॉडेल इत्यादि तथा गृह क्रियाओं द्वारा उपयोग किए जाने वाले सभी संबंधित कक्षाएं।

यदि आपने कक्षाएं साझा की हैं, जैसे कि एक ApplicationController, तो आप इसे अपने प्रोजेक्ट की जड़ में रख सकते हैं।

क्यों अलग चीजें हैं जो संबंधित हैं (होम कंट्रोलर, इंडेक्स व्यू मॉडेल) और चीजें एक साथ रखती हैं जिनके पास कोई संबंध नहीं है (होम कंट्रोलर, अकाउंटकंट्रोलर)?


मैंने इस विषय के बारे में एक ब्लॉग पोस्ट लिखा था

मैं "कोर" (या एक अलग वर्ग पुस्तकालय) नामक एक उप फ़ोल्डर में अपनी आवेदन कक्षाएं रखता हूं और KIGG नमूना अनुप्रयोग के रूप में एक ही तरीके का उपयोग करता हूं, लेकिन मेरे अनुप्रयोगों को अधिक शुष्क बनाने के लिए कुछ मामूली बदलावों के साथ

मैं / Core / ViewData / जहां मैं आम साइट व्यापक संपत्तियों को संग्रहीत करने के लिए एक BaseViewData वर्ग बना रहा हूँ

इसके बाद मैं अपने सभी दृश्य व्यूडेटा क्लासेस को उसी फ़ोल्डर में भी बना देता हूं, जो तब से बेज़ विज्यूडाटा से प्राप्त होता है और विशिष्ट गुण देखता है।

तब मैं एक ApplicationController बनाता हूं जो मेरे सारे नियंत्रक से प्राप्त होते हैं। ApplicationController में एक सामान्य GetViewData विधि निम्नानुसार है:

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

अंत में, मेरे नियंत्रक कार्रवाई में मैं अपने ViewData मॉडल को बनाने के लिए निम्न कार्य करता हूं

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

मुझे लगता है कि यह वास्तव में अच्छी तरह से काम करता है और यह आपके विचारों को व्यवस्थित रखता है और आपके नियंत्रकों पतले हैं

एक व्यूमोडेल क्लास उन वर्गों के उदाहरणों के द्वारा प्रस्तुत किए गए कई टुकड़ों के डेटा को इकट्ठा करने के लिए है, जो आपके ऑब्जेक्ट को प्रबंधित करने में आसान है, जिसे आप अपने व्यू में भेज सकते हैं।

यह अपने ViewModel वर्गों को अपनी फाइल में स्वयं की निर्देशिका में रखना होगा। मेरी प्रोजेक्ट्स में मेरे पास मॉडल फ़ोल्डर्स के एक उप-फोल्डर हैं जिन्हें व्यूमोडल कहा जाता है। यही वह जगह है जहां मेरे व्यूमोल्ड (जैसे ProductViewModel.cs ) लाइव

आपके मॉडल को रखने के लिए कोई अच्छी जगह नहीं है। अगर आप परियोजना में बड़ा है और बहुत सारे ViewModels (डेटा स्थानांतरण ऑब्जेक्ट्स) हैं तो आप उन्हें पृथक असेंबली में रख सकते हैं। इसके अलावा आप उन्हें साइट प्रोजेक्ट के अलग फ़ोल्डर में रख सकते हैं। उदाहरण के लिए, ऑक्साइट में उन्हें ऑक्साइट प्रोजेक्ट में रखा गया है जिसमें कई विभिन्न वर्ग भी शामिल हैं। ऑक्साइट में नियंत्रक को अलग परियोजना में ले जाया गया है और विचार अलग परियोजना में भी हैं।
CodeCampServer ViewModels नाम * प्रपत्र में हैं और वे मॉडल फ़ोल्डर में यूआई परियोजना में रखा जाता है।
MvcPress प्रोजेक्ट में वे डेटा प्रोजेक्ट में रखे गए हैं, जिसमें डेटाबेस के साथ काम करने के लिए सभी कोड भी हैं और थोड़ा और (लेकिन मैंने इस दृष्टिकोण की सिफारिश नहीं की है, यह केवल एक नमूने के लिए है)
तो आप देख सकते हैं कि वहाँ कई बिंदु हैं। मैं आमतौर पर साइट प्रोजेक्ट में अपने व्यूमोल्ड (डीटीओ ऑब्जेक्ट्स) रखता हूं। लेकिन जब मेरे पास 10 से अधिक मॉडल हैं, तो मैं उन्हें विधानसभा को अलग करने के लिए ले जाना पसंद करता हूं। आम तौर पर इस मामले में मैं नियंत्रकों को अलग करने के लिए विधानसभा को भी अलग कर रहा हूं।
एक और सवाल यह है कि मॉडल से अपने डेटा को अपने व्यूमोल्ड को आसानी से मैप करने के लिए कैसे करें मैं स्वत: मैपरपर पुस्तकालय को देखने का सुझाव देता हूं मुझे यह बहुत पसंद है, यह मेरे लिए सभी गंदी काम करता है
और मैं भी मुझे शार्प आर्किटेक्चर परियोजना को देखने का सुझाव देता हूं। यह परियोजनाओं के लिए बहुत अच्छी वास्तुकला प्रदान करता है और इसमें बहुत अच्छे ढांचे और दिशा-निर्देश और महान समुदाय शामिल हैं।

यहां मेरी सर्वोत्तम प्रथाओं से एक कोड स्निपेट है:

  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"); } } 

हम मॉडल फ़ोल्डर्स (हमारे सभी व्यावसायिक तर्क एक अलग सेवा लेयर प्रोजेक्ट में) में हमारे सारे व्यू मॉडल डालते हैं

व्यक्तिगत तौर पर मैं सुझाव देता हूं कि यदि व्यूमॉडल कुछ भी छोटा है, तो एक अलग वर्ग का उपयोग करें

अगर आपके पास एक से अधिक दृश्य मॉडल हैं, तो मैं सुझाव देता हूं कि इसे कम से कम एक निर्देशिका में विभाजन करने का अर्थ हो। अगर दृश्य मॉडल बाद में साझा किया जाता है तो निर्देशिका में निहित नाम स्थान नई विधानसभा में स्थानांतरित करने के लिए आसान बनाता है

हमारे मामले में हमारे विचारों से अलग परियोजना में नियंत्रकों के साथ मॉडल हैं

अंगूठे के नियम के रूप में, हमने ज्यादातर ViewData ["…"] ViewModel के सामानों को स्थानांतरित करने और उनसे बचने का प्रयास किया है इसलिए हम कास्टिंग और जादू स्ट्रिंग से बचते हैं, जो एक अच्छी बात है

व्यू मॉोडल के पास कुछ सामान्य गुण हैं, जैसे कि ब्रेडक्रंब और खिताब खींचने के लिए पृष्ठ की सूचियों या शीर्ष लेख की जानकारी के लिए पेजिंग जानकारी। इस समय बेस क्लास में मेरी राय में बहुत अधिक जानकारी है और हम इसे तीन टुकड़ों में विभाजित कर सकते हैं, बेस दृश्य मॉडल के 99% पृष्ठ के लिए सबसे बुनियादी और आवश्यक जानकारी, और फिर सूचियों और मॉडल के लिए एक मॉडल उन स्वरूपों के लिए जो उस परिदृश्यों के लिए विशिष्ट डेटा रखता है और आधार एक से प्राप्त करता है

अंत में, हम विशिष्ट जानकारी से निपटने के लिए प्रत्येक इकाई के लिए एक दृश्य मॉडल कार्यान्वित करते हैं।

नियंत्रक में कोड:

  [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 } 

परियोजनाओं:

  • देवजेट। वेब (एएसपी.नेट एमवीसी वेब प्रोजेक्ट)

  • देवजेट.Web.App.Dictionary (एक अलग कक्षा पुस्तकालय परियोजना)

    इस परियोजना में, मैंने कुछ फ़ोल्डर्स बनाये हैं: डीएएल, बीएलएल, बीओ, वीएम (दृश्य मॉडल के लिए फ़ोल्डर)

एक दृश्य मॉडल बेस क्लास बनाएं जो आमतौर पर संचालन और प्रासंगिक डेटा के परिणाम जैसे गुणों की आवश्यकता होती है, आप वर्तमान उपयोगकर्ता डेटा और भूमिकाएं भी डाल सकते हैं

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

बेस नियंत्रक वर्ग में पॉपुलेटव्यूइमोडेलबेस () जैसी कोई विधि होती है जो इस पद्धति को प्रासंगिक डेटा और उपयोगकर्ता भूमिकाएं भर देगी। HasError और ErrorMessage, इन गुणों को सेट करें यदि सेवा / डीबी से डेटा खींचते समय अपवाद है त्रुटि दिखाने के लिए इन गुणों को बाध्य करें भूमिकाओं के आधार पर छद्म अनुभाग को दर्शाने के लिए उपयोगकर्ता भूमिकाओं का उपयोग किया जा सकता है

अलग-अलग मिलती-जुलती क्रियाओं में दृश्य मॉडल को पॉप्युलेट करने के लिए, इसे बेदम विधि फ़िलमोडाल के आधार नियंत्रक के आधार पर बनाया जा सकता है

 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; } }