<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE document PUBLIC
  "-//Apache Software Foundation//DTD XDOC 1.0//EN"
  "http://maven.apache.org/dtd/xdoc_1_0.dtd">

<document>
  <properties>
    <title>テーブルモジュールの設計 - Table Module Design</title>
    <author email="kurokkie@users.sourceforge.jp">kurokkie</author>
  </properties>
  <body>
    <section name="テーブルモジュールの設計">
      <p>
ブログおよびブログ記事のテーブルモジュール <a href="apidocs/org/unitedfront2/domain/communication/BlogTable.html"><code>BlogTable</code></a>
と <a href="apidocs/org/unitedfront2/domain/communication/BlogEntryTable.html"><code>BlogEntryTable</code></a>
を作成します。
      </p>
    </section>
    <section name="BlogTable">
      <p>
<a href="apidocs/org/unitedfront2/domain/communication/BlogTable.html"><code>BlogTable</code></a>
には対応するデータアクセスオブジェクト <a href="apidocs/org/unitedfront2/dao/BlogDao.html"><code>BlogDao</code></a>
が存在するため、 <a href="apidocs/org/unitedfront2/domain/SimpleTableModule.html"><code>SimpleTableModule</code></a>
を継承して実装を再利用しています。
      </p>
<pre name="code" class="java">
public class BlogTable extends SimpleTableModule&lt;Blog&gt; {

    /** ブログデータアクセスオブジェクト */
    private BlogDao blogDao;

    @Override
    protected SimpleFindable&lt;Blog&gt; getSimpleDao() {
        return blogDao;
    }

    /**
     * コードを持つブログを取得します。
     *
     * @param code コード
     * @return ブログ
     */
    public Blog findByCode(String code) {
        return blogDao.findByCode(code);
    }

    /**
     * 指定した所有者のブログリストを取得します。
     *
     * @param ownerId 所有者のユーザ ID
     * @return ブログリスト
     */
    public List&lt;Blog&gt; findByOwnerId(int ownerId) {
        return blogDao.findByOwnerId(ownerId);
    }

    // setters
}
</pre>
    </section>
    <section name="BlogEntryTable">
      <p>
対応するデータアクセスオブジェクトを持たない <a href="apidocs/org/unitedfront2/domain/communication/BlogEntryTable.html"><code>BlogEntryTable</code></a>
はインターフェース <a href="apidocs/org/unitedfront2/domain/DomainFactory.html"><code>DomainFactory</code></a>
を直接実装します。
      </p>
<pre name="code" class="java">
public class BlogEntryTable {

    /** メッセージテーブル */
    private MessageTable messageTable;

    /** ドメインファクトリ */
    private DomainFactory domainFactory;

    /**
     * ブログ記事を取得します。
     *
     * @param id ブログ記事 ID
     * @return ブログ記事
     */
    public BlogEntry find(int id) {
        Message entry = messageTable.find(id);
        if (entry == null) {
            return null;
        }
        return domainFactory.prototype(new BlogEntry(entry));
    }

    /**
     * 記事コードを持つブログ記事を取得します。
     *
     * @param code 記事コード（メッセージコード）
     * @return ブログ記事、見つからなければ <code>null</code>
     */
    public BlogEntry findByCode(String code) {
        Message entry = messageTable.findByCode(code);
        if (entry == null) {
            return null;
        }
        return domainFactory.prototype(new BlogEntry(entry));
    }

    // setters
}
</pre>
    </section>
    <section name="Bean 定義">
      <p>
この時点で <a href="http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi/trunk/src/java/resources/applicationContext-domain.xml?root=unitedfront2&amp;view=markup">applicationContext-domain.xml</a>
にテーブルモジュールを定義しておきます。
      </p>
<pre name="code" class="xml">
&lt;bean id="communication.blogTable" class="org.unitedfront2.domain.communication.BlogTable"&gt;
  &lt;property name="blogDao" ref="blogDao"/&gt;
&lt;/bean&gt;

&lt;bean id="communication.blogEntryTable" class="org.unitedfront2.domain.communication.BlogEntryTable"&gt;
  &lt;property name="domainFactory" ref="domainFactory"/&gt;
  &lt;property name="messageTable" ref="communication.messageTable"/&gt;
&lt;/bean&gt;
</pre>

<script type="text/javascript" src="js/dp.SyntaxHighlighter/Scripts/shCore.js"></script>
<script type="text/javascript" src="js/dp.SyntaxHighlighter/Scripts/shBrushJava.js"></script>
<script type="text/javascript" src="js/dp.SyntaxHighlighter/Scripts/shBrushXml.js"></script>
<script type="text/javascript">
dp.SyntaxHighlighter.ClipboardSwf = 'js/dp.SyntaxHighlighter/Scripts/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');
</script>

<script type="text/javascript">
var ID='100354378-sbs_tmDesign';
var AD=1;
var FRAME=0;
</script>
<script src="http://j1.ax.xrea.com/l.j?id=100354378" type="text/javascript"></script>
<noscript>
<a href="http://w1.ax.xrea.com/c.f?id=100354378" target="_blank"><img src="http://w1.ax.xrea.com/l.f?id=100354378&amp;url=X" alt="AX" border="0"/></a>
</noscript>

    </section>
  </body>
</document>
