29

के लिए एक आदर्श फ़ोल्डर संरचना जब मैंने .NET वेबफॉर्म में प्रारंभ किया था तो मुझे फ़ोल्डर संरचना को खोजने में बहुत परेशानी नहीं थी क्योंकि वीएस ने आपको "App_Code" जैसे एप्लिकेशन फ़ोल्डर्स की पेशकश की थी और अधिकांश ऐप उदाहरण "बीएलएल" डालते थे, वहाँ और अंदर के अंदर "डीएएल"।.NET MVC

लेकिन अब एमवीसी में, मैं जो भी उदाहरण जांचता हूं, वह अलग-अलग संरचना का उपयोग करता है, इस बार कोई मानक नहीं है और मुझे Google या SO पर कोई अच्छा समाधान नहीं मिला है।

तो, शायद हम साझा कर सकते हैं कि हम अपनी एमवीसी परियोजनाओं को कैसे व्यवस्थित करते हैं, दूसरों को अपना मन बनाने में मदद कर सकते हैं। यहां उपयोग की जाने वाली छोटी से मध्यम परियोजनाओं की संरचना यहां दी गई है:

App_Data 
Areas 
    Admin 
     Controllers 
     Models 
     Views 
    MyAccount 
     Controllers 
     Models 
     Views 
Content 
    Images 
    Scripts 
    Styles 
Controllers 
    HomeController.cs 
Helpers 
    ExtensionMethods // I.e. based on HtmlHelper, use "helper" suffix 
     MenuHelper.cs // to be called as html.Menu() 
    Utilities.cs // Other generic (static) libraries, no suffix used 
Models 
    ViewModels // for passing models to Views 
     RegisterViewModel.cs // use "ViewModel" suffix 
    Customer.cs // to extend models like adding Model Validation 
Repositories 
    CustomerRepository.cs // use "Repository" suffix 
Services 
    CustomerService.cs // use "Service" suffix, to move code away from controllers 
Views 
    Home 
     Index.cshtml 
     Register.cshtml 
    Shared // Site Layouts (Master templates), also put partials here 
     SiteLayout.cshtml 

आपके बारे में क्या?

+0

संभावित रूप से-नोब प्रश्न: हालांकि मैं लंबे समय से एएसपी.नेट एमवीसी का उपयोग कर रहा हूं, मैंने कभी भी '.cshtml' का सामना नहीं किया है! वो क्या है? :) –

+1

@ मैक्सिम; वह रेजर है। – Pradeep

+1

हां, यह रेज़र है, एमवीसी 3 पर नया डिफॉल्ट व्यू इंजन क्लीनर है और कोड को और अधिक पठनीय बनाता है, आप स्कॉट गु से एक ब्लॉग देख सकते हैं: http://weblogs.asp.net/scottgu/archive/2010/07/02 /introducing-razor.aspx – Nestor

उत्तर

4

जब तक यह स्पष्ट है कि चीजें कहां हैं, इससे कोई फर्क नहीं पड़ता। मुझे लगता है कि यह सिर्फ आपके संगठन/समूह के भीतर संगत होने का मामला है।

+2

मुझे पता है, लेकिन आमतौर पर आप वेबसाइटों के "धारावाहिक उत्पादन" शुरू करने से पहले अपना मानक बनाना चाहते हैं, और आप महसूस करना चाहते हैं कि आपका मानक सबसे अच्छा है जिसे आप समझ सकते हैं। कुछ लगातार उदाहरण बन गए जिन्हें मैंने लगभग पूरे दिन इस के साथ बाहर निकाला, ताकि हम अपने "सुझाए गए" संरचनाओं को साझा करके दूसरों को समय बचा सकें। – Nestor

+0

आप इस बारे में क्या सोचते हैं? http://www.dotnetexpertguide.com/2012/01/dividing-mvc-components-in-separate.html – user20358

13

मैंने पाया है कि वेबसाइट प्रोजेक्ट में केवल सामग्री (कोई संकलित कोड नहीं है) पर तैनाती को सरल बनाता है।

कुछ की तरह:

Web.Site परियोजना

Content 
     Images 
     Css 
    Scripts 
    Views 
    web.config 

और एक अन्य परियोजना में सभी संकलित कोड के लिए कदम:

वेब परियोजना

Controllers 
    Filters 
    Models 
    ... 

फिर, आप वेब साइट के भीतर सबकुछ का इलाज कर सकते हैं। तैनाती की आवश्यकता के रूप में, और सभी आवश्यक असेंबली वेब .ite \ bin में होंगी।

चाहे आप सरल एक्सकॉपी परिनियोजन कर रहे हों या एमएसआई पैकेज बनाने के लिए वाईएक्स का उपयोग कर रहे हों, इससे जीवन थोड़ा आसान हो जाएगा।

