0

私は Controller -> Service -> DAO パターンに従っています。DAO 実装を呼び出すと、DTO/Data オブジェクトが返されます。次に、サービス層に渡され、それぞれのビジネス オブジェクトとデータ オブジェクトがまとめられます。そのようです:

public User getUserById(int id) {
    return new User(userDAO.getUserById(id));
}

class User {
    private UserDTO userDTO;

    public User(UserDTO userDTO) {
        this.userDTO = userDTO;
    }
}

私がやりたいことは、すべてのビジネス ロジックをビジネス クラス内にラップすることですが、追加の依存関係が必要です。たとえば、次のようなことができるようになりたいです。

//... some code

User user = userService.getByUserId(1);

user.delete(); // this should delete the user from the database

この方法でユーザーを削除するには、UserService をビジネス クラスに Autowire する必要がありますが、User Service で User クラスを手動でインスタンス化しているため、これは機能しません。

class User {
    @Autowired
    private UserService userService; // this won't work since I call instantiate User myself, ie. new User()
    private UserDTO userDTO;

    public User(UserDTO userDTO) {
        this.userDTO = userDTO;
    }

    public boolean delete() {
        userService.deleteByUserId(userDTO.getId());
    }
}

自分がやりたいことを実行できるようにするために従うことができるパターンはありますか?

4

2 に答える 2

1

ビジネス クラスを DTO オブジェクトのメンバーとして持つのは、良い設計ではないと思います。より適切なアプローチは、ビジネス クラスに delete メソッドを含めることです。それは疎結合に役立ちます。

于 2013-03-16T23:29:49.777 に答える
0

注釈を使用してこれを行うことができると思いますが@Configurable、これは実際には Spring の動作方法ではありません。アプリケーションに多くのオーバーヘッドが追加され、デバッグが難しくなります。

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-atconfigurable

于 2013-03-16T23:31:29.643 に答える