2011-07-06 9 views
1

開発する必要がある新しいAuthenticatedWebApplicationで再利用する必要があるいくつかのページと機能を持つWicket AuthenticatedWebApplicationがあります。2つの異なるWicketアプリケーションが共通の機能を共有する場合、コードを再利用する方法

私はWicket 1.4、Spring、およびHibernateを使用しています。

両方のアプリケーションは、ベースページに実装されている同じ外観(アプリケーションロゴを除く)を共有します。

誰も同じような経験をしていますか?一般的な機能は変更可能なワークフロープロセスを実装しているため、コピー貼り付けコードを繰り返すことは間違いありません。

アプリケーションをモジュール化して目標を達成するにはどうすればよいですか?

+0

アプリケーションのロゴは変更する必要がありますか、アプリケーション機能のサブセットを再利用したいだけですか?後であれば、このサブセットはどれくらいの大きさ(50%/ 10%/ 75%のようなおおよその見積もりで十分です)。前者の場合、同じアプリケーションインスタンスを共有したい場合もありますか? – Nicktar

+0

@Nicktarおそらくサブセットはアプリケーション機能の約80%です。ロゴとメニューは間違いなく両方のアプリケーション間で変更される予定です。認証は同じでなければならず、共有されている機能に加えて、各アプリケーションには独自の機能があります。 – Marcelo

+0

次に、以下の私の答えに記載されている解決策が働くはずです。共有機能をプロジェクト/ jarにコンパイルし、必要に応じて新しいプロジェクトのクラスを拡張/上書きするだけです。 – Nicktar

答えて

1

私の会社はこれを常にしています。私たちは、ベースのUserApplication、ユーザーアカウント、ログイン、認証などを保持するコアパッケージを持っています。いくつかの複製があります。ほぼすべての設定ファイルがそれぞれ同じに見えますが、それぞれが自分のthemeというマークアップを提供するディレクトリを持ち、アプリケーションのルック・アンド・フィールにカスタマイズされています。

ヒントあなたがこれを行うよう:

  1. コアアプリケーションは、各サブアプリケーションオーバーライドgetXPanel()方法のかなりの数を持っている必要があります。たとえば、getHeaderPanel()
  2. 誰もが拡張する「BasePage」クラスを使用します。これは、サブアプリケーションのテーマフォルダでオーバーライドされた全体的なルックアンドフィールを設定し、<wicket:extend>の機能を大量に使用する場所です。また、あなたのjQueryのインポートを置くための良い場所、ec。
  3. マークアップは簡単にオーバーライドされます。サブアプリケーションは、ロゴを変更するためにページのJava拡張を作成する必要はありません。ちょうど別のマークアップを使用してください。

各アプリケーションは少なくとも4つのモジュールに分かれています。例えば: - Wicketの依存関係、基本的なイベント

  • データのロギング -

    1. ベースクラスタアプリケーションを、AdminPageは、ユーザーがobect休止状態。各ページには独自のマークアップがありますが、通常はオーバーライドされます。
    2. 科学 - 科学の教科書を表示するためのコードがたくさんあるコアプロジェクトです。 ScienceApplication extends UserAppication
    3. 基礎 - 小学生のためのテーマ固有の実装FoundationsApplication extends ScienceApplication
    4. 問い合わせ - 高校生InquiryApplication extends ScienceApplication

    ごとに異なるテーマ固有の実装我々の2つの科学のアプリケーションが異なるヘッダとさらにいくつかの異なるページがありますが、ScienceApplication上記の方法があります。あなたの他のコメントと回答から判断

  • +0

    最初のリストの(2)+(3)について - コードとは別にページマークアップを整理していますか? – ireddick

    +0

    @ireddickはい;私たちは、マークアップ、画像、CSSなどのために、別々の 'テーマ'フォルダを使用します。私たちはバックエンドとフロントエンドの作業を分けるので、それも役に立ちます。 – jbrookover

    1

    これは、コンポーネントベースのフレームワークの主なポイントです。 共通のコード(コンポーネント、動作、セッション、アプリケーションなどの基本クラス)を個別のJavaプロジェクト(.jar)に入れます。後で特定の.warプロジェクトのこのプロジェクトに依存します(.jarをWEB-INF/libに入れます)。 Voila!

    +0

    異なるロゴを使ってベースページを共有するにはどうすればいいですか?2つの異なるログインを持ち、ロールベースのアクセス許可を使用するにはどうすればよいですか? – Marcelo

    0

    あなたの質問から、あなたの主な関心事はページに関するものだと思います。次に、これは私の提案です: まず、あるアプリケーションから別のアプリケーションに変更できるページの部分を指定する必要があります。次に、これらの部品のデータを取り出してテンプレートを取得する必要があります。これで、データをどのように保存するか(必要に応じて)(XMLファイル、DBなど)を決定する必要があります。 必要に応じて、テンプレートをオンラインまたはオフラインでコンパイルすることができます。

    1

    1. は、アプリケーションをリファクタリングし、(抽象)基底クラスにすべての一般的なコードを押してください。
    2. これらを新しいプロジェクトに移動し、2つの新しいアプリケーションプロジェクトのBuildPathを設定して、ベースパッケージを必要とするようにします。
    3. 変更する機能を実装するためにベースクラスを拡張します。あなたの現在の実装に応じて、2つの異なるimageresourcesを実装することによって、またはあなたのbasebasepageにあなたの新しいプロジェクトから別のモデルを提供することで、あなたのロゴを変更することができたり、あなたのプロパティに画像のURLを入れて、異なるpropertyfilesを供給できる

    あなたのアプリケーション データベースやテーブルでも同じことが成り立ちます。たとえば、JPAでは、グローバルに使用されているすべてのエンティティをベースにプッシュし、異なるテーブル名を使用して2つの異なるユーザーエンティティを実装します。コードの重複を減らすために共有の抽象baseUser-entityを使用することさえできます。

    関連する問題