このブログ投稿では、HyperGraph プロジェクトのコマンドライン インターフェイス (CLI)、つまり動的コマンド ローディング システムの最近の改善について詳しく説明します。 当初、新しい CLI コマンドの追加は複数段階の手動プロセスであり、DRY 原則とオープン/クローズ原則に違反していました。
課題: 手動コマンド登録
関連する新しいコマンドの追加:
__init__.py
内のインポートを更新しています。これは退屈でエラーが発生しやすく、新機能ごとに既存のコードを変更する必要があり、理想とは程遠いものでした。
ソリューションの検討: 自動化と動的読み込み
次の 2 つの解決策が検討されました:
自動化スクリプトは最初は単純に見えましたが、根本的な設計上の欠陥ではなく、症状に対処するだけです。
解決策: 動的コマンド検出
選択されたソリューションは、コマンドを自動的に登録する動的読み込みシステムでした。 コアコードは次のとおりです:
<code class="language-python">async def load_commands(self) -> None: implementations_package = "hypergraph.cli.commands.implementations" for _, name, _ in pkgutil.iter_modules([str(self.commands_path)]): if name.startswith("_"): # Skip private modules continue module = importlib.import_module(f"{implementations_package}.{name}") for item_name, item in inspect.getmembers(module): if (inspect.isclass(item) and issubclass(item, BaseCommand) and item != BaseCommand): command = item(self.system) self.registry.register_command(command)</code>
このアプローチにはいくつかの利点があります。
implementations
ディレクトリに新しいファイルを配置することが簡単になります。学んだ主な教訓
CommandRegistry
メソッドを維持することで、既存のコードが引き続き機能することが保証されます。小さな挫折
型インポートの欠落 (Any
からの typing
) で小さな問題が発生し、Python における徹底的な型ヒントの重要性が強調されました。
今後のステップ
動的システムが実装される一方で、コマンド ファイル テンプレートを生成するための開発ツールとして自動化スクリプトの可能性が残ります。 今後の予定は次のとおりです:
結論
このリファクタリングは、より洗練されたソリューションを実現するためにアプローチを再評価する利点を示しています。 クイックフィックスよりも多くの初期作業が必要ですが、その結果、より保守しやすく、拡張性があり、Python 的なコードが得られます。 長期的な保守性を優先することで、将来の開発が簡素化されます。
タグ: #Python #リファクタリング #CleanCode #CLI #プログラミング
詳しい技術情報については、Codeberg リポジトリを参照してください。
以上がPython CLI をより保守しやすくする: 動的コマンド読み込みの旅の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。