幅広い質問であることを承知しておりますので、できるだけ具体的にお話しさせていただきます。この質問は、技術的な質問よりも「組織的な」質問です。
これらの主なコンポーネントを持つマルチサイドプロジェクトがあります。
すぐに、私はアクティブなクライアントで生産されます。そしてどんなプロジェクトでも、私はすべての異なるコンポーネントを長期にわたって維持する必要があります。つまり、以下のすべてをアップグレードできます。
もちろん、サーバー側の部分(コアビジネスロジックコードとAPIコード)は自分ですぐに変更できます。ただし、新しいモバイルアプリはappstore/googleplayでクライアントによってダウンロードする必要があり、それらが最新であるかどうかはわかりません。
これらのアップグレードをスムーズにし、クライアントにリスクを与えないようにするためのガイダンス、優れた実践のヒントを教えてください。
どのバージョンの「バージョン」を作成する必要がありますか?クライアントがモバイルアプリをアップグレードしなくても、すべてが確実に機能するようにするにはどうすればよいですか?私の仕事を簡単にするために彼にアップグレードを強制する必要がありますか?
つまり、マルチサイドプロジェクトを長期にわたってライブにするには、どのように整理すればよいですか?
モバイルアプリを新しいリリースに更新するタイミングを制御できないため、少なくともREST APIをバージョンアップする必要があります。そうしないと、後方に作成することは不可能になります-そのインターフェースに対する互換性のない変更。
REST APIのほかに、ネットワークインターフェイスを経由する他の通信インターフェイスもバージョン管理することをお勧めします。これにより、すべてのバックオフィスクライアントを同時にアップグレードする必要がなくなります。サーバーとして、「ベータテスト」期間を備えた新しいバージョンへの段階的な移行を実装できます。
通信インターフェースのバージョン管理に加えて、可能な限り後方互換性のある変更を行うようにしてください。理想的には、古いクライアントを完全にサポートする新しいインターフェイスバージョンをロールアウトして、変更されたことに気付かないようにすることができます。
この post は、あなたの質問について興味深い点を示しています。
より実用的な方法で、3つのコンポーネントがある場合:
それぞれに典型的なM.m.p(Major.minor.patch)バージョン管理スキームを使用できますが、バックエンドURLにhttp://youhost/M.m/resourceURI
と置くことができます。
進化し、APIの変更がコンシューマとの契約に影響を与えないように、M.m
をURLにそのまま保持します。コンシューマーに影響を与えるバックエンドの変更(動作の変更や異なるオブジェクト)を行った瞬間から、M.m+1
、M+1.m+1
またはM+1.m
を使用します。
ユーザーが新しいコンシューマーをインストールしている間に、新しいバックエンドを古いものと並行してデプロイし、古いAPIを徐々に停止することで、物事を実行し続けることができます。
あなたは私よりもはるかに良い答えをここで見ることができます: Versioning REST Stackoverflow上のAPI
継続的インテグレーションサーバーをインストールして、コードリポジトリとスナップショット/リリースリポジトリに接続し、ビルドを自動化することをお勧めします。これには多くの利点があります。
私の経験は、オープンソースツール(SVN、Maven 2、Jenkins、Nexus)を使用してきましたが、これらすべての代替手段があります。
チームのスピードを上げるために、学習時間を過小評価しないでください。しかし、いったん速度が上がると、二度と戻ることはありません。
開発とデプロイメントの比較的小規模なチームの場合、IBM Jazzで採用されているクライアントN-1互換性モデルはかなりうまく機能する可能性があります
クライアントとサーバーを同じバージョン番号に保つようにしてください。 [独立したバージョンとその互換性のマトリックスを管理する代わりに]
クライアントバージョンX.y.yがX.y.yより上でX + 2.0.0より前のすべてのサーバーバージョンで動作するようにポリシーを作成する
サーバーバージョン4.0の場合、理想的にはすべてのクライアントタイプにクライアントバージョン4.0が必要です。ただし、クライアントとサーバーのわずかに異なるバージョンを許可するように、互換性を維持する必要があります。
クライアントバージョン4.xは、サーバーバージョン4.x以上6.0未満のサーバーと互換性があるはずです。サーバー4.xは、バージョン3.0以上で4.x以下のすべてのクライアントと互換性がある必要があります。
このようにして、クライアントの新しいバージョンの即時リリースを心配することなくサーバー上のバージョンを更新できますが、維持する互換性の明確に定義されたウィンドウのみが存在します。
参照:IBM Jazzモデル[ https://www.ibm.com/support/knowledgecenter/en/SSYMRC_6.0.0/com.ibm.jazz.install.doc/topics/c_n-1.html] =
まず、問題を少し違った方法で組み立てることから始めましょう。 「バージョン」を設定する必要があるソフトウェアを尋ねました。バージョンとは、CSでの過負荷の用語であり、約100の異なることを意味する可能性があります。私が見る主なものは次のとおりです。
それで、それは私にとって最も曖昧で最も興味深いものなので、私は#2に焦点を合わせます。構成管理に万能なcookie-cutterソリューションはありません。 2人または3人のチームでうまく機能するルールは、何百人もの労働者を必要とするプロジェクトで正気を保つにはあまりにも緩い場合があります。大きなチームで機能するルールは、小さなチームにとって非常に多くのオーバーヘッドを必要とする場合があります。ほとんどの場合、何かをまとめるには独自のものを作成する必要がありますが、構成管理システムの仕様を開発する方法として次のリストを使用します。
上記の質問に答えるのに助けが必要ですか?おそらく、コンサルタントまたはソフトウェアエンジニアリングマネージャーを雇う必要があります。教科書に記入することができ、このタイプのフォーラムの範囲外です。