インターネット上でのコンポーネント化に関する記事はたくさんありますが、私自身が構築することを学ぶ自分のプロセスも、インターネット上の祖先の記事から借りてきました。しかし、ほとんどの記事は詳細の一番下から始まり、人々に下から恐れを感じさせます。この記事を書く当初の意図は上から下にありますが、他の人が読む過程で「コンポーネントはこれらのいくつかのものである」と感じることができると思います。
まず、コンポーネント化されたプロジェクトと従来のプロジェクトの違いを見てみましょう。
従来のプロジェクトでは
通常、CommonLib Libraryモジュールとアプリアプリケーションモジュールがあり、ビジネスのロジックはアプリのさまざまなパッケージに記述されています。これには次の大きな欠点があります。
1.下請けがどんなに優れていても、プロジェクトが成長するにつれて、プロジェクトは徐々に階層感を失い、他の人が引き継ぐのが難しくなります。
2.小さな関数をデバッグする場合、コードを変更するたびに、プロジェクト全体を再構築する必要があります。
3.複数人による共同開発は、バージョン管理で競合やコードカバレッジの問題が発生しやすい
コンポーネント化されたプロジェクト
commonLibモジュールとappモジュールに加えて、各ビジネスコンポーネントモジュールを機能に応じて分割します(例:WeChatは、チャット、コントラクト、検索、マイニングの4つの主要なモジュールに分割できます)。前のパッケージが現在のモジュールになり、階層感が追加されます。各機能モジュールは個別にコンパイルできるため、コンパイルが高速化され、ユニットモジュールテストのサポートが提供されます。マルチパーソン開発は、独自のモジュールのみを担当するため、バージョン管理の競合を直接回避できます。
コンポーネント化によって解決される主な問題を理解した後、何をする必要があるかを見てみましょう
組織の最初の実現は、実際には最終的に解決しなければならない2つの問題のみです。
1.モジュール間の依存関係を設定し、ビジネスモジュールを個別にコンパイルします。gradleを構成することで解決できます。
2.ページジャンプとビジネスモジュール間の通信-AliオープンソースARouterを使用して解決する
次に、操作方法を見てみましょう
最初にモジュール間の依存関係の問題を見てください
WeChatの4つのモジュール(チャット、契約、検索、マイニング)を参照して構成できます。
まず、プロジェクトの基本構造は次のとおりです。
合計6つのモジュールを構築する必要があります。4つの機能モジュールに加えて、基本的な共通ライブラリとスタートアップとしてのアプリケーションがあります。
プロジェクトをビルドした後、4つのモジュールを個別にコンパイルするかどうかのスイッチを構成する必要があります。
これはスイッチの構成場所に関する問題であり、gradle.propertiesファイルに追加することで、値を変更するたびにGradleの再構築をトリガーできるため、モジュールを個別にコンパイルするのに便利です。
個別にコンパイルしたスイッチが構成されたので、6つのモジュール間の依存関係を構成しましょう。
まず、さまざまなモジュール間の相互作用を容易にするために、Aliの完全なARouterライブラリを借りました。そのため、各非共通ライブラリ(メインアプリケーションを含む)で、ARouterおよびcommonlibへの依存関係を追加することを強くお勧めします。
次に、4つの関数モジュールライブラリの場合、個別にコンパイルするかどうかを前に構成したスイッチを使用してインストールする必要があります。次の2か所を変更する必要があります。
変更したいのは、赤いボックスで囲んだ場所です。スイッチがオンになっている場合は、別のアプリケーションとしてコンパイルし、一意のapplicationIdを指定して、 gradle.propertiesで構成されたスイッチは、それがアプリケーションのみとしてコンパイルされるかどうかを制御します。
エントリモジュール-アプリモジュールでは、次の構成を行う必要があります。
図1-5メインモジュールのGradle構成
基本的なARouterとcommonlibの依存関係の設定に加えて、アプリモジュールのgradleファイルのスイッチに応じて、関数モジュールに依存する必要があるかどうかを選択する必要があります。これは、各関数モジュールの設定に対応しています。
他のコンポーネントモジュールの場合は、上記の手順を繰り返して、コンポーネントフレームワークの構築を完了します。
コンポーネントフレームワークの構築が完了したら、フレームワークの特徴的な使用方法のいくつかを簡単に見てみましょう。
最初に、各モジュールのページ間を移動する方法を確認します。
これまでにARouterに依存してきました(詳細な使用方法については、https://github.com/alibaba/ARouterを参照してください)。ジャンプを使用するには、次の手順が必要であることを理解するために使用する必要があります。
ジャンプメソッドは図2-1に示すとおりです。ターゲットページをマークし、転送するパラメーターをアタッチしてから、ナビゲーション()を呼び出してジャンプしますが、誰かがターゲットページがパスのように見えることを尋ねます。それはどのように定義されていますか?
- 最初に、@ Routeアノテーションでページに注釈を付け、パス変数でページのパスを定義します
- 転送された変数について、同じ名前のフィールドを直接定義し、@ Autowired変数を使用してマークを付けます。Arouterは自動的にフィールドに値を割り当てます
- 最後に、ページをARouterに挿入する必要もあります(原理はButterKnifeに似ています)。必要な作業を完了するのを手伝ってもらいます。
このようにして、ページ間のジャンプを完了しました。これは、従来の方法よりもシンプルで合理的ですか?
最後に、コンポーネントが互いにサービスを提供する方法を見てみましょう。
- ここでは、メインモジュールのhomeコンポーネントのsayHelloメソッドを呼び出して、人の名前をトーストしたいと思います
- ホーム内のメソッドを他のモジュール(メインモジュールと他のコンポーネントモジュールを含む)から呼び出す方法
最初にIlibiderインターフェイスを継承しながら、commonlibモジュールのメソッドを公開するインターフェイスを作成し、インターフェイスの署名を定義します
次に、ホームモジュールのcommonlibで定義されているインターフェイスを継承し、署名メソッドを実装します。
ここでは、Arouterの@Routerアノテーションを使用して、このサービスのルーティングを提供します。
最後に、他のモジュールで@Autowiredアノテーションを使用してこのメソッドを呼び出すことができます
@Autowiredアノテーションを使用してbaseServiceサービスを最初に設定し、ページをArouterに挿入してサービスのメソッドを呼び出し、サービスへの依存がインターフェースに基づいているため、柔軟性が大幅に向上していることがわかります。
基本的なコンポーネント化されたフレームワークの構築が完了しました。それを注意深く読んだ友人が何かを得られることを願っています!何か問題があれば、是正したいです!
上記のプロジェクトのコードクラウド(改善への参加を歓迎します):https://gitee.com/zsq519/ARouterBaseProject
この記事は簡単ではありません。この記事が気に入った場合や、参考になった場合は、気に入って転送してください。記事は継続的に更新されます。絶対ドライグッズ!!!