0

ユーティリティクラスを適切に拡張するようにJavaクラスを設計するにはどうすればよいですか?これが現在の方法のスクリーンショットですが、これを行うためのより良い方法があると思いますか?ここで適切なオブジェクト指向デザインを使用していますか?必要なLoadableComponentクラスと、自分のWebDriverUtilsユーティリティクラスのすべての静的メソッドの両方にアクセスする必要があるという難問のため、この方法でこれを行います。私は正式な教育を受けたプログラマーではないので、より良いアイデアを探しています。

言い換えれば、Utilityクラスは「isa」ではなく、「has a」でもないので、oopの世界にどのように適合しますか?

この図をどのように実装したかの例をご覧になりたい場合は、私が作成したコードの一部がGitHubにあります。ここで、私のプロジェクトを参照してください。誰かがこれを行う適切な方法の図を投稿したいのであれば、それも素晴らしいでしょう。

ここに画像の説明を入力してください

注:このWebブラウザーのテスト自動化プロジェクトの図では、TabIFrameOneとtabIFrameTwoは、iframeの読み込みが完了したときの認識と、操作可能なフレーム内の要素の識別を処理するページオブジェクトです。DefaultPageはメインブラウザウィンドウのDOMであり、iFrame内のDOMを表すものではありません。各iFrameクラスは、WebDriver PageFactory.initObjects()を使用してWeb要素をロードします。

4

2 に答える 2

3

ここでは、継承は悪い考えだと思います。ページにはHAVE-Aユーティリティ関数がありますが、BE-Aユーティリティ関数ではありません。

継承とはIS-Aを意味します。クラスAがBを拡張する場合、クラスAはIS-ABです。Bを必要とするすべてのコンテキストでAのインスタンスを使用できる必要があります。

構成とは、HAS-Aを意味します。継承よりも構成を優先します。

また、オブジェクトをHTMLWebコンポーネントにマップするオブジェクト指向のデザインも好きではありません。結合しすぎ...

于 2013-03-22T17:35:28.343 に答える
1

私は最終的に、以前に拡張しようとしていたクラスに「プライベートWebDriver」オブジェクトのインスタンスを渡すことで、この問題を部分的に解決しました。これにより、WebDriverオブジェクトを静的共有オブジェクトではなくインスタンス変数に変更できました。

これが私のソリューションの図です。以前よりはましです。多分それはまだ改善される可能性があります。 ここに画像の説明を入力してください

結局のところ、私はおそらくディフェンダーメソッドを使用してこれを解決します。これは、ここでGitHubプロジェクトに使用しているパターンです。

于 2013-04-01T18:49:34.260 に答える