+2

मैं इसे दूसरा करता हूं। मेरी परियोजनाओं को आम तौर पर 'वेब' प्रोजेक्ट और फिर 'वेब। कॉम्पोनेंट्स' प्रोजेक्ट के साथ व्यवस्थित किया जाता है। 'वेब' प्रोजेक्ट में बहुत कम कोड है, जबकि 'वेब। कॉम्पोनेंट्स' में सभी चीजें कंट्रोलर और फ़िल्टर जैसी हैं। अंत में, मेरे पास एक 'कोर' प्रोजेक्ट है जिसमें मेरे मॉडल शामिल हैं। –

+0

बहुत रोचक, हाँ, मुझे भी पसंद है, मैं इसे अपनी परियोजनाओं के लिए विचार करूंगा। साझा करने के लिए धन्यवाद। – Nestor

5

मैं दो परियोजना दृष्टिकोण दूसरे स्थान पर हूं। जिमी बोगर्ड के पास nice post on the approach भी है (सभी टिप्पणियों के माध्यम से जाना सुनिश्चित करें)।

मुझे व्यक्तिगत रूप से पता चलता है कि जब मैं किसी एप्लिकेशन के एक हिस्से पर काम कर रहा हूं, तो मैं संबंधित सेवाओं, नियंत्रकों, भंडारों आदि का उपयोग करता हूं .. और जब आप इन फ़ाइलों में से प्रत्येक को एक अलग फ़ोल्डर में डालते हैं तो यह वापस कठिन हो सकता है और आगे और उन्हें ढूँढना।

AppName.Web.UI

Scripts 
Content 
View 

AppName.UI.Core

Attributes 
Filters 
Formatters 
Helpers 
Models 
    Company 
    Interfaces 
     IController.cs 
     IRepository.cs 
     IService.cs 
    ViewModels 
     ViewModel1.cs 
     ViewModel2.cs 
    Controller.cs 
    Repository.cs 
    Service.cs 
    User 
    .... 
Plugins (mailchimp, Twitter OAuth, etc..) 
Global.asax (define all the code here rather than in the UI project) 

टेस्ट परियोजना

: कुछ चारों ओर खेलने के बाद मैं इस प्रारूप निम्नलिखित किया गया है
... 

मुझे लगता है कि यह निर्भर करता है कि आपकी परियोजना कितनी बड़ी है कि आप आगे तोड़ते हैं और इंटरफेस और व्यूमोडेल उप फ़ोल्डरों का उपयोग करते हैं। यह सही नहीं है, लेकिन मुझे लगता है कि यह मुझे लगता है कि जिस तरह से बेहतर है।

मामले को आपकी सेवाओं और भंडारों को तीसरी परियोजना (AppName.Core) में रखने के लिए भी बनाया जा सकता है, जिससे AppName.Web.Core प्रोजेक्ट encapsulating केवल वेब भागों (गुण, नियंत्रक। ViewModels, आदि ..) से संबंधित है। । फिर से यह वास्तव में परियोजना की जटिलता से संबंधित है।

+0

मुझे यह भी पसंद है। धन्यवाद। – Nestor

+0

मैंने आपके द्वारा उल्लेख की गई पोस्ट को पढ़ा है और मेरे पास इस संरचना के लिए सवाल है, एरिया के साथ कैसे उपयोग करें? क्योंकि क्षेत्रों में अपने स्वयं के मॉडल हैं, नियंत्रक, दृश्य, और क्षेत्र नियंत्रक रूट पर नियंत्रकों से अलग हैं, तो आईयू, कोर का उपयोग करके इसे कैसे विभाजित करें? – Nestor

+0

मैं व्यक्तिगत रूप से उन क्षेत्रों का उपयोग करने में नहीं मिला हूं, लेकिन आप उन्हें समान रूप से समान रूप से तोड़ने में सक्षम होना चाहिए। मैं यूआई प्रोजेक्ट में क्षेत्र जोड़ूंगा, और उसके बाद संबंधित प्रोजेक्टर को कोर प्रोजेक्ट में ले जाउंगा। जब तक नामस्थान समान रखा जाता है तब तक भौतिक परियोजना संरचना को कोई फर्क नहीं पड़ता। या, यदि आप विभिन्न क्षेत्रों में अपने क्षेत्रों को फिर से उपयोग करने योग्य बनाना चाहते हैं, तो आप प्रत्येक क्षेत्र के लिए केवल एक ही परियोजना कर सकते हैं और उन्हें अपने मुख्य प्रोजेक्ट में संदर्भित कर सकते हैं .. वास्तव में यह निर्भर करता है कि विभिन्न क्षेत्रों के लिए आपका लक्ष्य क्या है। – TheRightChoyce

संबंधित मुद्दे