一般的に、システムを確立しようとする3つのチームがあるため、開発経験を楽しむことはありません。発生する多くの問題に対してそれぞれ異なる回避策が見つかるため、それぞれの開発方法が若干異なります。
トリガーとクラスを名前空間にする方法を見つける必要があります。コードを区切るために各チームのプレフィックスを選択します。
より少ないクラスを使用:従来のOOP(Javaなど)でプログラミングする場合、私は意味のある小さなクラスが好きです。しかしSalesforceでは、クラスを管理するために大きなオーバーヘッドがあります。さらに、すべてのクラス(yuck)に対して1つの大きなフォルダがあります。だから、私は今より大きなクラスファイルを構築します。各ファイルにはテストコードが含まれています。トリガテストコードは、同じオブジェクトで動作するクラス(コントローラなど)に配置します。 Force IDEをCVS、SVN、Mercurial、Gitなどのバージョン管理システムと組み合わせて使用してください。 変更を追跡してコードレビューを実行するには、この方法を使用します。
すべてを含めるようにメインプロダクションプロジェクトを設定します(プロジェクトを右クリック... Force.com ...プロジェクトのプロパティ。環境設定ダイアログでForce.comを展開してプロジェクトの内容を選択します。Add/Removeを押してすべてを追加してください)。私はIDEからのプロダクション変更をこのようにして展開していません。そうすることは良い考えではないかもしれません。しかし、私は頂点クラス、トリガー、およびページを後退させます。各保存の往復は遅いです! ソース管理システムを使用して変更を文書化し、バージョンを比較します。
サンドボックスからプロダクションへの配備:私はUI配備ツールの使用を断念しました。彼らは単純なもののために働くが、私はそれがより複雑な変更(新しいオブジェクト、タブ、アプリケーション、トリガー、クラス、ページ、レイアウト)を処理することができないことがわかった。私は変更をサンドボックスから作品に移行します。 3チームの場合、最終的な変更を展開する中央チームが必要な場合があります。
システムを分類するには、レコードタイプを含む多くの方法があります。これらは、ハードコードされたSF Idを含むか、文字列を使用してルックアップを実行するコードを必要とします。どちらの場合も、コード全体にこれらの文字列またはIDを配布する必要はありません。あなたがリファクタリングする必要があるときの悪夢を考えてください。代わりに、Globalsクラスを作成し、すべてのハードコーディングされた名前とIDをここに入れます。少なくとも、より合理的な検索と置換を行うことができます。
私はSFが大好きです。いくつかのことは非常に簡単です。しかし、いくつかの開発作業には非常に時間がかかるようです。幸運
私たちが始めている方向を検証するために提案するもの。私はオブジェクトごとに1つのトリガーのアイデアが好きです。非常に特殊なトリガーを作成していましたが、オブジェクト/ドメインごとに1つのトリガーに移動しました(つまり、{OurDepartment} Account_beforeUpdate)。私はあなたの提案がより好きです。 –
複数のトリガーを持つオブジェクトがありますが、DML操作タイプごとに1つずつあります。つまり、例としてContact_BeforeInsert.triggerとContact_AfterUpsertUpdateがあります。 'trigger.isUpdate'のようなものを使って、トリガ内の操作を区別することができます。 –