2008-09-02 16 views
5

私は約1ヶ月前に新会社に入社しました。会社の規模はやや小さく、かなり強い「スタートアップ」感覚を持っています。私は3人のチームでJava開発者として働いています。同社は、主にビジネス/ビジネスタイプの人々が互いに通信するためのサービスを販売している。既存の乱雑なWebアプリケーションをエレガントなMVCに移行する最も良い方法は何ですか?

サービスを販売している既存のユーザーがサービスをチェックして請求書を払うために、新しいユーザーがサインすることができる会社のメインWebサイトですこれはTomcatにデプロイされたJSPアプリケーションであり、企業自身が作成した永続化レイヤーを介してデータベースにアクセスします。

私はここにいる(私は仕事全体にかなり満足しているので、これは「ああ、私の仕事が好きではない」タイプの投稿ではない)このWebアプリケーション用のより大きなデザインやアーキテクチャ。このアプリケーションは、サーブレットやBeanや他の種類のフレームワークにはロジックがほとんど存在しない、数十のJSPページで構成されています。 JSPページの多くは数千行のコードで、jsp:include他のJSPページ、ビジネスロジックがHTMLと混在しています。頻繁に使用されるコードスニペット(Webサービス接続の取得など)は、再利用されるのではなくカットアンドペーストされます。つまり、アプリケーションは混乱しています。

MVCによく合うように、このサイトを再設計しようとする会社の中には何らかの不具合がありました。開発者や上級者は、現在のスパゲッティコードのパターンが持続可能ではなく、ユーザーにとってより多くの機能を追加するために非常に簡単に拡張可能ではないことに気付き始めていると思います。上級者や開発者は、何週間か何週間もの間、既存の機能を書き直すことになるため、完全な書き直しには注意が必要ですが、サイトの特定の領域を新しいフレームワークに書き込む。

アプリケーションとコードベースをこの方向に動かすための最良の戦略は何ですか?どのように私は開発者として本当にこれを移動するのを助けることができますし、素早く、仕事に来て、誰もが書いたことは駄目だと伝えるジャークの新しい人のように見えることなく、あなたがこのようなことに遭遇したときにあなたの職務経験で使った実績のある戦略や経験はありますか?

答えて

10

あなたの最善の策は、おそらくあなたが進むにつれてそれをリファクタリングすることでしょう。非常に多くのビジネスルールが埋め込まれているものから、最初から完全に始めるために必要となるリソースはほとんどありません。管理者は、あなたが置き換えたものよりも多くのバグを持つアプリケーションの開発に何ヶ月も費やすと、本当にそれが嫌いです。

個別のアプリをゼロから作成する機会がある場合は、その中のすべてのベストプラクティスを使用して、そのアプリの効果を実証することができます。できるときは、それらのアイデアを徐々に古いアプリケーションに組み込みます。

1

私の経験では、アプリケーションの「優雅さ」は、通常、何よりもデータベース設計と関係があります。 偉大なデータベース設計(よく定義されたストアドプロシージャインターフェイスを含む)を使用している場合、使用するプラットフォームに関係なく良好なアプリケーションコードが続く傾向があります。 のデータベース設計ではない場合は、どのプラットフォームを使用していても、常にデータベースを補うので、エレガントなアプリケーションコードを構築するのは非常に困難です。

もちろん、そこ偉大貧しい間の部屋がたくさんですが、私のポイントは、あなたが良いアプリケーションのコードをしたい場合は、データベースが嗅ぎまでであることを確認することによって開始することです。

1

メンテナンスモードのアプリケーションではこれが難しくなります。これは、既に「動作している」ものを書き直すことは価値があると経営陣に説得することが困難なためです。私はあなたが作業できる新しいコードにMVCの原則を適用することから始めます(つまり、ビジネスロジックをモデルに近いものに移動し、すべてのレイアウト/ビューコードを1か所に配置します)

