掲示板一覧 - トピック一覧 EA ソースコード生成・コード生成テンプレート
[Java] 関連からフィールド作成 |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | トピック |
|---|---|
| 未登録ゲスト | 投稿日時: 2007-12-12 15:08 |
[Java] 関連からフィールド作成関連端名を指定しない場合のフィールド名の既定値ですが、
$LinkClass を使用すると先頭が大文字になってしまい Java の規約に違反してしまいます。 そこで、コード生成テンプレートの LinkedAttributeDeclaration を以下のように変更してみました(抜粋)。 $initial="" %if $type != linkAttName% $initial = " = new " + $type + "()" $initial = %REPLACE($initial, ".List", ".ArrayList")% $initial = %REPLACE($initial, ".Map", ".LinkedHashMap")% %endIf% %if linkAttRole != ""% %linkAttRole% $initial; %else% $name = %REPLACE(genOptDefaultAssocAttName,"$LinkClass",linkAttName)% $head = %LEFT($name, 1)% $name = %TO_LOWER($head)% + %MID($name, 1)% %if $type != linkAttName% $name += "s" %endIf% $name $initial; %endIf% 目的どおり、 java.util.List<Foo> foos = new java.util.ArrayList<Foo>(); のようなコードが生成できたのですが、 コード生成するたびにこの行が複製されてしまいます。 フィールド名を変更しているのが問題のようなのですが、 対処方法がわかりましたらご教示ください。 |
|
| tkouno | 投稿日時: 2007-12-12 15:19 |
EA Administrator ![]() ![]() 投稿: 3939 |
Re: [Java] 関連からフィールド作成ご質問の件、結論から先に申し上げますと
現在のEnterprise Architectでは対処不可能です。 ご提示のスクリプトの中で、 $name += "s" の処理を行っています。この時点で、モデル内の名前の情報と コードに出力された名前の情報が不一致となります。 Enterprise Architectは、他のいくつかのツールのように 出力されるソースコードにツールのための情報を埋め込みません。 この点は、コードが汚くならないということで多くの方の 支持をいただいていますが、その反面、今回のように 名前が変わる場合には、同じものであるという判断ができません。 (今は名前を中心に同一性の判断をしています) 出力される名前が変わるため、出力前にチェックした結果 「ソースコードに存在しない」ということで、結果として 重複して出力されます。 申し訳ございませんが、この点は現在のEnterprise Architectでは 対処不可能です。モデルの情報とコードの情報の同一性を 判断するための「ツールのための情報」を入れる以外の 対処法がございません。 しかしながら、これを行うことは、Enterprise Architectを 支持している人にとっては良くない話であり、また開発者 (Geoffrey Sparks)の方針もありますので、この方法での 解決は現時点では考えていません。 申し訳ございませんが、ご理解いただけますと助かります。 ご要望に沿えず申し訳ございません。 |
| 未登録ゲスト | 投稿日時: 2007-12-12 15:39 |
Re: [Java] 関連からフィールド作成素早い回答ありがとうございます。
1点だけ追加で質問です。 オリジナルのテンプレートでも、 %REPLACE(genOptDefaultAssocAttName,"$LinkClass",linkAttName)% のように関連端名の置換(生成?)をしていますが、 コードのフィールド名と、モデルの「何が」同じなら、 同一の要素と見なされるのでしょうか? |
|
| tkouno | 投稿日時: 2007-12-12 15:54 |
EA Administrator ![]() ![]() 投稿: 3939 |
Re: [Java] 関連からフィールド作成追加のご質問の件ですが、ご指摘の$LinkClassに関連する
設定の欄である「属性の既定の名前」(オプションダイアログの 「属性と操作」グループ)の情報と一致すれば、同じと 判断しています。 例えば、今回の例ですと、(ちょっとわかりにくいのですが) 「$LinkClass」の代わりに、最後にsを一つ追加した「$LinkClasss」を上記オプションに設定することで 出力される属性名の最後にはsの文字が付加され、さらに 同一のものであるとみなされます。 (出力しても重複しないはずです) 先ほどの回答をより正確に申し上げますと、 名前にsをつけているので同期できない、ということではなく コード生成テンプレート側で名前を編集して出力することで 同期が取れなくなる、ということになります。 先ほどの回答の仕方が混乱を招いてしまったかもしれません。 ご理解いただけますと助かります。 |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |




