Skip to content
This repository has been archived by the owner on Jan 20, 2023. It is now read-only.

Latest commit

 

History

History
56 lines (39 loc) · 3.36 KB

README.ja.md

File metadata and controls

56 lines (39 loc) · 3.36 KB

MapK Project Home @github

このページはMapKプロジェクトのポータルページです。

MapKプロジェクトはKotlinの優れたリフレクション機能を利用し、従来のJavaライブラリに代わる安全なマッピングライブラリを提供します。

「安全なマッピング」とは

これまでのJavaライブラリ

従来のJavaライブラリは、基本的に以下の手順でオブジェクトを初期化していました。

  1. 引数無しコンストラクタによるインスタンス生成
  2. セッターによるフィールドの初期化

一方この形での初期化は、Kotlinのようにimmutabilityを重視するモダンな言語との相性が非常に悪いです。

マッピング対象のクラスはPOJOのままとしたり、Kotlin no-arg pluginを用いた黒魔術的な手段によって、KotlinでこれまでのJavaライブラリを利用することも可能ですが、この手法は以下のような危険性が有ります。

  • null安全が壊れる
    • non-nullなフィールドにもnullをセットできてしまう
  • フィールドにアクセスするまで初期化の成否が判定できない
    • 初期化に必要な引数が足りていなくてもインスタンスが得られてしまう
    • よく分からない場所で発生するNullPointerExceptionに怯えなければならない

Kotlinのリフレクションが実現する「安全なマッピング」

Kotlinのリフレクションは、Javaのリフレクションに比べ以下のような利点が有ります。

  • メソッド、コンストラクタの引数名がデフォルトで取得できる
    • リフレクションによる呼び出しを容易に実装できる
  • アクセス可能なデータがプロパティという形で一元的に管理されている
    • 引数名とプロパティの一致を見るのに余計な変換処理が不要

これによって、以下の手順でオブジェクトの初期化を行うことが可能です。

  1. データソースから必要な引数を抽出
  2. 1からコンストラクタ、ファクトリーメソッド等を呼び出して初期化

この方法で初期化を行うことには以下のようなメリットが有ります。

  • 関数を呼び出すため、マッピングに失敗するとその場で例外となる
  • オブジェクトの必要な引数が足りないという状況が発生しない(当然null安全が保たれる)
  • 初期化のロジックを自分で書くことができる

このようなメリットを享受することで、コード量削減・手で書かないことによるバグ抑制といった従来のJavaライブラリに有るメリットはそのままに、より安全なマッピングを実現することができます。

プロダクト一覧

KMapper

Kotlin to Kotlinのマッピングライブラリです。

KRowMapper

Kotlin向けRowMapperライブラリです。 BeanPropertyRowMapperのように機能します。