メンバー管理の例

10074 ワード

例では、より複雑な例がspring-mvc-1編で紹介されているので、すべての内容を整理することはありません.

典型的なWebアプリケーション階層

  • コントローラ:Web MVCのコントローラロール
  • サービス:コアビジネスロジック
  • を実装
  • ライブラリ:データベースにアクセスし、ドメインオブジェクトをデータベースに保存し、
  • を管理します.
  • ドメイン:会員、注文、クーポンなど、データベースに主に格納および管理されるビジネスドメインオブジェクト

    特別事項



    この例では、repositoryがまだ選択されていないと仮定し、まず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 {
    
    このインタフェースを継承するインプリメンテーションボディは、インプリメンテーションによって継承されます.
  • Optional
    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-VC-1編ですので、
  • を省略します

    Spring DBアクセス技術

  • JPA基本編で紹介されているので、
  • は省略する.

    AOP


    AOPが必要


    AOP: Aspect Oriented Programming
    共通の注目点とコアの注目点を区別する
    ex)すべてのメソッドの呼び出し時間を測定する
    時間測定は共通の関心の問題であるが,核心的な関心の問題ではない.