<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <title>開発における注意点</title>
    <link rel="stylesheet" href="/css/style.css" type="text/css" media="all" />
    
    
  </head>
  <body>
    <div class="header">
      <div id="pane.left-header" class="pane left">
        <div id="org.seasar.kvasir.cms.toolbox.customPop-2" class="pop org.seasar.kvasir.cms.toolbox.customPop">
          <div class="body"><div class="wiki">
<ul>
<li><a href="/" class="pageNotFound">（サイトトップ）</a></li>
<li><a href="/download">ダウンロード</a></li>
<li><a href="/news/" class="pageNotFound">新着情報</a></li>
<li><a href="/docs/" class="pageNotFound">ドキュメント</a></li>
</ul>
</div>
</div>
        </div>
      </div>
      <div id="pane.right-header" class="pane right">
        <div id="org.seasar.kvasir.cms.toolbox.loginPop-1" class="pop org.seasar.kvasir.cms.toolbox.loginPop">
          <div class="body">
<form method="post" action="/plugins/toolbox/login.do/docs/0.9.x/user/development">
    <div class="row">
      <span class="label">Name</span>
      <span class="textinput"><input type="text" name="name" size="12" value="" /></span>
    </div>
    <div class="row">
      <span class="label">Password</span>
      <span class="textinput"><input type="password" name="password" size="12" value="" /></span>
    </div>
    <div class="row">
      <span class="submit"><input type="submit" value="Login" /></span>
    </div>
</form>
</div>
        </div><div id="org.seasar.kvasir.cms.pop.loginUserPop-1" class="pop org.seasar.kvasir.cms.pop.loginUserPop">
          <div class="body"></div>
        </div>
      </div>
    </div>
    <div class="page-frame">
      <div id="pane.left-sidebar" class="pane sidebar-frame sidebar subcontent">
        <div id="org.seasar.kvasir.cms.toolbox.searchPop-1" class="pop org.seasar.kvasir.cms.toolbox.searchPop">
          <h2 class="title">Search</h2>
          <div class="body"><form class="simple" method="get" action="/plugins/toolbox/search.do">
  <input type="text" name="query" size="12" />
  <input type="submit" value="Go!" />
</form>
</div>
        </div><div id="org.seasar.kvasir.cms.toolbox.customPop-1" class="pop org.seasar.kvasir.cms.toolbox.customPop">
          <h2 class="title">メニュー</h2>
          <div class="body"><ul>
  <li><a href="/" class="pageNotFound">（サイトトップ）</a></li>
  <li><a href="/download">ダウンロード</a></li>
  <li><a href="/news">新着情報</a></li>
  
    
    
      <li>
        <a href="/docs/1.0.x">ドキュメント（1.0.x系）</a>
        
      </li><li>
        <a href="/docs/0.9.x">ドキュメント（0.9.x系）</a>
        
      </li>
    
  
  <li><a href="/roadmap">ロードマップ</a></li>
  <li><a href="https://www.seasar.org/issues/browse/YMIR">既知の不具合を閲覧する・不具合を報告する</a></li>
  <li><a href="https://www.seasar.org/svn/ymir/">SVNリポジトリ</a></li>
  <li><a href="http://svn.seasar.org/browse/?root=ymir">SVNリポジトリを閲覧</a></li>
</ul>
</div>
        </div>
      </div>
      <div id="pane.main" class="pane main">
      
        <div id="org.seasar.kvasir.cms.toolbox.breadcrumbsPop-1" class="pop org.seasar.kvasir.cms.toolbox.breadcrumbsPop">
          
          <div class="body"><ul>
  <li class="first"><a href="/">(TOP)</a></li><li><a href="/docs">ドキュメント</a></li><li><a href="/docs/0.9.x">ドキュメント（0.9.x系）</a></li><li><a href="/docs/0.9.x/user">ユーザマニュアル</a></li><li>開発における注意点</li>
