コーディングRTA
たぶんこれがいちばんはやいとおもいます
※あくまで個人的なものなので注意、タイトルとかは冗談です
※別に急いでいるわけではないので慌てる必要はありません
※早ければいいってものでもないですが、早い方がいいのでまとめてみました
【まとめ記事】
作業効率化まとめ
1.ざっくり分ける
2.メソッドの枠だけ作る
3.内部処理を組む
1.ざっくり分ける
まずは作る機能をざっくりと分けます
APIでレコードを取得し、チェック後にDBに登録
する機能の場合は
// 1.APIたたく
// 2.チェック
// 3.セットしてコミット
※コメントは1.○○ 2.○○ ってナンバリングするとめちゃくちゃ見やすい
※この時の分け方は基本1メソッド1機能にしたいが、設計書ベースに分けるのもあり
2.メソッドの枠だけ作る
次に「がわ」だけ作ります
まずは呼び出しのみのメソッド
public void job() {
// 1.APIたたく
// 2.チェック
// 3.セットしてコミット
}
※現場のコーディング規約でこういうのダメなら臨機応変に対応してな
※こういう、ナンバリングしたコメントってめっちゃ見やすいから
これそのまま残してあげるとすっごい読みやすいぞ
そして次に、内部処理をするメソッドを作ります
引数と戻り値だけ合わせて、内部はまだ書かなくていいです
とりあえずreturn null
しとけばおk、あとでそのままにしないようにね
ApiResult
型を取ってEntity
型としてDBに入れるものとして書いてみましょう
絶対作業漏れしないようにTODO忘れないでね
public void job() {
// 1.APIたたく
// 2.チェック
// 3.セットしてコミット
}
// 1.APIたたく
private ApiResult fetchRecords() {
// TODO
return null;
}
// 2.チェック
private ApiResult check(ApiResult records) {
// TODO
return null;
}
// 3.セットしてコミット
private void insert(ApiResult records) {
// TODO Entity型をDBに
}
3.内部処理を組む
いよいよ肉付けです
まぁここは業務によると思うので何とも言えませんが...
// 1.APIたたく
private ApiResult fetchRecords() {
ApiResult result = null;
try {
result = API共通処理.取得メソッド;
} catch (ApiException e) {
// APIの戻り値が不正だった時の自作例外があったとする
return null;
} catch (ServerErrorException | ClientErrorException e) {
// 通信失敗系の例外
return null;
}
return result;
}
// 2.チェック
private ApiResult check(ApiResult records) {
List<String> ngList = new LinkedList<>();
if (定数1.equals(records.getなんとか1)) {
ngList.add("チェック1だめ");
}
if (定数2.equals(records.getなんとか2)) {
ngList.add("チェック2だめ");
}
if (定数3.equals(records.getなんとか3)) {
ngList.add("チェック3だめ");
}
return ngList.isEmpty()
? records
: null;
}
// 3.セットしてコミット
private void insert(ApiResult records) {
Entity entity = new Entity();
entity.setなんとか1(records.getなんとか1);
entity.setなんとか2(records.getなんとか2);
entity.setなんとか3(records.getなんとか3);
DB共通.insertメソッド(entity);
}
ログ出力や共通処理の使用など細かいところは各々の開発環境に従って実装してください
とりあえず適当に作っただけです
そして呼び出し元メソッドでもしっかりと呼び出してあげます
public void job() {
// 1.APIたたく
ApiResult result = fetchRecords();
if (result == null) {
return;
}
// 2.チェック
ApiResult checked = check(result);
// 3.セットしてコミット
if (checked != null) {
insert(checked);
}
}
それでは全体を見返してみましょう
こんな感じになりました
public void job() {
// 1.APIたたく
ApiResult result = fetchRecords();
if (result == null) {
return;
}
// 2.チェック
ApiResult checked = check(result);
// 3.セットしてコミット
if (checked != null) {
insert(checked);
}
}
// 1.APIたたく
private ApiResult fetchRecords() {
ApiResult result = null;
try {
result = API共通処理.取得メソッド;
} catch (ApiException e) {
// APIの戻り値が不正だった時の自作例外があったとする
return null;
} catch (ServerErrorException | ClientErrorException e) {
// 通信失敗系の例外
return null;
}
return result;
}
// 2.チェック
private ApiResult check(ApiResult records) {
List<String> ngList = new LinkedList<>();
if (定数1.equals(records.getなんとか1)) {
ngList.add("チェック1だめ");
}
if (定数2.equals(records.getなんとか2)) {
ngList.add("チェック2だめ");
}
if (定数3.equals(records.getなんとか3)) {
ngList.add("チェック3だめ");
}
return ngList.isEmpty()
? records
: null;
}
// 3.セットしてコミット
private void insert(ApiResult records) {
Entity entity = new Entity();
entity.setなんとか1(records.getなんとか1);
entity.setなんとか2(records.getなんとか2);
entity.setなんとか3(records.getなんとか3);
DB共通.insertメソッド(entity);
}
それっぽくなりましたね
無論nullを返却しているところなどは細心の注意を払ってくださいね
最後にドキュメントをしっかり書いて仕上げです
今回の例はJavaなのでしっかりとJavadocを書いてください
ドキュメントがシンプルで分かりやすく網羅的な説明だと死ぬほど喜ばれます
/**
* ジョブ起動.
*/
public void job() {
/**
* ○○取得.
* <p>
* 取得に失敗した場合、{@code null}を返却.
*
* @return 取得結果
*/
private ApiResult fetchRecords() {
/**
* チェック.
* <p>
* チェックNGの場合{@code null}を返却.
*
* @param records チェック対象のレコード
* @return チェックokの場合レコードを返却、NGの場合nullを返却
*/
private ApiResult check(ApiResult records) {
/**
* テーブル「○○」に登録.
* <p>
* 登録に失敗した場合どうたらこうたら.
*
* @param records テーブル「○○」に登録するレコード
*/
private void insert(ApiResult records) {
それでは動確に入ってください~
Tips) setterが連続する場合はExcel
// 3.セットしてコミット
private void insert(ApiResult records) {
Entity entity = new Entity();
entity.setなんとか1(records.getなんとか1);
entity.setなんとか2(records.getなんとか2);
entity.setなんとか3(records.getなんとか3);
DB共通.insertメソッド(entity);
}
ここですが、あまりにsetterが多い場合は、Excelをうまく使ってあげると楽に書けます
="entity.set"&物理名&"(records.get"&物理名&");"
項目定義書などから物理名一覧を書き、上記でgetter/setterを量産できます