0

現在、サービス層を実装するために Spring jdbcTemplate を使用していますが、将来のある時点で休止状態に移行したいと考えています。Hibernate に移行したときに、現在のサービス レイヤーの設計方法が効率的になるかどうかが心配です。

明確にするために詳細を省略しました

コンテキスト xml のデータソース

<bean id="dataSource" destroy-method="close" class="...BasicDataSource">
    <property name="" value="" />
    <property name="" value="" />
    <property name="username" value="" />
    <property name="password" value=""/>      
</bean>

サービスクラス

@Repository 
public class MyService {
   private JdbcTemplate jdbcTemplate;
        @Autowired
        public void setDataSource (DataSource ds) {
            this.jdbcTemplate = new JdbcTemplate(ds);
        } 
@Transactional 
public void myTransactions () {...}  
} 

コントローラ:

@Autowired
private MyService  myService;

spring mvc で hibernate サービスレイヤーの多くの実装を見てきましたが、それらのほとんどはinterface. インターフェイスを追加する利点は何ですか? interfaceまた、デザインに を追加する必要がありますか? 休止状態に移行するとき、それは物事をより簡単にしますか?

4

1 に答える 1

1

私が持っている唯一の提案は、インターフェースを使用し、貧血ドメインモデルを使用することです。このようにして、わずかな労力でインターフェースの実装をSpringに切り替えることができます。

そして、それはあなたがインターフェースを使用することで得られる利点です。

このパッケージとクラスがあるとします。

org.company.samples.dao.Dao // Generic Dao Interface
org.company.samples.dao.DomainEntityDao // Domain Dao extends Generi Dao
org.company.samples.dao.jdbc.BaseDao // Generic implementation of Dao Interface
org.company.samples.dao.jdbc.DomainEntityDaoImpl // Domain Dao implementation extends BaseDao

次に、休止状態に切り替えます。このようにして、この構造を実行します。

org.company.samples.dao.Dao // Generic Dao Interface
org.company.samples.dao.DomainEntityDao // Domain Dao extends Generi Dao
org.company.samples.dao.hibernate.BaseDao // Generic Hibernate implementation of Dao Interface
org.company.samples.dao.hibernate.DomainEntityDaoImpl // Domain Dao implementation extends BaseDao

次に、daosでアノテーションを使用する場合、春にjdbcからhibernateに切り替えるのは非常に簡単です。

これの代わりに:

<context:component-scan base-package="org.company.samples.dao.jdbc" />

あなたはこれのためにそれを変更します:

<context:component-scan base-package="org.company.samples.dao.hibernate" />

これで、サービスのタイプを変更せずにdaosの実装を切り替えることができます。

于 2012-10-17T18:35:44.500 に答える