Cvičení – analýza a kód dokumentu pomocí nástrojů GitHub Copilot
GitHub Copilot vám může pomoct pochopit a zdokumentovat základ kódu generováním vysvětlení a dokumentace. V tomto cvičení použijete GitHub Copilot k analýze a dokumentaci aplikace knihovny. Vytvoříte také úložiště GitHub pro aplikaci knihovny a vygenerujete soubor README pro úložiště pomocí GitHub Copilotu.
Toto cvičení zahrnuje následující úlohy:
- K vysvětlení základu kódu aplikace knihovny použijte GitHub Copilot.
- Pomocí editoru Visual Studio Code vytvořte úložiště GitHub pro aplikaci knihovny.
- Pomocí rozšíření GitHub Copilot můžete analyzovat řešení a vytvořit soubor README.md pro úložiště.
Prozkoumání základu kódu aplikace knihovny
Než vytvoříte úložiště kódu a soubor README, měli byste chvíli trvat, než prozkoumáte základ kódu. Před dokumentací projektu je důležité porozumět architektuře aplikace a klíčovým funkcím. Měli byste také spustit aplikaci, abyste zajistili, že funguje podle očekávání.
Vysvětlení základu kódu aplikace knihovny pomocí GitHub Copilotu
GitHub Copilot vám může pomoct porozumět neznámému základu kódu generováním vysvětlení na úrovni řešení a funkcí.
K dokončení této části cvičení použijte následující kroky:
Ujistěte se, že máte řešení otevřené v editoru
AccelerateDevGitHubCopilotVisual Studio Code.Otevřete zobrazení chatu a zadejte výzvu, která pomocí účastníka GitHub Copilotu
@workspacevygeneruje popis projektu.Do zobrazení chatu zadejte například následující výzvu:
@workspace Describe this projectZkontrolujte odpověď za několik minut.
Měla by se zobrazit odpověď podobná následujícímu popisu:
This project is a library management system implemented in C#. It consists of three main components: 1. **Library.ApplicationCore**: This is the core application library containing the main business logic, entities, enums, and interfaces. It includes: - Entities such as Book, Patron, Loan, etc. - Enums like MembershipRenewalStatus, LoanReturnStatus, and LoanExtensionStatus. - Services like LoanService and PatronService. - Interfaces like ILoanRepository, IPatronRepository, ILoanService, and IPatronService. 2. **Library.Console**: This is a console application that interacts with the user. It includes: - The main entry point in Program.cs. - Configuration settings in appSettings.json. - Console interaction logic in ConsoleApp.cs. 3. **Library.Infrastructure**: This library handles data persistence. It includes: - JSON-based repositories like JsonPatronRepository and JsonLoanRepository. - Data loading and saving logic in JsonData. Additionally, there are unit tests located in the UnitTests directory, which test the functionality of the core services using the NSubstitute mocking framework and xUnit. The project uses .NET 8.0 and is configured to build and test using GitHub Actions as defined in the build-test.yml file. The solution file is AccelerateDevGitHubCopilot.sln, which includes all the projects and their configurations.Pomocí zobrazení Průzkumník řešení rozbalte složky projektu.
Vyhledejte a otevřete
ConsoleApp.cssoubor.Soubor ConsoleApp.cs se nachází ve
src/Library.Consolesložce.Do zobrazení chatu zadejte výzvu, která vygeneruje popis
ConsoleApptřídy.Do zobrazení chatu zadejte například následující výzvu:
@workspace #editor Describe the ConsoleApp classZkontrolujte odpověď za několik minut.
Měla by se zobrazit odpověď podobná následujícímu popisu:
The `ConsoleApp` class in `ConsoleApp.cs` is responsible for managing the console-based user interface of the library management system. It handles user interactions, processes user inputs, and coordinates actions with the underlying services and repositories. ### Fields - `_currentState`: Tracks the current state of the console application. - `matchingPatrons`: A list of patrons that match a search query. - `selectedPatronDetails`: Holds details of the currently selected patron. - `selectedLoanDetails`: Holds details of the currently selected loan. - `_patronRepository`: An instance of `IPatronRepository` for accessing patron data. - `_loanRepository`: An instance of `ILoanRepository` for accessing loan data. - `_loanService`: An instance of `ILoanService` for performing loan-related operations. - `_patronService`: An instance of `IPatronService` for performing patron-related operations. ### Constructor - `ConsoleApp(ILoanService loanService, IPatronService patronService, IPatronRepository patronRepository, ILoanRepository loanRepository)`: Initializes the `ConsoleApp` with the provided services and repositories. ### Methods - `Run()`: The main entry point for running the console application. - `PatronSearch()`: Handles the logic for searching patrons. - `ReadPatronName()`: Reads the patron's name from the console input. - `PrintPatronsList(List<Patron> matchingPatrons)`: Prints a list of matching patrons to the console. - `PatronSearchResults()`: Handles the logic for displaying and selecting from the search results. - `ReadInputOptions(CommonActions options, out int optionNumber)`: Reads input options from the console. - `WriteInputOptions(CommonActions options)`: Writes the available input options to the console. - `PatronDetails()`: Displays details of the selected patron. - `LoanDetails()`: Displays details of the selected loan and handles actions like extending or returning the loan. The class uses a state machine approach to manage different states of the console application, such as searching for patrons, displaying search results, showing patron details, and handling loan details.Otevřete soubor
Program.cs.Do zobrazení chatu zadejte výzvu, která vygeneruje popis
Program.cssouboru.Do zobrazení chatu zadejte například následující výzvu:
@workspace #editor Describe the Program.cs fileZkontrolujte odpověď za několik minut.
Měla by se zobrazit odpověď podobná následujícímu popisu:
The `Program.cs` file is the entry point for the console application. It sets up the dependency injection container, configures services, and starts the `ConsoleApp`. 1. **Dependency Injection Setup**: - Creates a `ServiceCollection` to register services. - Builds a configuration object from the `appSettings.json` file. - Registers various services and repositories with different lifetimes (singleton, scoped). 2. **Service Registration**: - Registers the repositories: JsonPatronRepository and JsonLoanRepository. - Registers the services: LoanService and PatronService. - Registers the JsonData class as a singleton. - Registers the ConsoleApp class as a singleton. 3. **Service Provider**: - Builds the service provider from the registered services. - Retrieves the `ConsoleApp` service and runs it asynchronously. This setup ensures that all dependencies are properly injected and configured before the application starts running.Rozbalte složku projektu Library.Infrastructure.
Přidejte soubory
JsonData.csJsonLoanRepository.csaJsonPatronRepository.cssoubory do kontextu chatu.Pomocí tlačítka Připojit kontext přidejte soubory do kontextu chatu. K přidání souborů do kontextu chatu můžete použít také operaci přetažení.
Do zobrazení chatu zadejte výzvu, která vygeneruje vysvětlení tříd přístupu k datům.
Do zobrazení chatu zadejte například následující výzvu:
@workspace /explain Explain how the data access classes workZkontrolujte odpověď za několik minut.
Měla by se zobrazit odpověď podobná následujícímu popisu:
The `JsonData` class in `JsonData.cs` is responsible for managing the loading and saving of data from JSON files. It handles various entities such as `Author`, `Book`, `BookItem`, Patron`, and `Loan`. The class uses the `IConfiguration` interface to read file paths from the configuration settings, ensuring that the correct JSON files are loaded. The constructor of the `JsonData` class initializes the file paths for each entity by reading from the configuration section "JsonPaths". If the paths are not specified in the configuration, it defaults to specific paths within a "Json" directory. The `EnsureDataLoaded` method checks if the data is already loaded and, if not, calls the `LoadData` method to load the data from the JSON files. The `LoadData` method reads the JSON files and deserializes them into the respective lists of entities. The `SaveLoans` and `SavePatrons` methods handle saving the loan and patron data back to the JSON files. These methods ensure that only a subset of properties is saved, maintaining data integrity and consistency. The class also provides methods to populate entities with related data. For example, `GetPopulatedPatrons` and `GetPopulatedPatron` methods populate patron entities with their associated loans. Similarly, `GetPopulatedLoan` and `GetPopulatedBookItem` methods populate loan and book item entities with their related data. The `LoadJson` and `SaveJson` methods are utility methods for reading from and writing to JSON files. They use the `JsonSerializer` class to handle the serialization and deserialization processes. Overall, the `JsonData` class serves as a central point for managing the persistence of data in JSON format, ensuring that the application can load, save, and manipulate data efficiently.Prozkoumejte datové soubory JSON, které se používají k simulaci záznamů knihovny, několik minut.
Datové soubory JSON se nacházejí ve
src/Library.Console/Jsonsložce.Datové soubory používají vlastnosti ID k propojení entit. Například
Loanobjekt máPatronIdvlastnost, která odkazuje naPatronobjekt se stejným ID. Soubory JSON obsahují data pro autory, knihy, položky knih, patrony a půjčky.Poznámka:
Všimněte si, že jména autorů, názvy knih a názvy patronů jsou pro účely tohoto projektu s asistencí anonymizované.
Sestavení a spuštění aplikace
Spuštění aplikace vám pomůže pochopit uživatelské rozhraní, klíčové funkce aplikace a způsob interakce komponent aplikace.
K dokončení této části cvičení použijte následující kroky:
Ujistěte se, že máte otevřené zobrazení Průzkumník řešení.
Zobrazení Průzkumník řešení není stejné jako zobrazení Průzkumníka. Zobrazení Průzkumník řešení používá soubory projektu a řešení jako uzly adresáře k zobrazení struktury řešení.
Aplikaci spustíte tak, že kliknete pravým tlačítkem na Library.Console, vyberete Ladit a pak vyberete Spustit novou instanci.
Pokud nejsou zobrazeny možnosti Ladění a Spustit novou instanci, ujistěte se, že používáte zobrazení Průzkumník řešení, a ne zobrazení Průzkumníka.
Následující kroky vás provedou jednoduchým případem použití.
Po zobrazení výzvy k zadání jména patrona zadejte 1 a stiskněte Enter.
Měl by se zobrazit seznam patronů, kteří odpovídají vyhledávacímu dotazu.
Poznámka:
Aplikace používá proces vyhledávání s rozlišováním velkých a malých písmen.
Na příkazovém řádku Vstupní možnosti zadejte 2 a stiskněte Enter.
Zadáním 2 vyberete druhého patrona v seznamu.
Měli byste vidět jméno a členství patrona a stav členství následovaný podrobnostmi o knihách půjčky.
Na příkazovém řádku Vstupní možnosti zadejte 1 a stiskněte Enter.
Zadáním 1 vyberete první knihu v seznamu.
Měly by se zobrazit podrobnosti o knize včetně data splatnosti a stavu vrácení.
Na příkazovém řádku Vstupní možnosti zadejte r a stiskněte Enter.
Zadání r vrátí knihu.
Ověřte, že se zobrazila zpráva "Kniha byla úspěšně vrácena".
Zpráva "Book was successfully return" (Kniha byla úspěšně vrácena) by měla následovat podrobnosti o knize. Vrácené knihy jsou označeny značkou
Returned: True.Pokud chcete zahájit nové hledání, zadejte s a stiskněte Enter.
Po zobrazení výzvy k zadání jména patrona zadejte 1 a stiskněte Enter.
Na příkazovém řádku Vstupní možnosti zadejte 2 a stiskněte Enter.
Ověřte, že je označena první kniha půjčka
Returned: True.Na příkazovém řádku Vstupní možnosti zadejte q a stiskněte Enter.
Zastavte ladicí relaci.
Vytvoření úložiště GitHub pro váš kód
Vytvoření úložiště GitHub pro váš kód vám umožní sdílet svou práci s ostatními a spolupracovat na projektu.
Poznámka:
K vytvoření privátního úložiště GitHub pro aplikaci knihovny použijete vlastní účet GitHubu.
K dokončení této části cvičení použijte následující kroky:
Otevřete okno prohlížeče a přejděte na svůj účet GitHubu.
Přihlašovací stránka GitHubu je: https://github.com/login.
Přihlaste se k účtu GitHub.
Otevřete nabídku účtu GitHub a pak vyberte Vaše úložiště.
Přepněte do okna editoru Visual Studio Code.
V editoru Visual Studio Code otevřete zobrazení Správy zdrojového kódu.
Vyberte Publikovat na GitHubu.
Přijměte výchozí název úložiště (AccelerateDevGitHubCopilotSelect) a vyberte Publikovat do privátního úložiště GitHubu.
Poznámka:
Pokud nejste přihlášení k GitHubu v editoru Visual Studio Code, zobrazí se výzva k přihlášení. Po přihlášení povolte Visual Studio Code s požadovanými oprávněními.
V zobrazení Správy zdrojového kódu zadejte zprávu potvrzení, například Počáteční potvrzení, a pak vyberte Publikovat větev.
Všimněte si, že Visual Studio Code během procesu publikování zobrazuje stavové zprávy.
Po dokončení procesu publikování se zobrazí zpráva informující o úspěšném publikování kódu do úložiště GitHub, které jste zadali.
Přepněte do okna prohlížeče pro váš účet GitHubu.
Ve svém účtu GitHub otevřete nové úložiště AccelerateDevGitHubCopilot.
Pokud nevidíte úložiště AccelerateDevGitHubCopilot, aktualizujte stránku. Pokud úložiště pořád nevidíte, vyzkoušejte následující kroky:
- Přepněte do nástroje Visual Studio Code.
- Otevřete oznámení (oznámení se vygenerovalo při publikování nového úložiště).
- Výběrem možnosti Otevřít na GitHubu otevřete úložiště.
Na kartě Kód úložiště AccelerateDevGitHubCopilot vyberte Přidat soubor README.
V editoru README.md zadejte připravujeme a pak vyberte Potvrdit změny.
V dialogovém okně
Commit changesvyberte Potvrdit změny.Přepněte do editoru Visual Studio Code a ujistěte se, že je otevřené zobrazení správy zdrojového kódu.
Otevřete nabídku Zobrazení a Další akce a pak vyberte Vyžádat.
Nabídku Zobrazení a další akce lze otevřít pomocí tří teček v pravém horním rohu zobrazení Správy zdrojového kódu.
Otevřete zobrazení Průzkumníka (ne Průzkumník řešení) a rozbalte složku AccelerateDevGitHubCopilot.
Otevřete soubor README.md.
Měla by se zobrazit zpráva "Připravuje se".
K aktualizaci souboru README úložiště v další části tohoto cvičení použijete GitHub Copilot Chat.
Vytvoření dokumentace k projektu pro soubor README
Soubor README je základní součástí libovolného úložiště GitHub. Soubor README poskytuje informace na základě potřeb projektu, přispěvatelů projektů a zúčastněných stran.
V tomto cvičení projektu s asistencí by soubor README měl obsahovat následující části:
- Název projektu: Stručný, jasný název projektu.
- Popis: Podrobné vysvětlení toho, co projekt je a co dělá.
- Struktura projektu: Rozpis struktury projektu, včetně klíčových složek a souborů.
- Klíčové třídy a rozhraní: Seznam klíčových tříd a rozhraní v projektu.
- Použití: Pokyny k použití projektu, často včetně příkladů kódu.
- Licence: Licence, pod kterou projekt spadá.
V této části cvičení použijete GitHub Copilot k vytvoření dokumentace k projektu a jeho přidání do README.md souboru.
K dokončení této části cvičení použijte následující kroky:
Otevřete zobrazení chatu.
Pomocí operací přetažení můžete přidat soubory do kontextu zobrazení chatu.
Pokud chcete vygenerovat dokumentaci k projektu pro soubor README, zadejte následující výzvu:
@workspace Generate the contents of a README.md file for the code repository. Use "Library App" as the project title. The README file should include the following sections: Description, Project Structure, Key Classes and Interfaces, Usage, License. Format all sections as raw markdown. Use a bullet list with indents to represent the project structure. Do not include ".gitignore" or the ".github", "bin", and "obj" folders.Poznámka:
Při použití více výzev by jeden pro každou část souboru README vytvořil podrobnější výsledky. V tomto cvičení se používá jedna výzva ke zjednodušení procesu.
Zkontrolujte odpověď a ujistěte se, že je každý oddíl formátovaný jako markdown.
Poznámka:
Oddíly můžete aktualizovat jednotlivě, aby poskytovaly podrobnější informace nebo pokud nejsou správně naformátované. Odpověď GitHub Copilotu můžete také zkopírovat do souboru README a pak provést opravy přímo v souboru markdownu.
Zkopírujte navrhované části dokumentace do souboru README.md.
# Library App ## Description Library App is a console-based application for managing library operations such as patron management, book loans, and membership renewals. It uses a JSON-based data storage system and provides various services to handle library functionalities. ## Project Structure - AccelerateDevGitHubCopilot.sln - README.md - src - `Library.ApplicationCore/` - `Entities/` - `Author.cs` - `Book.cs` - `BookItem.cs` - `Loan.cs` - `Patron.cs` - `Enums/` - `LoanExtensionStatus.cs` - `LoanReturnStatus.cs` - `MembershipRenewalStatus.cs` - `Interfaces/` - `IPatronRepository.cs` - `IPatronService.cs` - `ILoanRepository.cs` - `ILoanService.cs` - `Library.ApplicationCore.csproj` - `Services/` - `PatronService.cs` - `LoanService.cs` - `Library.Console/` - `appSettings.json` - `CommonActions.cs` - `ConsoleApp.cs` - `ConsoleState.cs` - `Library.Console.csproj` - `Program.cs` - `Library.Infrastructure/` - `Data/` - `JsonData.cs` - `JsonLoanRepository.cs` - `JsonPatronRepository.cs` - `Library.Infrastructure.csproj` - tests - `UnitTests/` - `ApplicationCore/` - `LoanService/` - `ReturnLoan.cs` - `ExtendLoan.cs` - `PatronService/` - `RenewMembership.cs` - `UnitTests.csproj` ## Key Classes and Interfaces - **Entities** - **Author**: Represents an author with properties like `Id` and `Name`. - **Book**: Represents a book with properties like `Id`, `Title`, `AuthorId`, `Genre`, `ImageName`, and `ISBN`. - **BookItem**: Represents a specific copy of a book with properties like `Id`, `BookId`, `AcquisitionDate`, and `Condition`. - **Loan**: Represents a loan with properties like `Id`, `BookItemId`, `PatronId`, `LoanDate`, `DueDate`, and `ReturnDate`. - **Patron**: Represents a library patron with properties like `Id`, `Name`, `MembershipStart`, `MembershipEnd`, and `Loans`. - **Enums** - **LoanExtensionStatus**: Enum for loan extension statuses. - **LoanReturnStatus**: Enum for loan return statuses. - **MembershipRenewalStatus**: Enum for membership renewal statuses. - **Interfaces** - **IPatronRepository**: Interface for patron repository with methods like `GetPatron`, `SearchPatrons`, and `UpdatePatron`. - **IPatronService**: Interface for patron service with method `RenewMembership`. - **ILoanRepository**: Interface for loan repository with methods like `GetLoan` and `UpdateLoan`. - **ILoanService**: Interface for loan service with methods like `ReturnLoan` and `ExtendLoan`. - **Services** - **PatronService**: Implements `IPatronService` to handle patron-related operations. - **LoanService**: Implements `ILoanService` to handle loan-related operations. - **Console** - **ConsoleApp**: Main console application class that handles user interactions and application flow. - **ConsoleState**: Enum for different states of the console application. - **CommonActions**: Enum for common actions in the console application. - **Infrastructure** - **JsonData**: Handles loading and saving data to JSON files. - **JsonLoanRepository**: Implements `ILoanRepository` to manage loan data. - **JsonPatronRepository**: Implements `IPatronRepository` to manage patron data. ## Usage 1. Clone the repository. 2. Open the solution file AccelerateDevGitHubCopilot.sln in Visual Studio. 3. Build the solution to restore dependencies. 4. Run the `Library.Console` project to start the console application. 5. Follow the on-screen instructions to search for patrons, view patron details, extend loans, return books, and renew memberships. ## License This project is licensed under the MIT License.V případě potřeby upravte formátování ručně a potom aktualizovaný soubor README.md uložte.
Otevřete zobrazení správy zdrojového kódu v editoru Visual Studio Code.
Pokud chcete, aby GitHub Copilot vygeneroval zprávu potvrzení, vyberte ikonu na pravé straně pole zprávy.
Měla by se zobrazit zpráva potvrzení podobná následující zprávě:
chore: Update README.md with project description and usage instructionsPřipravte a potvrďte aktualizace souboru.
Synchronizujte (nebo nasdílejte) aktualizace do úložiště GitHub.
Kontrola práce
Pokud chcete zkontrolovat svoji práci, proveďte následující kroky:
Otevřete úložiště GitHub pro projekt AccelerateDevGitHubCopilot.
Pomocí karty Kód zkontrolujte aktualizovaný README.md soubor.
Ujistěte se, že struktura projektu popsaná v souboru README zarovná strukturu složek úložiště.
Zkontrolujte historii potvrzení a vyhledejte zprávu potvrzení vygenerovanou GitHub Copilotem.