1

スプリングサポート付きのアイバティスを使用する通常の慣用句は次のとおりです。というか、私はこうしています。もっと良い方法があれば教えてください。

豆のxml:

<bean id="DataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jdbc/some/som1/my/mydb"/>
</bean>
<bean id="SqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  <property name="configLocation" value="classpath:sql-map-config-oracle.xml"/>
  <property name="dataSource" ref="DataSource"/>
</bean>
 <bean id="myDAO" class="com.reports.MyUserAccessDAO">
    <property name="sqlMapClient" ref="SqlMapClient"/>
    <property name="dataSource" ref="DataSource"/>
 </bean>

インターフェース:

public interface MyUserAccessIface {
    public SomeBean getUserReports (String org);
}

ダオ:

public class MyUserAccessDAO extends SqlMapClientDaoSupport implements MyUserAccessDAO {
    public SomeBean getUserReports (String org)
    {
      SomeBean bean = new SomeBean();
      //code for parameters goes here 
      getSqlMapClientTemplate().queryForList("namesp.userreport", parm);
      //fetch the result from parm and put them in SomeBean
      return bean
    }
}

DAO の呼び出し:

MyUserAccessIface iBatisDAO = 
(MyUserAccessIface) ApplicationInitializer.getApplicationContext().getBean("myDAO");

これはうまくいきますが、インターフェースの必要性を理解していません。

質問

  • インターフェースを写真から取り除いても、まだ機能していますか?
  • DAOへの呼び出しが単純になるように設計/設定を変更できますか(基本抽象クラスが必要な場合でも)

    MyUserAccessDAO mydao = new MyUserAccessDAO(); mydao.getUserReports("何とか");

私は数日前にこれらの質問をしましたが、2日間苦労してさらに多くのことを見つけた後、この質問をもう一度しました. 可能であれば、変更/追加するコードのスニペットを提供してください。

すべてがコンテナー内にあるため、この設計での単体テストは機能しません。それが機能するようになったら、それを質問にも追加します(情報目的で)。

また、Spring + Ibatis を機能させようとしている人にとっては...これは、開始するのに適した場所になると思います。

編集:

上で述べたように、DAO を次のように呼び出したいと思います (または、コンストラクターのパラメーターとして何かを渡しても問題ありません)。

MyUserAccessDAO mydao = new MyUserAccessDAO(); mydao.getUserReports("blah");

上記を達成するには、DAOに次の行があります

setSqlMapClient((SqlMapClient)ApplicationInitializer.getApplicationContext().getBean("SqlMapClient"));

このためのテストケースを作成できるようにするには、何を上書きする必要があるかを知る必要があります。テスト ケースはコンテナ内の何にもアクセスできないため、Driver Datasource に依存します...

ここではベストプラクティスに反しているので...テストケースのためだけにDAOを変更してもかまいません...

4

3 に答える 3

2

インターフェースを写真から取り除いても、まだ機能していますか?

インターフェイスを取り出さないでください。これには正当な理由があります (例: トランザクションのプロキシ生成、AOP、サービスでのテスト用のモックなど)。

なんで出したいの?それはあなたにどんな不安を引き起こしていますか?

DAOへの呼び出しが単純になるように設計/設定を変更できますか(基本抽象クラスが必要な場合でも)

なぜ「新」と呼ぶのですか?Spring を使用している場合は、App Context を使用してこれを注入する必要があります。「new」と呼ぶと、Spring の制御下にはありません。それが要点です。

于 2009-11-11T02:28:59.490 に答える
0

インターフェイスを取り出すと壊れる1つの主要な原則を考えることができます...「オブジェクト指向」と、最も重要なのは、コードを呼び出すクライアントを中断せずにメソッドシグネチャを変更できないことです。それだけで、私は道に迷うでしょう。良い質問ですが!! 多くのエンゲージメント中に、私は通常この質問をされます。または、単にクラスを抽象化するようにプログラムしたいだけです。=)

于 2010-01-24T19:27:37.677 に答える