MVCの新しいコードで経験を積むことで、既存のコードを微妙に変更して、それがラインに収まるようにすることができます。それは非常に遅いプロセスかもしれませんが、あなたがそれを行うこの方法の利点を示すことができれば、他の人を納得させ、チーム全体を得ることができます。

1

私は遅いリファクタリングアプローチに同意します。例えば、コピー&ペーストされたコードを取り出して、適切なJavaパラダイム(クラス、おそらくはそれ以上の場合は、既存のライブラリを使用するかどうか)にそれを抽出します。あなたのコードが本当にきれいで、全体的なアーキテクチャ戦略にまだ欠けている場合は、を入力してにすると、より簡単に全体的なアーキテクチャに適合させることができます。

1

最も良い方法は、コードを印刷して、それを潰して投げ捨てることです。紙をリサイクルしないでください。

あなたは、1,000行以上の長いJSPで書かれたアプリケーションを持っています。おそらく神秘的なドメインモデルを持っていて(ビジネスモデルがあれば)、ビジネスロジックでプレゼンテーションをMIXするだけではなく、そこに座って何時間も動揺し続けます。あなたが駄目なコードを取り出してMVC Controllerクラスに移行しても、正しいことを実行する方法はありません。ちょうど貧血ドメインモデルのMVCアプリケーションで終わるか、データベース呼び出しのようなものコントローラコードでは、まだ失敗しています。

あなたは正しいことをする新しいアプリを試して、次に2つのアプリをお互いに話すことができますが、それはそれ自体新しい複雑さです。また、あなたが一から始めたばかりの仕事と同じ量の仕事をしている可能性が高いですが、より良いアプローチであることを上司に説得しようとすると楽に時間がかかるかもしれません。

3

マイケルフェザーの仕事Effectively with Legacy Codeのコピーを最初にピックアップします。次に、既存のコードをどのようにテストするのが最適かを特定します。最悪のケースは、あなたがいくつかの高レベルの回帰テスト(または全く何もない)に悩まされていることです。そして、あなたが運が良ければ、単体テストがあります。それで、新しいビジネス機能を同時に追加しながら、うまくゆっくりと安定したリファクタリングを行うケースがあります。

0

反復的なリファクタリング。また、新しいフレームワークの価値を示す方法として、新しいフレームワークで完全に実行できる新しい機能を探します。

0

私の提案は、他のJSPのインポートを必要としないか、またはインポートがほとんどない稀なページを見つけることです。ブラックボックスとしてインポートされた各JSPを処理し、それらのページをリファクタリングします(反復的に各変更をテストし、続行する前に動作することを確認してください)。これらが整理されたら、最終的にインポートをリファクタリングするまで、より多くのインポートを含むページを見つけることができます。

リファクタリング時に、ページに与えられていないリソースにアクセスしようとする部分に注意し、これをコントローラに取り込もうとします。たとえば、データベースにアクセスするものはコントローラ内にある必要があります。コントローラが前方に経由して情報を表示するようにJSPに指示します。このようにして、各ページのサーブレットやサーブレットのようなものを開発します。このリファクタリングのためにフロントコントローラベースのフレームワークを使用することをお勧めします(個人的な経験から私はSpringとそのコントローラインタフェースを推奨します)。これにより、各コントローラは別個のサーブレットではなく、適切にマップされた単一のサーブレットから委譲されます。

コントローラーの場合、データベースのヒットを断片的に試みるのではなく、一度に行う方がよいです。ユーザーはページ負荷を許容することができますが、レンダリングコードがハングするのではなく、すべてのデータベースデータがレンダリングコードに与えられ、別のデータを読み取ろうとしているときにクライアントにデータを与えないと、データベースからのデータの一部。

私はあなたの苦痛を感じ、この努力にあなたが幸運を祈ります。今、Spring Webflowを乱用するアプリケーションを維持する必要がある場合、それは別の話です。

関連する問題