1

最初にはっきりさせておきたいのですが、私は「私の技術はあなたの技術よりも優れている」タイプの投稿を探しているわけではありません。これは実際のシナリオであり、私はこの決定に直面しています。これを念頭に置いて、次のように説明します。

WinForms アプリケーションがあります。初期の .NET 1.0 で開始されましたが、最初に出荷されたバージョンは .NET 1.1 を使用していました。レイヤー (BusinessLayer.dll、Datalayer.dll、Framework.DLL など) がありますが、このアプリケーションの「長い」開発サイクルのある時点で、「プレゼンテーション」レイヤー (Win フォーム) が何らかのコードに感染しましたしたがって、「コードとコードビハインドを含むプレゼンテーションとの分離」は、ある種の神話です。悪い慣行であろうとなかろうと、真実はアプリケーションがそこにあり、それが機能するということです。

何年も経ち、.NET 2.0 ができました。ゆっくりと移行しましたが、ほとんど問題なく機能し、あちこちでいくつかの呼び出しを変更する必要がありました。最後のバージョンでも同じことが行われましたが、.NET 3.5sp1. ある種の Web サービスが必要だったため、代わりに WCF を使用することにしました。それは正常に動作します。しかし、これらすべての .NET アップグレードにもかかわらず、アプリケーションのコードベースのほとんどは、5 年前と同じ古いロックンロールのままです。データオブジェクトには Gentle.NET (古くてメンテナンスされていません) を使用しています (5 年前はありがたいことでした!)。

私たちのプレゼンテーション レイヤーである winform は、完全に gdi+ カスタム コントロールの 90% を採用しているため、「見栄えが良い」ものです。(可能な限り、WinAPI をハッキングする必要はありません)。アプリケーションはタッチ ベースです (つまり、インクを使用しますが、それに依存しません) が、ボタン、ラベルなど、すべてが触覚デバイスで使用するように「設計」されています。(TabletPC またはタッチスクリーン)。もちろん、キーボード/マウスを使用するユーザーもいます。

これらすべてを念頭に置いて、このすべての web2.0 とインターネットの混乱 (および Jeff の投稿 ;)) を考慮して、Web テクノロジを使用してアプリケーションを書き直す可能性を検討しています。このアイデアは明らかに、お客様により多くの可用性をもたらし (いつでもどこでも好きなときにシステムを使用できる)、メンテナンスを減らします (アップグレードすることができ、すべてのお客様が即座にアップグレードされます) などです。ご存知のように、通常のインターネット対WinAppのもの。

問題は、これがヘルスケア業界であることを考えると、すべての顧客がデータベースをサーバーに「移動」することに前向きであるとは限らないことです。サーバーなので、独自のコピーがあります。大きな問題ではありません (ただし、手動で更新する必要がありますが、win32 アプリを 5 年間更新してきたことを考えると、それは問題ではありません!)。

さて、メインの「質問」に戻ります。

チームは ASP.NET の経験がほとんどなく、ASP 2.0 (1999/2000 年) で多くのプログラミングを行いましたが、それは HTML+VBScript+CSS のスパゲッティでした。すべての経験 (インターネット バブル!) の後、私たちは VB6 に戻り、次に C#.NET 1x に戻りました。私たちは、WinForms の C# 開発者の小さなチームです。前回の .NET 3.5 ライドで、Linq To SQL の経験をいくつか獲得し、気に入りました。とても自然で、「5年前にこれがあったら…」という感じでした。

これらすべてを考えると、アプリケーションの書き直しは「単純な作業」ではなく (既知の C#.NET でやりたいと思っていたとしても)、時間と計画が必要ですが、数十の間違いを修正することができ、5 年かかりました。アプリケーションを使用した経験から、顧客がソフトウェアをどのように使用したいか、および現在のアプリを設計したときに (自分たちで) どのような制限を作成したかについて、より良いアイデアを持っていると言えます。アプリケーションとビジネスの仕組みに関するすべての「知識」を適用して、設計、コード、および使いやすさの点ではるかに優れたアプリケーションを作成できます。.NET 1.1 にはジェネリックさえなかったのを思い出してください! ;) (ここにたくさんの ArrayList がぶら下がっているのを見るでしょう)。

追加のメモとして、Crystal Reports を使用しています (そして、いつものように、Crystal Reports は嫌いです)。インク コントロールも「必須」ではないと思います。HTML/CSS は、HTML が WinForms ではない (したがって、再現できないものがある) ことを認識していますが、私たちが望むように見えるように形作ることができます。

これを MVC (または WebForms) で計画するのはクレイジーだと思いますか? 私は MVC (Ruby on Rails のような) のアイデアが好きです (本の基本を超えて Ruby でプログラミングしたことはありません)。それは「ロケット科学」ではないはずですよね?

この質問全体が少し主観的であることは承知していますが、老朽化し​​た Winforms アプリケーションを新しい ASP/MVC/XXX Web アプリケーションに置き換えませんか? あなたは経験がありますか、または試みました(そして成功したか失敗しましたか)?

使用者が何をすべきかをより適切に決定するのに役立つ洞察をいただければ幸いです。

前もって感謝します!

アップデート: 回答してくれたすべての人に感謝します。これが良い動きであるかどうかを評価します。確かに大変な作業ですが、デスクトップ アプリが古くなっており (古いネット 1.1 ハックを使用)、 Vista と W7 ではほぼ問題なく動作していましたが、将来のアップデートで壊れる可能性があります。また、アプリケーションの「多かれ少なかれコア」部分の多くは、設計が不適切なアイデアを露呈しているため、特定のタスクを達成するためにあちこちでハッキングする必要がありました。一部は経験不足であり、一部はビジネスがどのように機能したかについての 100% の知識の欠如です (そして、顧客は自分が何を望んでいるのかわかりません)。新しいアプリケーション (どのような形式であっても) により、すべてのユーザーの知識を保持しながら、より優れた基盤を作成できます。しかし、それは大変な作業です :) したがって、ここではこれらすべてのオプションを検討します。一部の方がおっしゃっているように、

