4

非常に大規模な Web/データベース アプリケーション (現在約 80 ASPX ページ) を管理しています。これはクライアント間で共有されます (たとえば、すべてのクライアントが同じ URL で同じアプリケーションにアクセスします)。

また、コンパイルされたバージョンではなく、個々の ASPX ページをライブ サーバーにアップロードして、サイトのさまざまな部分でさまざまな時間に作業できるようにしています。

新しいクライアントが自分のサーバーでアプリケーション自体をホストしたいという課題があります。これには、アップロードする前に約 3 ページの変更が含まれます。

私はこれまでこの課題に直面したことはありませんが、これらのマイナーな変更のためだけにアプリケーション全体を複製することを避ける方法はありますか? 将来的には、元のアプリケーションとクライアント独自のホスト バージョンを管理する必要がありますが、新しいバージョンをそれぞれ 2 回アップロードしたり、変更された 3 つのページの異なるバージョンを管理したりする必要はありません。

4

2 に答える 2

2

私は以前にこの種のことをしたことがあります.3ページだけでまったく新しい「フォーク」はやり過ぎだと思います. 「ソース管理を使用しないでください」と言っているわけではありません。(なんらかのソース管理を使用する方がよいでしょ)しかし、3 ページの場合、簡単なリダイレクト ロジックが最も簡単な解決策だと思います。

これらの特定のユーザーがシステムにログインすると、問題の会社のメンバーであることを示す何らかの「グローバル変数」があると思います。置き換えようとしている 3 ページに、次のようなものを入れてif (companyName == "specialCompany") Server.Transfer("specialCompanyDirectory/anotherPage.aspx"); ください。健全性のために、置き換えた 3 つのページすべてを別のディレクトリに配置することをお勧めします。次に、「specialCompanyDirectory」の各ページの上部で、現在のユーザーが実際に「specialCompany」のメンバーであることを確認してください。

アプリケーションとページのロジックによっては、リダイレクト以外の処理が必要になる場合があります。別の Web ユーザー コントロールを使用するようなものです。

いずれにせよ、3 ページの変更用にまったく別のアプリケーションを作成することは、間違った方法のように思えます。大量のページを変更する場合は、TFS ブランチ、SVN フォーク、または別のソフトウェアを調べてください。

編集:

通常、ブランチは、最終的にマージするまで独立したままになるように設計されています。個々の枝が開発されている間、それらを永遠にバラバラにしておけば、それらは互いに何の関係もありません。そのため、「main」ブランチのこれら 3 つのページのいずれかに小さな変更を加えた場合は、「specialCompany」ブランチでも同じように変更を加える必要があります。

編集がほとんどないため、最初に上で説明した方法を使用することをお勧めします。これらの特別な変更を行っている場所を追跡できるように、特別な方法をいつ使用するかを決定するために、ある種のグローバルな方法を使用することをお勧めします。たとえば、次のようなメソッドを App_Code のどこかに追加します。

public String companySpecialMethod()
    {
        if (Request.ServerVariables["HTTP_HOST"].ToString().ToLower().Contains("somespecialdomain.com"))
        {
            return "somespecialdomain";
        }
        else if (Request.ServerVariables["HTTP_HOST"].ToString().ToLower().Contains("anotherspecialdomain.com"))
        {
            return "anotherspecialdomain";
        }
        else
            return "";
    }

次に、コードで次のようなことを行うことができます:

if (companySpecialMethod() == "")
{
    //run a normal method
    normalMethod();
}
else if (companySpecialMethod() == "somespecialdomain")
{
    //run a special method, just for somespecialdomain
    somespecialdomainMethod();
}
else if (companySpecialMethod() == "anotherspecialdomain")
{
    //run a special method, just for anotherspecialdomain
    anotherspecialdomainMethod();
}

でも

このソリューションにソース管理を本当に使用したい場合 (この種のことをたくさんやろうと考えている場合は、これが最良のアイデアかもしれません)、これを試すことができます:

ここに画像の説明を入力

リポジトリにすべてのコードが必要であると仮定すると、基本的に、すべてのプロジェクトでまったく同じコードのみを含む 1 つのリポジトリ (メイン リポジトリ) を作成します。このようにして、すべての基本コードが最新の状態に保たれます。通常のプロジェクトで行った変更はすべて、特別なプロジェクトにも反映されます。

(この次の部分を実行する必要はありません、すべてのコードを何らかのソース管理に入れることをお勧めします) 次に、「特別な」ディレクトリごとに新しいリポジトリを作成します。

この方法により、ソース管理にすべてのコードが含まれ、「ベース」コードへの変更を複製する必要がなくなります。

ソース管理ソフトウェアに関しては、私はSVNを好みますが、それは私だけです。:) TFS も優れた製品であり、SVN と同様に機能します。

于 2012-12-04T18:29:51.137 に答える
1

まず、80ページはかなり小さいです。

第二に、ソース管理は良いことです。

MSDN ライセンスをお持ちですか? 最大 5 ユーザーの TFS サービスへのアクセスは無料です。

于 2012-11-29T11:52:18.793 に答える