JavaのBest Practiceについてのまとめです。
🗽 前提条件、入力のチェック
実行時の前提条件、入力のチェックを行うことはよい作法です。
class AsyncFileReader { void readLater(File file, Closure callback) { checkNotNull(file); checkArgument(file.exists() && file.canRead(), "File must exist and be readable."); checkNotNull(callback);
scheduledExecutor.schedule(new Runnable() { @Override public void run() { callback.execute(readSync(file)); } }, 1L, TimeUnit.HOURS); } }
|
😀 アクセス制御はできるだけ小さく保つ
アクセス制御は最低限にして、コールする側が意図した使い方をするように心かげましょう。
これはスレッドセーフなコードを書くためにも不可欠です。
class Parser { private final Map rawFields; private String readConfigLine() { } }
|
🚕 イミュータブルを心がける
できるだけイミュータブルなオブジェクトにして、意図しない変更が発生しない安全なコードを書きましょう。
public class User { private final Date birthday; private final Map attributes = Map.newHashMap();
public Map getAttributes() { return ImmutableMap.copyOf(attributes); }
@Nullable public String getAttribute(String attributeName) { return attributes.get(attributeName); } }
|
🤔 一般化された型を使う
できるだけ一般化されたタイプを使うことで実装の詳細に影響を受けないAPIを作ることができます。
interface Database { Iterable fetchUsers(String query); }
|
🐮 最低限の例外のキャッチを行う
catch
を使う場合はできるだけキャッチする例外を狭めることで、予期しない動作を防ぐことができます。
interface DataStore { String fetchValue(String key) throws StorageException; static class StorageException extends Exception { } }
try { String value = storage.fetchValue(key); } catch (StorageException e) { LOG.error(Failed to fetch value from storage.); }
|
🐹 デメテルの法則に従う
デメテルの法則(Law of Demeter, LoD)は自分以外の構造やプロパティに対して持っている家庭を最小限にすべきという考え方です。
class Weigher { private final double defaultInitialRate;
Weigher(WeightingService weightingService, double defaultInitialRate) { this.defaultInitialRate = validateRate(defaultInitialRate); this.weightingService = checkNotNull(weightingService); } }
|
🐞 参考リンク
🖥 VULTRおすすめ
「VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。
最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!