C# के साथ मोनोरिपॉजिटरी: व्यवहार में कोड का संगठन
\n\nC# (.NET) में आधुनिक विकास में, मोनोरिपॉजिटरी (monorepo) और मल्टीरिपॉजिटरी (multirepo) के बीच चुनाव का सवाल तेजी से उठता है। मोनोरिपॉजिटरी एक दृष्टिकोण है जिसमें कई प्रोजेक्ट्स, लाइब्रेरीज़ और सेवाओं का सारा कोड एक ही Git रिपॉजिटरी में संग्रहीत किया जाता है। इस लेख में, हम C# समाधानों के लिए मोनोरिपॉजिटरी को व्यवस्थित करने का तरीका समझेंगे, संरचना, बिल्ड कॉन्फ़िगरेशन और निर्भरता प्रबंधन के व्यावहारिक उदाहरण देखेंगे।
\n\nC# के लिए मोनोरिपॉजिटरी के लाभ
\n\nमोनोरिपॉजिटरी विशेष रूप से तब उपयोगी होता है जब आपके पास कई संबंधित प्रोजेक्ट हों: वेब-API, कंसोल एप्लिकेशन, क्लास लाइब्रेरीज़ और टेस्ट। मुख्य लाभ:
\n- \n
- निर्भरताओं का एकीकृत संस्करण — सभी प्रोजेक्ट NuGet पैकेज और आंतरिक लाइब्रेरीज़ के एक ही संस्करण का उपयोग करते हैं। \n
- सरलीकृत रीफैक्टरिंग — एक लाइब्रेरी में API में बदलाव तुरंत सभी उपभोक्ताओं को दिखाई देता है। \n
- केंद्रीकृत CI/CD — सभी घटकों के निर्माण, परीक्षण और डिप्लॉय के लिए एक पाइपलाइन। \n
- डुप्लिकेशन में कमी — सामान्य मॉडल, उपयोगिताएँ और कॉन्फ़िगरेशन shared-प्रोजेक्ट्स में रखे जाते हैं। \n
हालांकि, नुकसानों पर भी विचार करना चाहिए: रिपॉजिटरी के आकार में वृद्धि, क्लोनिंग के समय में वृद्धि (यदि sparse checkout का उपयोग नहीं किया जाता है), और एक सुविचारित एक्सेस अधिकार प्रणाली की आवश्यकता।
\n\nC# में मोनोरिपॉजिटरी की संरचना
\n\n.NET प्रोजेक्ट के लिए एक विशिष्ट मोनोरिपॉजिटरी संरचना पर विचार करें। मान लें कि हमारे पास माइक्रोसर्विसेज AuthService, OrderService और एक सामान्य लाइब्रेरी Shared है।
MyMonorepo/\n├── .github/\n│ └── workflows/\n│ └── ci.yml\n├── src/\n│ ├── AuthService/\n│ │ ├── AuthService.Api/\n│ │ │ ├── Controllers/\n│ │ │ ├── Program.cs\n│ │ │ └── AuthService.Api.csproj\n│ │ └── AuthService.Tests/\n│ │ └── AuthService.Tests.csproj\n│ ├── OrderService/\n│ │ ├── OrderService.Api/\n│ │ │ └── OrderService.Api.csproj\n│ │ └── OrderService.Tests/\n│ │ └── OrderService.Tests.csproj\n│ └── Shared/\n│ ├── Shared.Models/\n│ │ └── Shared.Models.csproj\n│ └── Shared.Utils/\n│ └── Shared.Utils.csproj\n├── tests/\n│ └── IntegrationTests/\n│ └── IntegrationTests.csproj\n├── MyMonorepo.sln\n├── Directory.Build.props\n├── Directory.Packages.props\n├── .gitignore\n└── README.md\n\nमुख्य तत्व:
\n- \n
- src/ — स्रोत कोड वाला मुख्य फ़ोल्डर। \n
- tests/ — एकीकरण परीक्षण, यदि वे किसी विशिष्ट सेवा से बंधे नहीं हैं। \n
- Directory.Build.props — सभी प्रोजेक्ट्स के लिए सामान्य MSBuild सेटिंग्स। \n
- Directory.Packages.props — NuGet पैकेज संस्करणों का केंद्रीकृत प्रबंधन (Central Package Management मोड)। \n
- .sln — समाधान फ़ाइल जो सभी प्रोजेक्ट्स को एकीकृत करती है। \n
केंद्रीकृत निर्भरता प्रबंधन की स्थापना
\n\n.NET 6+ में Central Package Management (CPM) के लिए अंतर्निहित समर्थन आया। यह मोनोरिपॉजिटरी के लिए आदर्श है। रूट में एक Directory.Packages.props फ़ाइल बनाएं:
<Project>\n <PropertyGroup>\n <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>\n </PropertyGroup>\n <ItemGroup>\n <PackageVersion Include="Microsoft.AspNetCore.App" Version="8.0.0" />\n <PackageVersion Include="Microsoft.EntityFrameworkCore" Version="8.0.0" />\n <PackageVersion Include="xunit" Version="2.7.0" />\n </ItemGroup>\n</Project>\n\nअब प्रत्येक .csproj में बिना संस्करण के केवल पैकेज का नाम निर्दिष्ट करना पर्याप्त है:
<Project Sdk="Microsoft.NET.Sdk.Web">\n <PropertyGroup>\n <TargetFramework>n