メンバー管理の例
10074 ワード
例では、より複雑な例がspring-mvc-1編で紹介されているので、すべての内容を整理することはありません.
コントローラ:Web MVCのコントローラロール サービス:コアビジネスロジック を実装ライブラリ:データベースにアクセスし、ドメインオブジェクトをデータベースに保存し、 を管理します.ドメイン:会員、注文、クーポンなど、データベースに主に格納および管理されるビジネスドメインオブジェクト
この例では、repositoryがまだ選択されていないと仮定し、まずrepositoryをインタフェースとして設計し、次に実現体を設計する.
このような設計の利点はインタフェースに現れるため,以降の反復でこのフォーマットに従って設計するだけで,他のコードをあまり変更せずにrepositoryを置き換えることができ,変更を容易にすることができる.
Repositoryインタフェース
タイプ関数名(パラメータ)を返す構造として定義します. Optional
Java 8以降の機能を使用してnullpointExceptionを防ぐために値を一度パッケージします.
@AfterEach
この追加の方法は、各テストの実行が終了したときに実行されます.
(逆に,@BeforeEach)
エラーを防止するために、テストが終了するたびにrepositoryを空にします.
スプリング実行時に@Componentコメントがある場合は、自動的にbeanとして登録されます.
@Service、@Repository、@Controllerには@Component宣言が含まれています.
注入作成者の例
@Configuration Anotationが添付されている場合、スプリングを実行すると、スプリングはクラスをチェックし、各要素をbeanとして登録します.
*注意:実際の操作では、構造化コントローラ、サービス、リポジトリなどのコードは、主に構成部品スキャンを使用します.
また、定型化されていない場合や、状況に応じて実装クラスを変更する必要がある場合は、設定によってspring beanとして登録します.
SPRING-VC-1編ですので、 を省略します
JPA基本編で紹介されているので、 は省略する.
AOP: Aspect Oriented Programming
共通の注目点とコアの注目点を区別する
ex)すべてのメソッドの呼び出し時間を測定する
時間測定は共通の関心の問題であるが,核心的な関心の問題ではない.
典型的なWebアプリケーション階層
特別事項
この例では、repositoryがまだ選択されていないと仮定し、まずrepositoryをインタフェースとして設計し、次に実現体を設計する.
このような設計の利点はインタフェースに現れるため,以降の反復でこのフォーマットに従って設計するだけで,他のコードをあまり変更せずにrepositoryを置き換えることができ,変更を容易にすることができる.
Repositoryの実装
public interface MemberRepository {
Member save(Member member);
Optional<Member> findById(Long id);
Optional<Member> findByName(String name);
List<Member> findAll();
}
インタフェースの各要素タイプ関数名(パラメータ)を返す構造として定義します.
public class MemoryMemberRepository implements MemberRepository {
このインタフェースを継承するインプリメンテーションボディは、インプリメンテーションによって継承されます.Java 8以降の機能を使用してnullpointExceptionを防ぐために値を一度パッケージします.
test case
class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@AfterEach
public void afterEach() {
repository.clearStore();
}
@Test
public void save() {
//given
Member member = new Member();
member.setName("spring");
//when
repository.save(member);
//then
Member result = repository.findById(member.getId()).get();
assertThat(result).isEqualTo(member);
}
}
@AfterEach
この追加の方法は、各テストの実行が終了したときに実行されます.
(逆に,@BeforeEach)
エラーを防止するために、テストが終了するたびにrepositoryを空にします.
スプリングシートに関連
構成部品スキャンと自動依存関係の設定
スプリング実行時に@Componentコメントがある場合は、自動的にbeanとして登録されます.
@Service、@Repository、@Controllerには@Component宣言が含まれています.
注入作成者の例
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
これらの空の登録オブジェクトは、@Autowiredによって依存関係を自動的に注入したり、オブジェクトにしたりすることができます.Javaコードを使用してスプリング空席を直接登録する
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
依存関係を直接注入するコードを@Configurationと@Beanで実証した.@Configuration Anotationが添付されている場合、スプリングを実行すると、スプリングはクラスをチェックし、各要素をbeanとして登録します.
*注意:実際の操作では、構造化コントローラ、サービス、リポジトリなどのコードは、主に構成部品スキャンを使用します.
また、定型化されていない場合や、状況に応じて実装クラスを変更する必要がある場合は、設定によってspring beanとして登録します.
メンバー管理例-Web MVC開発
Spring DBアクセス技術
AOP
AOPが必要
AOP: Aspect Oriented Programming
共通の注目点とコアの注目点を区別する
ex)すべてのメソッドの呼び出し時間を測定する
時間測定は共通の関心の問題であるが,核心的な関心の問題ではない.
Reference
この問題について(メンバー管理の例), 我々は、より多くの情報をここで見つけました https://velog.io/@bins1225/회원-관리-예제テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol