[seasar-dev:496] Re: [S2JFace] DTDの変更について

bskuroneko bskuroneko @ gmail.com
2006年 8月 26日 (土) 14:29:35 JST


bskuronekoです。

DTDたたき台バージョンを添付します。
お待たせしました。

まだコントロールの定義などが足りていないのですが、
議論の足場にはなると思います。
コントロールの定義は今後追加しておきます。

簡単に要点をまとめます。
・DTDのバージョンはとりあえず0.2とした
・各コンポーネントごとに要素を定義した
・親クラスのプロパティなどは共通の属性としてエンティティにした
・型もエンティティで分類しておいた
・layout、layoutDataは要素にして補完できるようにした
・id, style, replaceはウィジット共通の属性とした
・idはID型とし、XML内で一意になるようにした
・コントロールを参照する属性はIDREF型とした
・componentDef要素で部品を定義できるようにした
・include要素で部品を取り込めるようにした
・menuとmenuMangerの記述方法をクラスの関係に従うようにした


TODOコメントにも書いていたりしますが、
個人的に気になっている点は以下です。

1. クラス名やフィールド名と定義名を一致させるか
  SWTを知っている人への混乱が少なくなり、
  実装もリフレクションで解決しやすくなるので、
  名前を一致させた方がいいと個人的には考えています。

  現在のDTDはレンダラーで使用している名前と
  クラス名、フィールド名などが混在してます。m(_ _)m

  現在のtextAreaのように独自で簡略化したものなどを
  追加定義するのはよいと思います。

  SWTのクラス体系に強く依存することになってしまいますが、
  Swing対応などが必要になったら、
  jButtonなどの要素を追加すればよいでしょう。
  SWTとSwingが中でぐちゃぐちゃに混在するようなGUIも
  書けるようになるかもしれませんね。

2. tabListをもう少し簡略化できないか
  componentRefという要素を列挙してIDREFで参照していますが、
  少し書くのが面倒くさい気もしています。
  この程度ならidのカンマ区切りでもいいかもしれません。
  各コントロールにtabIndex属性を追加することも考えたのですが、
  それだと順番を入れ替えたりコントロールを追加するときの
  対応が煩雑になりそうなのでやめました。

3. IDREF型はやめたほうがよいか
  extendsやincludeを多用すると 、
  IDREFでIDが見つからずにエラーになってしまいそうです。
  今IDREFで定義している部分は%String;に変えてしまった方が
  いいような気がしてきました。

4. 名前がいまいち?
  componentDef、includeなど、
  名前をもう少し練った方がよさそう。


属性の記述方法や要素の構成方法など、
いろいろな部分で気になる点が出てくると思います。
どんどんたたいてやってください。