もう一度、すべてに感謝します!

4

3 に答える 3

3

Web アプリを再作成するときは、デスクトップ アプリケーション コードを再利用するためのすべての努力を捨てるのが最善です。理由は次のとおりです。

  1. Web アプリ、特に asp.net は異なるモデルを使用します。まず、http はステートレスです。ブラウザーがサーバーと対話するたびに、現在のページのすべてのコントロールの現在のコンテンツを明示的に送信する必要があります。Windows アプリケーションでこのようなモデルを使用することはありません。

  2. ネットワークの負荷を軽減するには、viewstate のサイズと http リクエストの頻度を最適化する必要があります。繰り返しますが、既存のウィンドウ アプリにはそのような規定はありません。

  3. ビューを更新しています。さまざまなシナリオで GUI を更新するために、さまざまなイベント ハンドラー、スレッド、および Windows アプリケーションにないものがある場合があります。そのすべてを交換する必要があります。Javascript はまったく別の動物です。

  4. 安全。ブラウザを使用する場合、ローカル ディスクへのアクセスは非常に制限されますが、Windows アプリケーションでは当然のことと見なされます。Windows アプリにローカル リソースを必要とするコードがある場合、それが問題になります。

次のことをお勧めします。

  • 現在のアプリケーションにローカル ディスク アクセス要件があるかどうかを確認します (例: ローカル ファイルへの読み取り/書き込みなど)。
  • さまざまな http モジュールまたはハンドラーを作成するときに、既存の Windows アプリケーションのバックエンド/ビジネス ロジック部分の一部を活用してみることができます。
  • アプリケーションのどの部分が Web サービスになるかを考えてみてください。
于 2009-09-07T17:43:56.830 に答える
2

アプリケーションをクリーンアップするには、多くのリファクタリングが必要なようです。Web モデルに移行し、再利用を最大限にしたい場合は、実際にそれを行う必要があります。Web モデルに移行する前に、そのモデルでユーザー インターフェイスを複製できるかどうかを理解する必要があると思います。顧客の視点から見た独自のセールス ポイントはありますか? このような決定は、純粋に技術的な決定ではなく、ユーザー主導で行う必要があります。

あなたのアプリケーションは、最小公倍数の Web モデルではなく、シック クライアント アプリケーションに最適な候補のようです。

考慮すべき事項:

  • Web インターフェイスはタブレットの操作にどのように影響しますか?
  • Web バージョンを使用することで、どのような新しい顧客があなたにもたらされますか?
  • 既存の顧客はあなたの製品を放棄しますか?
  • Web テクノロジーの指導に適したスキルを持つコンサルタントや外部リソースにアクセスできますか? そうでない場合は、StackOverflow またはその他の Web リソースに頼ることができます。現場での優れたメンタリングとガイダンスが必要です。
  • この取り組みを開始して、予想よりもはるかに時間がかかったらどうなりますか? あなたはアプリを知っていますが、ウェブを知っているようには聞こえません。過去の経験から、このような大規模な書き換えは大惨事に終わる可能性があることが示されています (最初はそれほど難しいことではありません)。
  • Web ベースのバージョンで新機能を作成できますか?
  • アプリケーションを顧客に展開しやすくするために、ClickOnce 展開に移行していただけますか。Web の利点の 1 つは、展開が簡単 (ゼロ) であることです。それに近づくことはできますか?
  • WPF に移行して、それを使用してブラウザー アプリケーションを作成する方が簡単でしょうか?
  • Silverlight または Flex は、リッチ エクスペリエンスを作成するためのより良いオプションである可能性があり、WinForms 開発者にとってより親しみやすい可能性があります。これは可能性がありますか?
于 2009-09-07T18:18:43.437 に答える
0

あなたのアプリのようです。デスクトップ アプリとして最適なアプリの 1 つです。ユーザーがアプリにアクセスできるようにしたいのですが。ブラウザを使用します。

GUI がよりクリーンになり、「コード」がないように、可能な限りリファクタリングすることをお勧めします。これが完了したら、asp.net mvc アプリの開発を開始しますが、デスクトップ アプリはそのままにしておきます。UIレイヤー以外のすべてのレイヤーを使用できるようにする必要があります。これにより、簡単/高速/... mvcが存在するようになったので、Webフォームは、Web以外の開発者にWebを実行させることに関するものだと思います。しかし、あなたはウェブを知っていて、コントロールが必要なので、mvc が最適です。

于 2009-09-07T18:36:07.677 に答える