2

私はSpringMVC3アプリケーションに取り組んでおり、リンクが無効になっている場合は、ページ内のリンクを有効/無効にし、リンクに関するツールチップ(ある種のヘルプ)を提供する必要があります。リンクは多くのシナリオで無効にすることができます。影響を受ける必要があるさまざまなレイヤーについて知りたいです。

たとえば、管理者ユーザーがサブスクリプションを更新しようとしているテストケースについて考えてみます。更新できるはずです

  1. 私は管理者ユーザーです
  2. サブスクリプションは30日以内に終了します
  3. 自分のサブスクリプションを更新していません。

私の場合、私はコントローラーを持っており、ユーザーが更新の資格があるかどうかを判断するサービスを呼び出します。更新の資格がない場合は、ヘルプテキストを提供する別のサービスに連絡してください。次に、ビュー(JSP)はリンクを有効/無効にし、modelAttributeに基づいてヘルプテキストも表示します。

私の質問は..

  1. サービスへの2回の呼び出しを回避するにはどうすればよいですか(同じメソッドを再度呼び出すようです)。ヘルプテキストを保持するためにユーザーモデルに属性を追加できますが、ヘルプテキストをモデルに含める必要があるかどうかわかりません

  2. サービスでハードコーディングする代わりに、プロパティファイルから更新ヘルプテキストを取得する方法。バリデーターでmessages.propertiesを使用していますが、@serviceで使用する方法がわかりません。

  3. ビュー(JSP)で更新ヘルプを過剰に設計するのではなく、ハードコーディングする必要がありますか?

クエリについてさらに明確にするために、以下にいくつかのコードスニペットがあります。

public class UserController {
   @RequestMapping(value="/viewUserDetails", method=RequestMethod.GET)
      public String userDetails() {
          if(userService.isEligibleToRenew()) {
                user.setEligibleToRenew(true);
                model.addAttribute("renewalHelp", userService.getRenewalHelp())
          }
       }
   }

 @Service
 public class UserService {
    public boolean isEligibleToRenew (User user) {
        if (isAdminUser() && 
            isSubscriptionEndingin30days() && 
            !isRenewingOwnSubscription()) {
        return true;
    }
        return false;
}

public String renewalHelp(User user) {
    if (!isAdminUser ()) {
        return "You must be an admin to renew your subscription";
    }   else if (!isSubscriptionEndingin30days()) {
        return "Your subscription is not expiring in the next 30 days. You cannot renew now"; 
    } else if (isRenewingOwnSubscription()) {
        return "You cannot renew your own subscription";
    }
}
}
4

1 に答える 1

2
  1. サービスが必要なすべての情報を含むオブジェクトを返すようにします。これにより、サービス(およびそのすべてのロジック)を1回だけ呼び出すことができます。

  2. 私が過去に(上記のオブジェクトで)行ったことは、メッセージを説明する列挙型を作成し、Springまたは任意のMVCフレームワークを使用して、ローカライズされたメッセージを含むリソースバンドルからメッセージを選択することです。

  3. たぶん、それが物事を単純に保ち、異なるメッセージを表示するこの機能はそれほど重要ではありません。

1については、テキストで価格を表示する必要がある大きなeコマースアプリで使用しました。テキストには割引に関連するヒントが含まれている可能性があるため(たとえば、現在£1.99または£3.99から)、列挙型+値で価格を記述するオブジェクトを作成しました。列挙型は後で正しいロケールのメッセージにローカライズされました。

于 2012-11-06T21:35:06.533 に答える