2

私はJSF、Spring、Mybatisを使ったwebappを持っています。これらのフレームワークは、それぞれコントローラー、ビジネス、dao レイヤーで使用されます。私の DAO レイヤーには、CRUD 操作のメソッドがあります。さて、私のコントローラーレイヤーでは、挿入操作を使用する必要があります。このために、次の構成を使用できます。

コントローラー層

アノテーション付きの JSF を使用しています

@ManagedBean
public class Controller{
    @ManagedProperty("#{business}")
    private Business business;

    public void insert(){
        business.insert();
    }
}

ビジネス層

注釈付きのSpringを使用しています

public interface Business{
    public void insert();
}

@Service("business")
public class BusinessImpl implements Business{
    @Autowired
    private DaoMapper mapper;

    @Override
    @Transactional
    public void insert(){
        mapper.insert();
    }
}

DAO レイヤー

Mybatis (mybatis-spring ライブラリ) を使用しています

public interface DaoMapper{
    public void insert();
}

ただし、この場合、私のビジネス層は DAO 層を呼び出すだけで、他の操作を認識しないため、次の構成を使用すると思います。

コントローラー層

@ManagedBean
public class Controller{
    @ManagedProperty("#{daoMapper}")
    private DaoMapper mapper;

    public void insert(){
        mapper.insert();
    }
}

DAO レイヤー

public interface DaoMapper{

    @Transactional
    public void insert();
}

すでにテスト済みで正常に動作していますが、悪い習慣が発生しているかどうかを知りたいです

[編集]

実際には DaoMapper インターフェイスは、XML ファイル ( Look ) に関連付けられた MyBatis クラス マッパーです。これがDAOクラスになるかどうかはわかりません。私は実際にそれをPersisence LayerまたはMapper Layerと呼ぶべきだと思います

ここに画像の説明を入力

出典: http://www.infoq.com/articles/ddd-in-practice

ご覧のように。プレゼンテーション レイヤー、私の場合はコントローラー レイヤー (別の名前付けを間違えたと思います)、DTO を直接呼び出します (または、それは私が理解していることです)。

コントローラーまたはプレゼンテーション レイヤー (名前は何でも) で挿入または更新操作を使用する必要がある場合、マッパー クラスから直接呼び出すか、このクラス呼び出しからマッパー クラスへの新たなビジネス クラスを作成する必要があります。

今。可能であれば、この構成を使用してください。疑問があります。

私のビジネスクラスのメソッドで、操作を挿入するために呼び出す必要があるとします。これは次のようになります。

@Service("business")
public class BusinessImpl implements Business{
    @Autowired
    private DaoMapper mapper;

    @Override
    @Transactional
    public void insert(){
        mapper.insert();
    }
}

ただし、DaoMapper インターフェースからのメソッド挿入には、すでに@Transactionalアノテーションが付けられています。メソッドの挿入は@Transactionalアノテーションによって 2 回影響を受けます。これは問題になりませんか?

4

3 に答える 3