前の投稿では次のようになりました。
- 私たちの問題領域: いくつかの要件がある ToDo アプリケーション
- Python および Python Polylith を使用するように構成された基本的なリポジトリ。
したがって、いくつかの決定は処理されます。いくつかのツールがあり、リポジトリがどのようなものになるか決定しました。
これは、Polylith について私が気に入っている点の 1 つです。コーディングしている内容や組織の規模に関係なく、複数のリポジトリが必要な場合でも、すべてのリポジトリが同じように見えます。
FastAPI、Flask、または Django を使用しているか、単一または複数のライブラリを構築しているか、または Celery でバックグラウンド タスクを実行しているかに関係なく、リポジトリ構造は一貫しています。
重要な利点の 1 つは、新しい開発者のオンボーディング プロセスが合理化されていることです。 Polylith を理解していると仮定すると、プロジェクトの構造にすぐに慣れるでしょう。再利用可能なコンポーネントはコンポーネント フォルダーにあり、エントリ ポイントはベース フォルダーにあり、デモ スクリプトは開発フォルダーにあります。
エンティティ
ボブおじさんより「クリーンなアーキテクチャ」 エンティティは私たちのアーキテクチャの基礎であり、私たちのアーキテクチャの最も内側の層です。したがって、それらから始める必要があります。Polylith では、エンティティはコンポーネントとして存在する必要があります。
コンポーネントはいくつありますか?
コンポーネントの数はソリューションの規模と複雑さに依存すると思います。ただし、エンティティ用の単一のポリリス コンポーネントから始めることをお勧めします。このアプローチは、特に小規模なプロジェクトの場合、明確で焦点を絞ったアーキテクチャを維持するのに役立ちます。
なぜエンティティに単一のコンポーネントを使用するのですか?
- この層は、アプリケーション全体の基礎となるコア ビジネス ルールをカプセル化します。単一のコンポーネントに保持することで、一貫性が確保され、重複が回避されます。
- 単一のコンポーネントは他のすべてのレイヤーの依存関係となるため、依存関係の管理が簡素化されます。
サードパーティの依存関係を回避します。
外部の依存関係を最小限に抑え、アーキテクチャの柔軟性を高めるには、エンティティの表現に Python の標準ライブラリを使用するように努めてください。これには、dict、list、enum、関数、クラス、そして最近ではデータクラスなどのデータ構造の活用が含まれます。
Pydantic や Django Models などのサードパーティ ライブラリを避ける理由は何ですか?
- 外部フレームワークへの結合: これらのライブラリに依存すると、特定のフレームワークへの不必要な結合が発生する可能性があります。
- 複雑さの増加: 外部ライブラリにより、複雑さが増し、メンテナンスの問題が発生する可能性があります。
- 柔軟性の低下: 外部依存関係を制限することで、要件やテクノロジーの変化により簡単に適応できます。
これらの原則に従うことで、将来の変更にも対応できる堅牢で保守可能なアーキテクチャを作成できます。
ToDoエンティティ
私たちの例は簡単で、コア エンティティは Gordon の「todo アイテム」です。新しいコンポーネントをリポジトリに追加できますが、正しい名前を選択することが重要です。
「core」や「main」などの一般的な名前を使用したくなるかもしれませんが、ドメイン コンテキスト内で意味のある名前を選択することが重要です。理想的には、これらの名前は、クライアントまたは製品所有者が使用する用語と一致している必要があります。ドメイン固有の名前を使用することで、コードの可読性と保守性が向上し、開発者と関係者の両方がプロジェクトの構造を理解しやすくなります。
リポジトリのワークスペース名は todo として定義されています。したがって、すべてのインポートは次の形式に従います:
from todo.XYZ import ... import todo.XYZ
この例では簡単にするために、コンポーネント名としてエンティティを使用します。ただし、実際のシナリオでは、ドメインを反映した命名規則を考慮してください。たとえば、アプリケーションがドキュメントの回復を中心に展開している場合は、recovery という名前のコンポーネントが適切です。同様に、ゲーム アプリケーションでは、わかりやすくするためにトーナメント_エンティティを使用する場合があります。
Python Polylith を使用したコンポーネントの作成は簡単です:
poetry poly create component --name=entities poetry poly sync poetry install # it may be necessary
これにより、コンポーネント フォルダーに Python パッケージが追加されます。これはソース ツリーの新しいエントリです:
./components └── todo └── entities ├── __init__.py └── core.py ./test/components └── todo └── entities ├── __init__.py └── test_core.py
Python-polylith ツールはテスト サンプルを生成します。これは優れた機能です。この動作は、workspace.toml ファイルで [tool.polylith.test] セクションの Enabled = true 値を false に設定することで変更できます。
新しいエンティティ コンポーネントに、__init__.py と core.py という 2 つのファイルが追加されます。ニーズに合わせて core.py モジュールの名前を変更できます。一般的な方法は、core.py などの他のモジュール内で内部組織を維持しながら、__init__.py を通じてパッケージのパブリック API を公開することです。
要件から、現時点では、ToDo 項目というエンティティが 1 つだけあります。
@dataclass class TodoItem: owner: str title: str description: str is_done: bool = False due_date: Optional[date] = None
このような単純なエンティティをテストするのは不必要に思えるかもしれませんが、少なくともすべてのフィールドの存在をテストすることを好みます。これは、貢献者が少ない小規模なプロジェクトでは重要ではないように見えますが、多くの開発者がいる大規模なプロジェクトでは重大な問題を防ぐことができます。エンティティから 1 つのフィールドを削除すると、アプリケーションのさまざまな部分が誤って破損する可能性があります。
この部分のプル リクエストでは、このエンティティにいくつかの基本的なテストを追加したことがわかります。
いくつかのテストがすでに定義されているので、GitHub ワークフローを追加して、プル リクエストごとにテストを自動的に実行する機会を利用しました。
結論
- アプリケーションの基本エンティティ
- CI セットアップ
次は、永続性について話しましょう
以上がクリーンなアーキテクチャ: どこから始めればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このチュートリアルでは、Pythonを使用してZIPFの法則の統計的概念を処理する方法を示し、法律の処理時にPythonの読み取りおよび並べ替えの効率性を示します。 ZIPF分布という用語が何を意味するのか疑問に思うかもしれません。この用語を理解するには、まずZIPFの法律を定義する必要があります。心配しないでください、私は指示を簡素化しようとします。 ZIPFの法則 ZIPFの法則は単に意味します。大きな自然言語のコーパスでは、最も頻繁に発生する単語は、2番目の頻繁な単語のほぼ2倍の頻度で表示されます。 例を見てみましょう。アメリカ英語の茶色のコーパスを見ると、最も頻繁な言葉は「thであることに気付くでしょう。

