#良いコードとは?
いい名前をつける。
適切なコメントを書く。
意味のある単位に分割する。
キレイに整形する。
こうした基本的なことを着実にやればいい。
保守性が高い
すばやく効率的に動作する
正確に動作する
無駄な部分がない
事前準備
開発環境
・VisualStudioCodeで統一する
・Prettierなどのコードフォーマットを開発者に共有する
・インデントをスペース4で統一する
Salesforce環境
・単語や文言をConstantクラス、カスタム設定、カスタム表示ラベルで管理するのか統一する
・ネーミング規約を作成する(キャメル、スネークなど)
Apex
アクセス修飾子
3つの叫び
- 書かないのはNG!明示的に書いて!
- 何でもかんでもpublicはNG!ちゃんとprivateも使い分けて!
- protectedは使ってるところ見たことない!なんで!?
private
定義されたApexクラスで使用するメソッドや変数はprivate
public
Pageに紐づけるControllerとか別のControllerから呼ばれるメソッドや変数はpublic
global
アプリケーション外 (SOAP API 内、または別の Apex コード) から呼ばれるメソッドや変数はglobal
メソッド
コンストラクタ
3つの叫び
- コンストラクタに700行とかまじでやめて!
- 長くなりそうならメソッド追加しよ!
- てかコンストラクタ内はシンプルにしといて!保守しづらい!
// 見やすいコンストラクタ
public HogeController(){
// 取引先レコードの取得
getAccount();
// 取引先責任者レコードの取得
getContact();
// 取引先の更新
updateAccount();
// 取引先責任者の更新
insertContact();
}
// 見づらいコンストラクタ
public HogeController(){
// 上記の処理が全部コンストラクタに記載している('Д')
}
変数
インスタンス変数
3つの叫び
- 適当なところに追加しないで!まとめとかないと運用・保守しずらい!
- ローカルでいいものはローカルで書いて!なんでインスタンス変数で書いたの!?
- 使わなくなったら削除して!気持ちはわかる!ここ忘れやすいよね!
//// 画面表示用取引先属性 // こうやってグルーピングしておくとインスタンス変数がバラバラにならなくていいかも!
// 取引先ID
public Id displayAccId {get; private set;} // 表示だけなのにprivate setにしてないの多くない?
// 取引先名
public String displayName {get; private set;} // 画面に表示する項目が取引先だけだったら「Acc」はいらないかな
// 取引先有無フラグ(true: 有 false: 無) // この説明いる?
public Boolean accFlag; // existsAccとかのほうが良くない?「Accountが存在しているか?」だからtrueだったら「存在している」じゃない?
これ自体が見づらい
SOQL
3つの叫び
- SELECT句などはすべて大文字!見ずらい!
- インデント多様!項目が多い場合は共通クラスで用意して!
- WHERE句ごちゃっとすると見づらいので考えて!
List<Account> accList = [ // こうやっておくとリスト変数名変えた時に他のインデントも調整しなくていい、あとVSCodeで閉じれる
// 複数行は下げる、1行はそのまま
SELECT
Id
,Name // 項目追加しやすい、先頭に,を置くことで,忘れ防止
FROM Account
WHERE
Name = '小林' // 条件が追加しやすい
AND ・・・
OR ・・・など
ORDER BY AccountNumber DESC
LIMIT 100
];
// やだ!
List<Account> accList = [select DandbCompanyId, DunsNumber, Jigsaw, Fax, NaicsDesc, NaicsCode, Website, IsCustomerPortal, ChannelProgramLevelName, ChannelProgramName, IsPartner, Ownership, ShippingAddress, BillingAddress, CreatedById, OwnerId, Site, AccountSource, Name, AccountNumber from Account where Name = '小林' order by AccountNumber limit 100];