tyoshikawa1106のブログ

- Force.com Developer Blog -

Apexについての書籍「Advanced Apex Programming – 2nd edition」を読んでみました

Apexについての書籍「Advanced Apex Programming」のKindle版を読んでみました。

f:id:tyoshikawa1106:20140309215815p:plain

Advanced Apex Programming – 2nd edition


英語の書籍でGoogle翻訳を利用しながら読んだのですが、Part Ⅰの03 - Limits (上限)のあたり力尽きたので、大体こんな内容が書いてあるのかなという感じで読んでました。


著者はDan Applemanという方でMicrosoftプラットフォーム上でのソフトウェア開発者でFull Circle CRMという会社を設立した方とのことです。Apex開発は6年前からと記載がありました。(2013年10月の書籍です)

内容

書籍の内容は次のようになっていました。

Table of Contents (目次)
  • Introduction (はじめに)
  • Sample Code (サンプルコード)
  • Part Ⅰ - Thinking in Apex (Apexで考える)
    • 01 - The Execution Context (実行コンテキスト)
    • 02 - Static Variables (静的変数)
    • 03 - Limits (上限)
    • 04 - Bulk Patterns (バルクパターン)
  • Part Ⅱ- Application Architecture and Patterns (アプリケーションアーキテクチャとパターン)
    • 05 - Fun With Collections (楽しいコレクション)
    • 06 - Triggers (トリガー)
    • 07 - Going Asynchronous (非同期処理)
    • 08 - Concurrently (同時処理)
  • Part Ⅲ - Testing, Debugging and Deployment (テスト、デバッグおよびデプロイ)
    • 09 - Debugging and Diagnostics (デバッグと診断)
    • 10 - Unit Tests (単体テスト)
    • 11- Designing for Packages (パッケージの設計)
  • Conclusion (結論)
  • Acknowledgements (謝辞)
  • Full Circle - CRM (フルサークル - CRM)
  • Also by the Author (また著者によって)

印象に残った内容

もしかすると訳し方に間違いがあったかもしれませんが次の内容が印象に残りました。

Apex may look like Java, but because of fundamental platform differences, it requires a different set of design patterns and different approaches for architecting applications.

Apexでは、Javaのように見えるかもしれませんが、根本的な原因はプラットフォームの違いのために、それは、デザインパターンとアーキテアプリケーションごとに異なる​​アプローチの異なるセットが必要です。・・Javaと似ている言語ですがガバナ制限があるのでJavaのデザインパターンはそのまま当てはまらないです。という内容だと思います。

SELECT ID, SolutionNote, SolutionSpanish__c
from Solution
where Last ModifiedDate > : DateTime.Now().addHours(-24)
AND TranslationPending__c = true
LIMIT :Limits.getLimitCallouts()
(Kindle 位置No.972)

上記クエリのLimits.getLimitCallouts()が印象に残りました。

Limits Classは開発中にSystem.Debugで確認するために使うぐらいだと思っていたので、こういう使い方もあるということを知れてよかったです。

ガバナ制限ギリギリの処理を作ることはあまりありませんが、どうしても制限近くまで使ってしまう場合はLimits Classを判定文に使って防止するようにしようと思いました。

try {
update op;
} catch (DmlException dex) {
if (dex.getDmlType(0) == StatusCode.UNABLE_TO_LOCK_LOW) {
continue;
}
}
(Kindle 位置No.1325)

DmlExceptionでのこういう使い方は試したことなかったので勉強になりました。


書籍内のサンプルコードはパッケージ化されていて自分のDeveloper環境にインストールして確認できるようになっています。

f:id:tyoshikawa1106:20140309232216p:plain


という感じでいろいろ参考になる内容だったと思います。