Salesforceではあるオブジェクトのトリガを複数ファイルに分けてコーディングすることが可能なのですが、例えば、あるオブジェクトに対するトリガを処理内容ごとにクラスを作成すると散らかってしまいメンテナンスが劣ってしまうような気がします。
(例)
・Trigger CheckData On Account
・Trigger CountUp On Account
・Trigger SendMail On Account
※全て取引先(Account)に対するトリガです。
・Trigger CheckData On Account
・Trigger CountUp On Account
・Trigger SendMail On Account
※全て取引先(Account)に対するトリガです。
そこで、下記のコーディングルールを決めておくとトリガも散らかることがなく、プログラムを解読することもし易くなって保守性も向上するかもと思います。
トリガを作成するときは下記のルールを守るべし!
- トリガはオブジェクトに対して1つのみ作成すべし
- 処理内容はトリガ内でメソッドを分ける or Apexクラスを作成すべし
ということで、トリガクラスのテンプレートを下記に記載します。
/** * ◎◎◎(オブジェクトのAPI参照名)に関するトリガクラスです。 * */ Trigger [オブジェクトのAPI参照名]Trigger On [オブジェクトのAPI参照名] ( before insert, after insert, before update, after update, before delete, after delete ) { // before if ( Trigger.isBefore ) { // insert if ( Trigger.isInsert ) { // 例:CheckDataクラス(Apexクラス)で処理しています。 CheckData cd = New CheckData( Trigger.New, Trigger.Old ); cd.check(); } // update if ( Trigger.isUpdate ) { } // delete if ( Trigger.isDelete ) { } } // after if ( Trigger.isAfter ) { // insert if ( Trigger.isInsert ) { } // update if ( Trigger.isUpdate ) { } // delete if ( Trigger.isDelete ) { } } }
処理する部分をApexクラスに分けておくと、例えば後で、スケジュールバッチでも同じ処理を行いたい場合などに流用することが可能になって拡張性にも優れます。