少なくともこのDTDで
grabExcessHorizontalSpace
をコピー&ペーストする必要はなくなります。(w


06/08/24 に KOMORI Yusuke<y-komori @ nifty.ne.jp> さんは書きました:
>  小森です。
>
> 亀谷さん、bskuronekoさん、ご意見ありがとうございます。
>
> bskuroneko さん wrote:
> > まずはXMLパースの部分で吸収して動作するようにすることで賛成です。
> > レンダラーのコードは変更なしで動かすということですよね?
>
> そうです。それが一番変更が少なくて楽かと。
> なので・・・
>
> 亀谷さん wrote:
> > これは現状あるRendererの類がHandlerに移植ってことになるんですかね?
> > ちょっと作業が大変そうですがやるなら早いうちがいいかもです。
>
> Rendererの方は、修正せずにそのままでよいはずです。
>
> あと、パーサーやレンダラーは、確かに似たコードが多いので自動生成的なこ
> とをやってもいいかなと、私も思ってました。
>
> ただ、自動生成自体はコードの管理が複雑になるので、個人的には以下のどち
> らかがいいかな、と思ってます。
>
> 1.リフレクションを使う
>    S2ContainerのBeanDescがキャッシュしてくれるおかげで、パフォーマンス
>    劣化をあまり気にせず使えます。
>
> 2.Interceptorを使う
>    S2Container 2.4 で追加される Interceptor を使えば、オン・ザ・フライ
>    でのバイトコードレベルの自動生成ができてしまいます。
>    上記案でパフォーマンスが気になる場合はこちらの手もあります。
>
>
> > あと文字列、数値、SWT定数などの簡単なデータは
> > 属性として指定すればよいですが、
> > 構造を持ったデータなどは要素として個別に書いて、
> > なるべく補完できるような形にできればなと思います。
> > これに該当するのはレイアウト周りが多そうですけどね。
>
>  ですね。コンポーネントによっては属性がかなり増えそうですが、DTD補完の
> 利点を考えると、しかたないですね。
>
>
> > widgetクラスやcontrolクラスが持っている見た目のプロパティを
> > まとめて指定できるような定義を作れるとよさそうですね。
> > eclipseの色やフォント指定のように部品タイプ(?)ごとに指定できる
> > 仕組みでも面白いかと思います。
> > それ以外は「青くてフラットなボタン」みたいな部品が作れて、
> > それを利用できるような定義があれば十分な気がします。
>
>  ですね。
>
> <label font="arial" size="18" weight="bold">文字列</label>
>
> というように、個別指定できるパターンと・・・
>
> <label styleClass="title">文字列</label>
>
> というように、スタイルシートのクラスみたいに指定できるパターンがあると良
> いですね。
>
> レイアウトにはわたしも散々苦労させられているので、なにか叩き台の案を作
> りたいと思います。
>
> > 改善案のたたき台になりそうなDTDを作ってます。
> > もう少し形になったら出しますので、たたきまくってください(w
>
> ありがとうございます!
> とりあえず、いくつかのコンポーネントについて作っていただければ、
> またそれをベースに議論できると思います。
>
> よろしくお願いします。m(_ _)m
>
> On Thu, 24 Aug 2006 00:35:59 +0900, bskuroneko <bskuroneko @ gmail.com> wrote:
>
> > 小森さん、亀谷さん。
> > bskuronekoです。
> >
> > >  1.
> > >    内部的なコンポーネント情報の持ち方はそのままにして、
> > >
> > >    <label text="" font="" ・・・ />
> > >
> > >    みたいなタグを追加していく。
> > >    (XMLパースの部分で吸収できるはず)
> >
> > まずはXMLパースの部分で吸収して動作するようにすることで賛成です。
> > レンダラーのコードは変更なしで動かすということですよね?
> > その後でコードの構造を見てからの判断でよいのですが、
> > 可能であればDTDに対応したパーサーとレンダラーを
> > ある程度まで自動生成してしまうような仕組みにできないかな〜
> > と考えてたりします。
> > 結構今のレンダラーって同じようなコードになっている気がするので、
> > DTDをうまく作ればかなり自動化できるように思います。
> > 逆にコードからDTDを生成した方がうまくいくのかもしれませんけど。
> >
> > あと文字列、数値、SWT定数などの簡単なデータは
> > 属性として指定すればよいですが、
> > 構造を持ったデータなどは要素として個別に書いて、
> > なるべく補完できるような形にできればなと思います。
> > これに該当するのはレイアウト周りが多そうですけどね。
> >
> > >  2.
> > >    現行の control タグや composite タグはそのまま残して、カスタムコン
> > >    ポーネントを作る場合はそれを利用してもらう。(つまり、現状のコンポー
> > >    ネントはすべてカスタムコンポーネント的な作り方、となる)
> >
> > レンダラーとのマッピング方法など細かい部分は検討が必要でしょうけど、
> > 概ねOKだと思います。
> >
> > >  3.
> > >    考えなければならないこと
> > >
> > >    ・プロパティの引き継ぎ機能をどうするか
> > >        → もともとはスタイルシート的なことがしたかったので、
> > >           代替的な案(フォントや色などをまとめて指定する方法)があればよ
> > >           い
> >
> > widgetクラスやcontrolクラスが持っている見た目のプロパティを
> > まとめて指定できるような定義を作れるとよさそうですね。
> > eclipseの色やフォント指定のように部品タイプ(?)ごとに指定できる
> > 仕組みでも面白いかと思います。
> > それ以外は「青くてフラットなボタン」みたいな部品が作れて、
> > それを利用できるような定義があれば十分な気がします。
> >
> > >    ・レイアウトの指定方法をどうするか
> > >        → 現状はSWTベタベタで、SWTのレイアウトを理解しきれていないと書
> > >           けない。(特にGridLayoutが)
> > >           もう少し簡単にしたい
> >
> > 簡単に指定できる方法があるとうれしいですね。
> > レイアウトに詳しくないので、楽しみです。(他人まかせ?w)
> > でも個人的にはそのまま書ける仕組みも残してほしいです。
> > 細かい指定ができないのも理解している人にはストレスになると思います。
> > レイアウトを全然理解できていない私が言うのもなんですが…
> >
> >
> > その他、テンプレートの継承、部品化の定義なども整理できるといいですね。
> >
> > 改善案のたたき台になりそうなDTDを作ってます。
> > もう少し形になったら出しますので、たたきまくってください(w
> >
> >
> > 06/08/22 に KOMORI Yusuke<y-komori @ nifty.ne.jp> さんは書きました:
> > > S2JFace コミッタの皆さん
> > >
> > > bskuroneko さんのブログ議論していた、DTDの件ですが、
> > > ML上に議論を移したいと思います。
> > > http://d.hatena.ne.jp/bskuroneko/20060811/1155314849
> > >
> > > とりあえず、今までの整理・・・
> > >
> > > ■現状の問題点
> > >    各GUI要素を記述する要素が以下のように control (または composite)タグで
> > >    統一されているため、XMLエディタ上で DTD 補完が効かず、書きにくい。
> > >
> > >    <control type="label" ・・・>
> > >
> > >    ・・・ということでした。
> > >
> > > ■もともとの思想
> > >    bskuroneko さんのところでもコメントしたように、
> > >
> > >    --------------------------------------------------------------------
> > >    「S2JFaceを利用する開発者が自由にコンポーネントを追加できる」という
> > >    のがあります。今はSWTやJFaceのコンポーネントをラップしたものしか提供
> > >    できていませんが、実際に業務で使い出すと、いくつかのコンポーネントを
> > >    組み合わせたようなオリジナルコンポーネントが必要になってくることが多
> > >    いと思うのです。そういったとき、DTDを毎回変えなきゃならないのはとて
> > >    も重いので、いまのように property タグで任意のプロパティを指定する方
> > >    式にしているのです。
> > >    --------------------------------------------------------------------
> > >
> > >    というのが私の考えでした。
> > >
> > >    でもでも・・・
> > >
> > >    「自分でコンポーネントを追加するパワーユーザ」よりも「DTDで手軽に
> > >    補完したいユーザ」の方が圧倒的に多いわけで、やはり補完が効きやすいよ
> > >    うにHTMLに近い形のタグに整理したほうがよいと思い始めました。
> > >
> > >
> > > ■とりあえずの案
> > >    議論の入り口として、今考えていることだけ書きます。
> > >
> > >  1.
> > >    内部的なコンポーネント情報の持ち方はそのままにして、
> > >
> > >    <label text="" font="" ・・・ />
> > >
> > >    みたいなタグを追加していく。
> > >    (XMLパースの部分で吸収できるはず)
> > >
> > >  2.
> > >    現行の control タグや composite タグはそのまま残して、カスタムコン
> > >    ポーネントを作る場合はそれを利用してもらう。(つまり、現状のコンポー
> > >    ネントはすべてカスタムコンポーネント的な作り方、となる)
> > >
> > >  3.
> > >    考えなければならないこと
> > >
> > >    ・プロパティの引き継ぎ機能をどうするか
> > >        → もともとはスタイルシート的なことがしたかったので、
> > >           代替的な案(フォントや色などをまとめて指定する方法)があればよ
> > >           い
> > >    ・レイアウトの指定方法をどうするか
> > >        → 現状はSWTベタベタで、SWTのレイアウトを理解しきれていないと書
> > >           けない。(特にGridLayoutが)
> > >           もう少し簡単にしたい
> > >
> > >  と、こんなところです。
> > >
> > >  特に3番のところについて、もう少しイメージを固めたいと思っていますが、
> > >  いかがでしょうか。
> > >
> > >
> > > ----------------------------------------------
> > >  小森 裕介 / Yusuke Komori
> > >
> > >  E-Mail:y-komori @ nifty.ne.jp
> > >    Blog:http://d.hatena.ne.jp/y-komori/
> > >     URL:http://www.littleforest.jp/
> > >
> > >
> > > _______________________________________________
> > > Seasar-dev mailing list
> > > Seasar-dev @ ml.seasar.org
> > > https://www.seasar.org/mailman/listinfo/seasar-dev
> > >
> > _______________________________________________
> > Seasar-dev mailing list
> > Seasar-dev @ ml.seasar.org
> > https://www.seasar.org/mailman/listinfo/seasar-dev
>
> ----------------------------------------------
>  小森 裕介 / Yusuke Komori
>
>  E-Mail:y-komori @ nifty.ne.jp
>    Blog:http://d.hatena.ne.jp/y-komori/
>     URL:http://www.littleforest.jp/
>
>
> _______________________________________________
> Seasar-dev mailing list
> Seasar-dev @ ml.seasar.org
> https://www.seasar.org/mailman/listinfo/seasar-dev
>
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: s2jface02_dtd.zip
型:         application/zip
サイズ:     2176 バイト
説明:       無し
URL:        http://ml.seasar.org/archives/seasar-dev/attachments/20060826/7cfd4367/attachment.zip 


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