2022年04月04日TIL


Build Tool


Build

  • ライブラリのダウングレード
  • コードコンパイル
  • テスト
  • を実行
  • コンパイルコードパッケージ(jar.)
  • 配備
  • 件(パッケージファイル)
  • Maven

  • POM.xml(POM: Project Object Model)
  • なぜ使いますか。

  • は毎回同じ設定を繰り返しません.
  • 依存(外部ライブラリ)管理
  • プラグインと外部ライブラリの分離管理
  • Maven coordinates


    Mavenプロジェクト識別子
  • グループID:会社または団体名
  • artifactId:プロジェクト名
  • バージョン:プロジェクトのバージョン
  • SNAPSHOT:開発中の
  • RELEASE:導入
  • Multiple Module


    1つのプロジェクトで複数のプロジェクトを管理できます.

    build lifecycle


    lifecycle
    validate, compile, test, package, verify, install, deploy
    How to use
    mvn < lifecycle >
    mvn < lifecycle1 > < lifecycle2 >

    Transitive Dependencies


    if (A -> B, B -> C) then (A -> C)
    バージョンまたはライブラリの間で競合が発生する可能性があります!!
    依存関係のデバッグ
    依存関係ツリーは、mvn dependency:treeを使用して描画できます.

    依存範囲

    <scope></scope>を使用して設定します.
  • compile
  • default scope
  • ライブラリのコンパイル、テスト、および実行に
  • を使用
  • provided
  • JDKまたはcontainerによって提供されることが望ましい.
  • 🤨 わかりません
  • runtime
  • 運転とテスト時に
  • を設定する必要がある
  • test
  • テストのコンパイルと実行に必要な
  • 設定
  • system
  • で提供されるのと似ていますが、ユーザーはjarファイルの場所を指定します.
  • 🤨 わかりません
  • gradle


    GroovyとCortlinベースの構築ツール

    Task


    buildの操作

    plugin

  • Gradleでは、Taskと主な機能を追加できます.
  • pluginは、新しいタスクと特定の会議(ex.ディレクトリ構造)を追加しました.
  • Spring Frameworkの起動


    Spring


    複数の項目(Spring Boot、Spring Securityなど)の集合.

    Spring Framework


    複数のモジュールの組合せ

    Spring Boot


    プロジェクトの設定時間を短縮します.

    Domain Driven Design(DDD)


    Entity

  • 識別子を持つ.
  • 変更を継続する対象.
  • Value Object(VO)

  • の値自体が固有の不変オブジェクトです.
  • ドメインで1つ以上のプロパティをマージします. 特定の値を表す オブジェクト
  • equalsとhashコードメソッドを再定義する必要があります
  • equalsとhashCodeを再定義してVOを使用する場合は、属性値が同じオブジェクトが同じオブジェクトであることを確認します.
  • 修飾子のない不変のオブジェクトでなければなりません
  • 属性値自体が認識値のVOであり,値が変化すると別の値となり追跡できない.したがって,VOは値を可変オブジェクトにする必要がある.
  • 依存性管理


    コンパイル時間依存性

  • クラス間の依存性
  • 強結合度
  • FixedAmountVoucher fixedAmountVoucher = new FixedAmountVoucher()
    // 구상체가 완전히 정해져 있다. 변경될 여지가 없다!
    var order = new Order(UUID.randomUUID(), customerId, orderItems, fixedAmountVoucher);
    
    ...
    
    // FixedAmountVoucher의 변경에 영향을 받습니다.
    public class Order {
    	public Order(UUID orderId, UUID customerId, List<OrderItem> orderItems, FixedAmountVoucher fixedAmountVoucher) {
            ...
            this.fixedAmountVoucher = fixedAmountVoucher;
    	}
    }

    ランタイム依存性

  • オブジェクト間の依存性
  • 松結合度
  • var fixedAmountVoucher = new FixedAmountVoucher(UUID.randomUUID(), 10L);
    // 런타임 시점에 구상체 결정
    var order = new Order(UUID.randomUUID(), customerId, orderItems, fixedAmountVoucher);
    
    ...
    
    public class Order {
    	public Order(UUID orderId, UUID customerId, List<OrderItem> orderItems, Voucher voucher) {
            ...
            this.voucher = voucher;
    	}
    }

    けつごうど


    変更が発生した場合、関係内の他のオブジェクトが変更する必要がある程度.

    Record

  • は、作成者およびメンバーのデータクラスを自動的に有する.
  • public record SampleRecord {
    	String name,
        Integer age,
        Address address
    } {}
  • recordでは、getterはgetXXX()形式を有しない.name()、age()、address()と同じ形式を有する.
  • Java 14から利用できます.
  • var

  • 変数のタイプが明確に記録されていなくても、コンパイラは変数のタイプを自分で推定します.
  • Java 10~
  • var str = “Hello World”; 
    var list = new ArrayList<String>();

    でもvars

  • 地域変数でのみ使用できます.
  • は初期化する必要があります.nullで初期化できません.
  • 配列では使用できません.
  • Lamdaにも使用できません.