1.オブジェクトと依存関係-IoC
1.4制御反転(IoC)
IoCは反転を制御する弱者である.
1.4.1対象工場
現在、UserDaoのクライアントオブジェクトmainには2つの注目点があります.
上の二つの関心事も分ける
ファクトリ
定義#テイギ#
これは,設計モードにおけるファクトリメソッドモードや抽象ファクトリモードとは異なる概念である.
-オブジェクトの作成(Data Factory)
生成オブジェクト
UserDaoを作成するファクトリクラス
public class DaoFactory {
public UserDao userDao() {
ConnectionMaker connectionMaker = new DConnectionMaker();
UserDao userDao = new UserDao(connectionMaker);
return userDao;
}
}
工場のmainを使用するように変更public class main {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
UserDao userDao = new DaoFactory().userDao();
...
}
}
設計図としての工場
1.4.2利用対象工場
データファクトリにUserDaoではなく他のDAOの作成機能を追加したらどうなりますか?
データファクトリにAccountDao、MessageDaoなどを作成する
public class DaoFactory {
public UserDao userDao() {
ConnectionMaker connectionMaker = new DConnectionMaker();
UserDao userDao = new UserDao(connectionMaker);
return userDao;
}
public AccountDao accountDao() {
ConnectionMaker connectionMaker = new DConnectionMaker();
AccountDao accountDao = new AccountDao(connectionMaker);
return accountDao;
}
public MessageDao messageDao() {
ConnectionMaker connectionMaker = new DConnectionMaker();
MessageDao messageDao = new MessageDao(connectionMaker);
return messageDao;
}
}
に質問3つの方法で、接続タグ実装クラスのコード重複を選択して生成します.
解決策
重複するConnectionMaker実装クラスを選択し、生成したコードを個別のメソッドとして抽出します.
public class DaoFactory {
public UserDao userDao() {
UserDao userDao = new UserDao(connectionMaker());
return userDao;
}
public AccountDao accountDao() {
AccountDao accountDao = new AccountDao(connectionMaker());
return accountDao;
}
public MessageDao messageDao() {
MessageDao messageDao = new MessageDao(connectionMaker());
return messageDao;
}
public ConnectionMaker connectionMaker() {
// 분리해서 중복을 제거한 ConnectionMaker 타입 오브젝트 생성 코드
return new DConnectionMaker();
}
}
効果1.4.3制御権の移転による逆転制御関係
オブジェクト(Client)は、使用するオブジェクトを自分で選択または作成しません.
すべての制御権限は、他の特殊なオブジェクト(設計図)に委任されます.
UserDaoがどのConnectionMakerインプリメンテーションクラスを使用するかは、Data Factoryによって決定されます.
mainは、Data Factoryによって作成され、初期化されて返されるdaoのみを使用できます.
スプリングフレームは、これらIoCを限界まで適用するフレームである.
ソース:github
Reference
この問題について(1.オブジェクトと依存関係-IoC), 我々は、より多くの情報をここで見つけました https://velog.io/@yuseogi0218/1.-오브젝트와-의존관계-IoCテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol