5

का उपयोग कर प्रोजेक्ट में कैटलॉग की अनुशंसित फ़ोल्डर संरचना क्या है मैंने कुछ लेख पढ़े हैं और वाई और आईओसी के बारे में वाईटी पर कई व्याख्यान/ट्यूटोरियल देखे हैं, लेकिन मुझे वीएस समाधान में कैटलॉग का कोई अनुशंसित लेआउट नहीं मिला।आईओसी

मैं परियोजना (उदाहरण के लिए एक खेल), जहाँ आप कुछ वर्गों/इंटरफेस, लकड़हारा, डेटाबेस प्रदाता, WCF सेवाओं, WPF प्रस्तुति परत (है कि वास्तव में अलग परियोजना है) के बारे में बात कर रहा हूँ ...

है वहां कोई पैटर्न प्रोजेक्ट है, जो दिखाता है कि मैं अपनी परियोजना को कैसे व्यवस्थित कर सकता हूं, इसलिए अगली, अनुभवी प्रोग्रामर यह समझने में समय बर्बाद नहीं करेगा कि क्या हो रहा है? जैसे कि हम "स्वयं टिप्पणी कोड" के बारे में बात कर रहे हैं, मैं "स्वयं टिप्पणी परियोजना संरचना" के बारे में बात कर रहा हूं।

उदाहरण के लिए, क्या मुझे सभी इंटरफेस को "इंटरफेस" कैटलॉग में रखना चाहिए? या मुझे (लॉगर के मामले में) "लॉगर" कैटलॉग बनाना चाहिए और एक्सटेंशन विधियों के साथ इंटरफ़ेस, कक्षाएं, कक्षा डालना चाहिए (सभी, लॉगिंग पर केंद्रित)। कोड "बोर्ड" सूची में बोर्ड पर केंद्रित है। "फील्ड" इत्यादि के लिए अलग सूची ..

अभी संरचना इस तरह दिखती है। मुझे वहां "व्यापार" और लॉगर के बारे में निश्चित नहीं है। मेरे पास अलग-अलग कैटलॉग में अन्य लॉगर वर्गों में इंटरफ़ेस है। क्या मुझे Log4Net प्रदाता को कॉल करना चाहिए? या एडाप्टर? या सजावटी? यह सिर्फ ILogger इंटरफ़ेस को कार्यान्वित करने वाला लॉगर क्लास है। link

यहाँ नमूना कोड (कोई आईओसी अभी तक वहाँ है, लेकिन हर कोई वहाँ 3 इंटरफेस वहाँ मैप की बहुत ही सरल हो जाएगा देखेंगे।) है::

public class Game 
{ 
    public IBoard Board { get; set; } 

    public Game(IBoard board) 
    { 
     Board = board; 
    } 
} 

public interface IBoard {} 

public class Board : IBoard 
{ 
    public IField[,] Fields { get; set; } 
    public Board(IField field, int boardWidth, int boardHeight) 
    { 
     Fields = new IField[boardHeight, boardWidth]; 
     Fields.Initialize(); 
    } 
} 

public interface IField {} 

public class Field : IField {} 

public interface ILogger 
{ 
    void Log(LogEntry entry); 
} 
+0

कड़ाई से राय आधारित - लेआउट का उपयोग करें जो आपके/आपकी टीम के लिए काम करता है। अक्सर आपके द्वारा उपयोग किए जाने वाले ढांचे में कुछ लेआउट का सुझाव दिया जाएगा (यानी एएसपी.नेट एमवीसी नियंत्रकों/मॉडल/विचार फ़ोल्डर्स का सुझाव देता है), लेकिन इसके लिए कोई वास्तविक सुनहरा मानक नहीं है (और यह अलग-अलग डी कंटेनरों में भी भिन्न होगा)। –

+2

