[Seasar-user:21660] Re: S2JDBC の AutoSelect への includes() と excludes() 実装

kubo [E-MAIL ADDRESS DELETED]
2013年 7月 14日 (日) 10:49:16 JST


久保(jflute)です

一応、似たような機能を実装した経験者ということで、
何かの参考になればなぁと。

DBFluteでは includes() だけサポートしています。
正確には「共通カラムだけ除外」とかテーマ的な除外はありますが、
プロモーション的にも includes() が前面に出ています。

構造的には、includes() があれば excludes() もないと
気持ち悪いって感じる面はあるのですが、
その昔、現場の人に色々とヒアリングしてみた結果、

o 両方あるとカオスになりそう (どうなってるのか把握できない)
o もともとSQLベタなら includes() 的な感じしかないから
o そもそもめったに使わないので (ここぞというところで使うもの)

ということで、includes() だけに落ち着いています。
しかも、「普段は使わない、いざってときに使う機能」
というニュアンスもドキュメントに入れています。

Entityという形で取得している以上、
あのカラムは取ってる取ってないってなると、
特にLogicなどの再利用領域で使ってると、
メソッドの利用側がややこしくなるかもという考慮もあり。

まあ、S2JDBCで既に insert() とかで excludes() が
あるなら検索でもあるのが自然って感じにもなるので、
そう簡単な話じゃないかもしれませんが、
includes()だけでも関連テーブルやPKやFKなどの考慮は、
わりと苦労しました(^^。
(なによりも、その仕様を利用者に理解してもらうのに苦労します)

でも、S2JDBCを使うとなったら個人的には欲しい機能ではありますね。
(今後「CBならでは機能ですっ」みたいな紹介ができなくなりますがw)


2013/7/14 Koichi Kobayashi <koichik @ improvement.jp>:
> 小林 (koichik) です.
>
> お疲れ様です。
>
> startsWith() の使い方そのものは変わってないんですね。
> 大丈夫なのかなー?
>
> 気になるのは、たとえば aaa.bbb.ccc.ddd という
> プロパティがあるとして、
>
> "aaa.bbb.ccc.ddd".startsWith("aaa.")
> "aaa.bbb.ccc.ddd".startsWith("aaa.bbb.")
> "aaa.bbb.ccc.ddd".startsWith("aaa.bbb.ccc.")
>
> は全部 true になるわけです。
> そして includes/excludes は HashSet なので、
> どの順番で比較されるかは制御できてないわけです。
> 本来なら一番長い "aaa.bbb.ccc." の指定が有効に
> なってほしいのに、より短い方で判定されてしまう
> ケースがあるんじゃないか? たとえば
>
> .includes("aaa")
> .excludes("aaa.bbb")
> .includes("aaa.bbb.ccc")
>
> とあった場合、"aaa.bbb.ccc.ddd" が確実に
> includes と判断されるかというと、されないのでは
> ないかと。
>
> なので、先に書いたように、aaa.bbb.ccc.ddd の
> 方を基準として、
>
> aaa.bbb.ccc.ddd
> aaa.bbb.ccc
> aaa.bbb
> aaa
>
> の順番で includes/excludes に含まれてるか
> チェックする方が確実なんじゃないかと思うのですが
> どうでしょう?
>
>
> On Sun, 14 Jul 2013 07:40:56 +0900, Jun Futagawa <jfut @ integ.jp> wrote:
>
>> ふたがわ (jfut) です。
>>
>> On 2013/07/14 7:30, Koichi Kobayashi wrote:
>>
>> > パッチが両方ともドキュメントの方でした。(^^;
>>
>> ごめんなさい、最後にドキュメントをちょこっと直して
>> 保存する時に保存先を間違えました。
>> 両方とも最新のものを添付して送ります。
>>
>> > ドキュメント、よく見たら includes() と excludes()
>> > それぞれに注意点があったのですね。
>> > これなら自分が書いた部分はいらないかもです。
>> > 失礼しました。
>>
>> いえいえ、includes() の方に excludes() と一緒に使う
>> コード例を追加したので、今は両方に書いてあった方が
>> 良いかなと思います。
>>
>> --
>> Jun Futagawa
>
>
> --
> {
>   name: "Koichi Kobayashi",
>   mail: "koichik @ improvement.jp",
>   blog: "http://d.hatena.ne.jp/koichik/",
>   twitter: "@koichik"
> }
>
> _______________________________________________
> Seasar-user mailing list
> Seasar-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-user


Seasar-user メーリングリストの案内