1

私はこれを理解するのに少し苦労しているので、あなたが助けることができればそれは素晴らしいことです。

サイトマップからURLのリストを取得するコードを少し書きました。次に、各ページに移動し、すべてのリンクをスクレイプして、ステータス(200,404など)をテストします。

HttpClientを使用しています。私はすべて問題なく動作していますが、Javaを初めて使用するので、コードは完全なハック/迷路であり、正しく編成されていれば、はるかに優れたパフォーマンスが得られる可能性が高いと思います。だから私が持っているのは

メインクラス-これはGUIを構築します

サイトマップクラスを解析します-これはサイトマップを解析し、URLのリストを取得します。

PingURlと呼ばれるクラス-上記は貧弱だと思いますが、これは私が最悪だと思うビットです。このクラスは、すべてのURLを開き、それらをスクレイプしてリンクを探し、リンクのステータスをテストして返します。このクラスは分解されるべきだと思いますか?最も重要なことは、リンクのテストを独自のクラスで分離する必要があると思うので、後でスレッドを実装するのは簡単ですか?

基本的に私はアドバイスを探しています。誰かがプロジェクトをもう少しうまくレイアウトするのを手伝ってくれるなら。第二に、これは私の最も弱い領域だと思うので、改善するにはこれについてもっと学ぶ必要があります。これを何と呼ぶか​​さえわかりません(設計/レイアウトの問題?)。これについてさらに学ぶためのリソースもお勧めできますか?

4

1 に答える 1

1

Javaは、IMOが優れたオブジェクト指向設計を具体化する言語です。OOを念頭に置いて設計することは非常に効果的です。

http://java.sun.com/developer/onlineTraining/Programming/BasicJava2/oo.html

あなたの問題に関しては、私はそれがかなりうまくいくと思います。あなたはModel-View-Controllerパターンに従っているようなものです:http://www.codinghorror.com/blog/2008/05/understanding-model-view-controller.html

コードの設計方法を説明することはできませんが、同じ問題が発生した場合の設計方法を説明します。

ハイパーリンクを表すクラスを取得します。そのクラスには、スクレイプされたハイパーリンクと、ゲッターとセッターがあります。ブール値とping関数も同様です。つまり、「ハイパーリンク」オブジェクトを作成すると、そのオブジェクトはそのクラスの一部であるため、そのオブジェクトに対して呼び出す(「ping」)ことができます。つまり、ping関数は、接続を表すブール値を設定するだけです。

このようにして、パーサーは基本的にページを取得し、検出したリンクごとに、独自の「ハイパーリンク」クラスに基づいて新しい「ハイパーリンク」オブジェクトを作成します。そしてそれを配列に入れます。したがって、パーサーが実行されると、ハイパーリンクへのポインターの配列を取得します。

次に、各自でping関数を呼び出して、そこにあるかどうかを確認するだけです。

この設計は、1つのハイパーリンクテストの実行から1000の実行まで非常に簡単に拡張できるため、最適だと思います。

デザインについては非常に多くのものがあり、無数のプリンシパルもあります。問題を解決する絶対的な方法は1つではありません。しかし、経験を積むほど、またデザインパターンやモデルをよく読むほど、それを上手く利用できるようになります:)

于 2012-08-24T12:09:43.690 に答える