{"meta":{"title":"複雑な継承階層の簡略化","intro":"Copilot Chat は、継承の複数のレイヤーを持つクラスを回避するためにコードをリファクタリングするのに役立ちます。","product":"GitHub Copilot","breadcrumbs":[{"href":"/ja/copilot","title":"GitHub Copilot"},{"href":"/ja/copilot/tutorials","title":"チュートリアル"},{"href":"/ja/copilot/tutorials/copilot-cookbook","title":"GitHub Copilot クックブック"},{"href":"/ja/copilot/tutorials/copilot-cookbook/refactor-code","title":"コードのリファクタリング"},{"href":"/ja/copilot/tutorials/copilot-cookbook/refactor-code/simplify-inheritance-hierarchies","title":"継承階層を簡略にする"}],"documentType":"article"},"body":"# 複雑な継承階層の簡略化\n\nCopilot Chat は、継承の複数のレイヤーを持つクラスを回避するためにコードをリファクタリングするのに役立ちます。\n\n継承の階層が深いと、または継承が適切に使われていないと、コードの維持が困難になる可能性があり、クラス間の関係をたどったり、破損させずに拡張したりするのが難しくなります。\n\nCopilot Chat は、継承ベースのデザインをより柔軟な構成ベースの設計にリファクタリングすることを提案できます (継承よりもコンポジションを優先します)。 また、戦略やデコレーターなどのパターンを適用して、継承構造の複雑さを増すことなく、システムの拡張性を高めることも推奨できます。\n\n## サンプル シナリオ\n\n次の C# コードは継承階層が深く、各クラスは前のものに基づいて構築されます。 その結果、継承のチェーンが長くなり、各クラスのプロパティを把握するのが困難です。\n\nこのような複数レベルの継承階層は、理解、変更、拡張が困難な場合があります。\n\n```csharp id=employee-class\npublic class Employee\n{\n    public string Name { get; set; }\n    public int EmployeeID { get; set; }\n}\n\npublic class Manager : Employee\n{\n    public int NumberOfTeams { get; set; }\n}\n\npublic class SeniorManager : Manager\n{\n    public string Region { get; set; }\n}\n\npublic class Director : SeniorManager\n{\n    public int NumberOfDepartments { get; set; }\n}\n\npublic class VicePresident : Director\n{\n    public string Division { get; set; }\n}\n\npublic class President : VicePresident\n{\n    public string Company { get; set; }\n}\n```\n\n## プロンプトの例\n\nこのような状況では、他のクラスが継承する必要があるプロパティには親 `Employee` クラスを使い、それ以外のすべてのプロパティはクラスごとに個別に定義して他の継承を回避できます。\n\n```copilot copy prompt ref=employee-class\nRefactor this code so that classes only inherit the properties of the Employee class. All of the other properties that each class currently inherits should instead be declared independently in each class definition.\n```\n\n## 応答の例\n\n> \\[!NOTE] 次の応答は例です。 Copilot Chat の応答は非決定的であるため、ここで示したものとは異なる応答が返される可能性があります。\n\nCopilot は、次のコードを提案します。\n\n```csharp\npublic class Employee\n{\n    public string Name { get; set; }\n    public int EmployeeID { get; set; }\n}\n\npublic class Manager : Employee\n{\n    public int NumberOfTeams { get; set; }\n}\n\npublic class SeniorManager : Employee\n{\n    public int NumberOfTeams { get; set; }\n    public string Region { get; set; }\n}\n\npublic class Director : Employee\n{\n    public int NumberOfTeams { get; set; }\n    public string Region { get; set; }\n    public int NumberOfDepartments { get; set; }\n}\n\npublic class VicePresident : Employee\n{\n    public int NumberOfTeams { get; set; }\n    public string Region { get; set; }\n    public int NumberOfDepartments { get; set; }\n    public string Division { get; set; }\n}\n\npublic class President : Employee\n{\n    public int NumberOfTeams { get; set; }\n    public string Region { get; set; }\n    public int NumberOfDepartments { get; set; }\n    public string Division { get; set; }\n    public string Company { get; set; }\n}\n```\n\n## 詳細については、次を参照してください。\n\n* [GitHub Copilot Chat のプロンプト エンジニアリング](/ja/copilot/concepts/prompting/prompt-engineering)\n* [GitHub Copilot の使用に関するベスト プラクティス](/ja/copilot/get-started/best-practices)"}