[YMIR-295] *[ymir-core] @RequestParameter(など)を透過的に扱う Created: 2009-01-23  Updated: 2009-02-02  Resolved: 2009-01-29

Status: Closed
Project: Ymir
Component/s: ymir-core, ymir-extension
Affects Version/s: 1.0.0
Fix Version/s: 1.0.1

Type: Improvement Priority: Major
Reporter: jflute Assignee: skirnir
Resolution: Fixed Votes: 0
Labels: None


 Description   

【概要】
※ここで言うクラスは基本的に「Page」クラスのことである。

<現状>
スーパークラスのSetterに@RequestParameterが付いていて、
サブクラスでそのSetterをオーバーライドして@RequestParameterを付けない場合、
スーパークラスの@RequestParameterは無効になる。

<改善>
スーパークラスのSetterに@RequestParameterが付いていて、
サブクラスでそのSetterをオーバーライドして@RequestParameterを付けない場合、
スーパークラスの@RequestParameterの効果が引き継がれる。

【詳細】
「現状」の一番の問題としては、Setterオーバーライドした場合の付け忘れである。
開発者は、最初の知らない時点では必ずやってしまうだろうし、
知ってからもつい忘れてしまうことがかなり予想される。
その場合の発生する現象が「値が入ってこない」ということのため、
原因の特定に時間がかかってしまう可能性がある。

アノテーションは、スーパークラスに付けても再自動生成時に上書きされない
仕様があり、開発者はスーパークラスにアノテーションを付ければ、
サブクラスでSetterをオーバーライドする必要はあまりないが、
アプリで独自に付けた処理(アノテーション)が、スーパークラスの
他の大量のSetterとかGetter定義に埋もれて可読性がわるくなるため、
実業務での利用は、あまり考えにくい。
(サブクラスでオーバーライドして「アプリで独自に付けた処理(アノテーション)」
 が一望できるような形で実装する方が好ましい)
また、サブクラスでSetterにフィルタ処理や別途処理を入れるために
オーバーライドした場合、スーパークラスのアノテーションが継承されないのは
あまり効率的でないという別の問題もある。

「改善」の課題としては、サブクラスでスーパークラスのアノテーション指定を
無効化する方法を提供する必要があることである。案として、
サブクラスのSetterに別途「アノテーション無効化用アノテーション」を付与する方法がある。
例えば以下のような感じ: ※名前は仮

@Ignore(@RequestParameter.class)
public void setFooName() {
    ...
}

この方法は、「現状」におけるサブクラスによるアノテーション無効化よりも
明示的でわかりやすい分、良い方法である。

但し、この無効化は「業務的な重要度は低い」と思われるため、
「改善」実現後にすぐにある必要はないと思われる。
少なくとも画面固有のスーパークラスのアノテーションを無効化する必要性は
ほとんどないかと思われる。あるのは、画面間で共通のPageBaseのような
スーパークラスであらかじめ用意したアノテーション付きメソッドを
とある画面だけで無効化したい、というような場合である。

【補足】
これは@RequestParameterだけでなく、他のアノテーションでも同様の話である。
一番、重要度が高いのが「@RequestParameter」という話である。



 Comments   
Comment by skirnir [ 2009-02-02 ]

確認ありがとうございました。closeとします。

Comment by jflute [ 2009-02-01 ]

確認しました。ありがとうございます!

Comment by skirnir [ 2009-01-29 ]

対処しました(r2716)。

Comment by jflute [ 2009-01-27 ]

議論の結果、透過的にすることに。

Comment by jflute [ 2009-01-23 ]

> アプリで独自に付けた処理(アノテーション)が、スーパークラスの
> 他の大量のSetterとかGetter定義に埋もれて可読性がわるくなるため、
> 実業務での利用は、あまり考えにくい。
こちらの件の、もう一つの要因:
「アプリで独自に付けた処理(アノテーション)に対するコメントが付与できない」
(付与しても再自動生成時にアノテーションは残ってもコメントは削除されてしまう)

※実際に試してみたところそのようになりました。

Generated at Thu Apr 25 15:17:56 JST 2024 using Jira 9.15.0#9150000-sha1:9ead8528714127d8cfabf2446010d7e62c0a195c.