पर [प्याज] एक नज़र (https://rules.ssw.com.au/do-you-know-the-layers-of-the-onion-architecture) वास्तुकला – qujck

उत्तर

7

क्या मैं आमतौर पर करते हैं यहाँ स्क्रीन है कि मेरे पास MyApplication.Core (क्लास लाइब्रेरी) परत है, जिसमें सभी अनुप्रयोग इंटरफेस शामिल हैं (पढ़ने: कोई नहीं) तृतीय-पक्ष निर्भरता, उदाहरण के लिए ILogger, ICommand या IQuery<TResult>

अगला मेरे पास MyApplication.Domain (कक्षा लाइब्रेरी) परत है जिसमें सभी एप्लिकेशन डोमेन विशिष्ट ज्ञान शामिल हैं - यह व्यवसाय परत है। यह कोर इंटरफेस ICommand, IQuery<TResult> के कार्यान्वयन है। इन कार्यान्वयनों पर फिर निर्भरता है ILogger। ठोस कार्यान्वयन कभी नहीं।

तब मेरे पास MyApplication.Infrastructure (कक्षा पुस्तकालय) है, जहां MyApplication.Core से सभी सेवा इंटरफेस लागू किए गए हैं, उदा। ILogger। यहां आप Log4Net जैसे तृतीय-पक्ष पुस्तकालयों पर निर्भरता प्राप्त कर सकते हैं।

फिर आखिर में मेरे पास प्रस्तुति परत है, जो मेरे मामले में आमतौर पर एक एमवीसी अनुप्रयोग है इसलिए मैं इस MyApplication.Web.Mvc का नाम दूंगा। सभी नियंत्रकों के पास इंटरफेस पर केवल निर्भरताएं होती हैं। ठोस कार्यान्वयन कभी नहीं। यह परत Composition Root का उपयोग कर ठोस कार्यान्वयन के लिए सभी इंटरफेस बूटस्ट्रैप करने के लिए भी जिम्मेदार है।

टी एल; डॉ:

  • MyApplication.Core (अनुप्रयोग इंटरफेस स्तर)
  • MyApplication.Domain (व्यापार तर्क)
  • MyApplication.Infrastructure (अनुप्रयोग इंटरफेस स्तर का क्रियान्वयन)
  • MyApplication। वेब।एमवीसी (प्रस्तुति और संरचना रूट लेयर)
+0

तो ले लो, 'Core' में मेरे पास है केवल 'इंटरफेस' में, 'डोमेन' में मेरे पास गेम तर्क (उपरोक्त इंटरफेस को कार्यान्वित करना) के साथ कक्षाएं हैं, इसलिए गेम, बोर्ड, फ़ील्ड। 'इंफ्रास्ट्रक्चर' अभी भी थोड़ा अस्पष्ट है - क्या यह केवल तीसरे पक्ष के पुस्तकालयों "प्रदाताओं" के लिए एक जगह है? डेटाबेस से संबंधित कोड कहां रखना है - 'इंफ्रास्ट्रक्चर' में? –

+0

'डोमेन' व्यवसाय तर्क है, यही वह जगह है जहां आपकी संस्थाएं हैं। हाँ, मेरी राय में तीसरे पक्ष के एकीकरण केवल 'Infrastructure' में किया जाना चाहिए यह भी है जहाँ आपके डेटाबेस कनेक्शन स्थापित कर रहे हैं - शायद एक सरल' हालांकि IRepository '' Core' अमूर्त से तो अपने संस्थाओं डेटाबेस के साथ काम कर सकते हैं, हालांकि हार्ड निर्भरता के बजाय सीधे एक इंटरफ़ेस। – janhartmann

+1

आप https://github.com/janhartmann/nerve-framework देख सकते हैं जो मैंने बनाया है एक बुनियादी ढांचा पुस्तकालय है। एक उदाहरण एप्लिकेशन https://github.com/janhartmann/nerve-framework- नमूना पर देखा जा सकता है - यह आपको एप्लिकेशन को कैसे व्यवस्थित करने के बारे में विचार दे सकता है। – janhartmann

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