</ul>
</div>
        </div><div id="org.seasar.kvasir.cms.pop.contentPop-1" class="pop org.seasar.kvasir.cms.pop.contentPop">
          <h2 class="title">開発における注意点</h2>
          <div class="body">
<ul class="information">
  
  <li>2008-08-22 17:53:50</li>
</ul>
<div class="content"><div class="document">
<p>ここでは、Ymirを使ってアプリケーションを開発する場合の注意点を説明します。</p>
<div class="section" id="e887aae58b95e7949fe68890">
<h3><a name="e887aae58b95e7949fe68890">自動生成</a></h3>
<p>YmirではGeneration-Gapパターンに従った自動生成機能を提供しています。Generation-Gapパターンが適用されたクラスの開発においては、通常開発者は次のルールに従って開発を進めます。</p>
<ul>
<li>開発者はGapクラスにコードを追記していく。</li>
<li>Baseクラスは自動生成によって置き換えられるため、基本的には開発者は手を入れない。</li>
</ul>
<p>ところがYmirの場合は若干例外があり、以下の操作に限ってはBaseクラスを開発者が変更することが認められています。</p>
<ul>
<li>Baseクラスが持つメソッドにアノテーションを追加する</li>
<li>Baseクラスが持つフィールドの型を変更する</li>
<li>Baseクラスが持つメソッドの引数の型や返り値の型を変更する</li>
<li>Baseクラスの親クラスを変更する（Pageクラスのみ）</li>
<li>Baseクラスのメソッドの引数や返り値の型を変更する</li>
</ul>
<div class="section" id="genericse59e8be381aee588a9e794a8">
<h4><a name="genericse59e8be381aee588a9e794a8">Generics型の利用</a></h4>
<p><em>（以下の制約はYmir-0.9.6では無くなりました。）</em></p>
<p>自動生成時にブラウザ上からDTOやPageプロパティの型を指定する場合、Generics形式の型を指定することはできません。</p>
<p>この制限は、Ymirの自動生成機構がコード再生成の場合に既存クラスのメタデータを使って既存コードと新コードのマージを行なっていることに起因しています。（メタデータからはGenerics型の情報を取得することができないのです。万が一できるのであればやり方を教えてください！）</p>
<p>同様に、Baseクラスに何らかの型情報を書く場合もGenerics形式で書くことはできません。</p>
<p>なおもちろんGapクラスではGenericsを使うことができます。</p>
</div>
</div>
<div class="section" id="e38397e383ade38391e38386e382a3e5908d">
<h3><a name="e38397e383ade38391e38386e382a3e5908d">プロパティ名</a></h3>
<p>Ymirでは他の多くのフレームワークと同様、JavaBeans規約に従ったプロパティ操作を行なっています。以下のようなプロパティ名はプロパティ操作を行なう際にあいまいであり予期せぬ動作を引き起こす危険性がありますので、利用しないことを推奨します。</p>
<table border="1" class="docutils">
<colgroup>
<col width="50%" />
<col width="50%" />
</colgroup>
<thead valign="bottom">
<tr>
<th>あいまいなプロパティ名</th>
<th>推奨されるプロパティ名</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td>A</td>
<td>a</td>
</tr>
<tr>
<td>aName</td>
<td>AName</td>
</tr>
</tbody>
</table>
<p>具体的には、リクエストパラメータ名、スコープにオブジェクトをバインドする際の名前などにあいまいなプロパティ名を用いないようにして下さい。</p>
</div>
</div>
</div>
</div>
        </div>
      
    </div>
    </div>
    <div class="footer-delimiter"></div>
    <div id="pane.footer" class="pane footer">
      <div id="org.seasar.kvasir.cms.pop.poweredByPop-1" class="pop org.seasar.kvasir.cms.pop.poweredByPop">
        <div class="body">Powered by Kvasir/Sora</div>
      </div>
    </div>
  </body>
</html>
