0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[OutSystems]Web Developer Specialization (ODC)のサンプル問題について解説 1/2 (#1-#5)

Last updated at Posted at 2024-12-27

OutSystemsの新試験、Web Developer Specialization (ODC) は、ODCで行うWebアプリケーション開発について、Associateよりも踏み込んだ知識を確認する。

受験の前提がAssociate Developer (ODC) 。

Architecture Specializationと共にODCを対象とするProfessional認定条件の1つ。この2つに、2024/12時点では未発表の残り1試験を合格すると、Professional Web Developerとして認定される。

以前リリースされた試験では、サンプル問題はzipファイルの中にpdfファイルとして含まれていたが、この試験では、オンラインのコース上の1ページとして配置されている。
https://learn.outsystems.com/training/journeys/web-developer-exam-2993/sample-exam/odc/2990

全部で10問で、この記事では1問目-5問目が対象。
6問目-10問目

サンプル問題は英語しかなかったので、この解説は英語版を見ながら書いている。

選択肢には番号が振られていないので、こちらで上から順に1,2,3,4をふっている。

1 Exception/Transaction Handling

Entityを操作(レコード作成)するメインの処理実行後に、Service Actionで監査ログを記録している。そのService Actionは、メイン処理で作成したレコードの存在チェックをし、見つからなければ例外をRaiseする。

問題文の設定では、Service Action実行時に例外が発生しているが、この時トランザクションはどうなるだろうか? という問題。

まず、「メイン処理とService Actionは別トランザクションになる」点に注意。これはService ActionがHTTPS経由で呼び出される処理であるため、同じ RDBトランザクション管理下にないため。

また、メイン処理ではレコード作成が行われているが、問題文に添付されたActionフローにはCommitTransaction呼び出しが配置されていない。この場合、メイン処理のEndに到達した段階でコミットされる。よって、「Service Action実行時点では、メイン処理はコミットされていない」。

もちろん、Service Action中で例外が発生しているので、その処理はコミットされていない。

まとめると、メイン処理から呼ばれるTransferFundsも、Service Action AuditLogTransactionもコミットされない。この説明に合致する選択肢2が正解。

2 Best Practices - Data

Entityの参照属性が持つDelete Ruleについての問題。
問題文の画像を見ると、ProductImage EntityでProduct Entityを参照するProductId属性のDelete Rule=Protect。つまり、あるProductレコードを参照するProductImageレコードが1つでもあると、そのProductレコードは削除できない。

この説明に合致する選択肢3が正解。

ちなみに、Productレコードと一緒に参照するProductImageレコードが消えるとする選択肢1はDeleteの場合の説明。

3 Asynchronous Processes

各選択肢を見ていく。

  1. ×:OutSystems system requirements for ODC > Platform Limits - ODC Documentationによると、1 Appあたりの同時Events数上限は10でなく100
  2. ○:マイクロサービス(App)間で非同期・疎う結合にやり取りをするのはEventの重要な性質
  3. ×:Publicであるかどうかに関わらず、Eventは定義したApp自体もSubscribe可能
  4. ×:エラー時には間隔を広げながら10回までリトライする

4 Work in Teams

複数の開発者が同じAppの同じ場所に開発を行った場合、後から行ったPublishで何が起きるか、という問題。
先に行ったPublishと競合が発生すると、競合が検知され、その内容を確認してマージを行うダイアログが表示される。マージを行って競合を解決するとPublishを実施できる。

よって、Publishするには競合の解決が必要、とする選択肢2が正解。

5 Best Practices - Data

バイナリデータを持つEntityをどう設計するか、という問題。
OutSystems 11の頃からのベストプラクティスがあり、当時からよく問題が出題されていた。
今検索してみると、ODC向けにもベストプラクティスが最近公開されており、同じベストプラクティスがあった。

Best practices for data management > Isolate large text and binary data in separate entities - ODC Documentation

バイナリデータや大きなText型を属性に持つEntityはパフォーマンスが劣化する。そのため、ベストプラクティスは、バイナリデータや大きなText型は別のEntityに分離する。

この問題の場合、従業員の写真であるから、親Entityのレコードと写真Entityのレコードの多純度は1:1。よって、写真EntityのIdは親EntityのIdとする。

この内容を説明している選択肢4が正解。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?