この記事では、Pythonライブラリである美しいスープを使用してHTMLを解析する方法について説明します。 find()、find_all()、select()、およびget_text()などの一般的な方法は、データ抽出、多様なHTML構造とエラーの処理、および代替案(SEL

この記事では、深い学習のためにTensorflowとPytorchを比較しています。 関連する手順、データの準備、モデルの構築、トレーニング、評価、展開について詳しく説明しています。 特に計算グラップに関して、フレームワーク間の重要な違い

Pythonオブジェクトのシリアル化と脱介入は、非自明のプログラムの重要な側面です。 Pythonファイルに何かを保存すると、構成ファイルを読み取る場合、またはHTTPリクエストに応答する場合、オブジェクトシリアル化と脱滑り化を行います。 ある意味では、シリアル化と脱派化は、世界で最も退屈なものです。これらすべての形式とプロトコルを気にするのは誰ですか? Pythonオブジェクトを維持またはストリーミングし、後で完全に取得したいと考えています。 これは、概念レベルで世界を見るのに最適な方法です。ただし、実用的なレベルでは、選択したシリアル化スキーム、形式、またはプロトコルは、プログラムの速度、セキュリティ、メンテナンスの自由、およびその他の側面を決定する場合があります。

Pythonの統計モジュールは、強力なデータ統計分析機能を提供して、生物統計やビジネス分析などのデータの全体的な特性を迅速に理解できるようにします。データポイントを1つずつ見る代わりに、平均や分散などの統計を見て、無視される可能性のある元のデータの傾向と機能を発見し、大きなデータセットをより簡単かつ効果的に比較してください。 このチュートリアルでは、平均を計算し、データセットの分散の程度を測定する方法を説明します。特に明記しない限り、このモジュールのすべての関数は、単に平均を合計するのではなく、平均()関数の計算をサポートします。 浮動小数点数も使用できます。 ランダムをインポートします インポート統計 fractiから

このチュートリアルでは、システム全体の観点からPythonのエラー条件を処理する方法を学びます。エラー処理は設計の重要な側面であり、エンドユーザーまでずっと(ハードウェア)が最も低いレベル(場合によってはハードウェア)を超えます。 yの場合

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

このチュートリアルは、単純なツリーナビゲーションを超えたDOM操作に焦点を当てた、美しいスープの以前の紹介に基づいています。 HTML構造を変更するための効率的な検索方法と技術を探ります。 1つの一般的なDOM検索方法はExです


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

メモ帳++7.3.1
使いやすく無料のコードエディター

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ホットトピック









