Professional Web Developer (OutSystems 11)のサンプル問題についてメモ 2/3(#6-#10)

最近、Professional Web Developer (OutSystems 11)のサンプル問題が15問公開されました。
（たぶんOutSystemsの試験では初めて）

折角なので、各問題をチェックしてどの資料を確認すれば回答できるのかコメントしていきます。
実際に自分で解いてみると、Professional試験で要求されている知識のレベルがわかると思います。

この記事では、6問目-10問目までについて。

[1問目-5問目](https://qiita.com/jyunji_watanabe/items/2dba13380f3f7401201e)
[11問目-15問目](https://qiita.com/jyunji_watanabe/items/93720bcb9df704ea599e)

試験問題は、
https://www.outsystems.com/learn/certifications/
の、「Professional Web Developer (OutSystems 11)」に項目のリンク「Exam Details (.pdf)」でダウンロードできる資料から。

# 6 Inline CSS
JavaScriptと同じ理由で、ExpressionにEscape Content=NoにしてCSSを書くのは推奨されていません。
[ExpressionへのJavaScript記述は注意が必要](https://qiita.com/jyunji_watanabe/items/2dba13380f3f7401201e#expression%E3%81%B8%E3%81%AEjavascript%E8%A8%98%E8%BF%B0%E3%81%AF%E6%B3%A8%E6%84%8F%E3%81%8C%E5%BF%85%E8%A6%81)

# 7 参照されている側のモジュールをデバッグする方法
DirectoryモジュールからDirectory_CS(*)モジュールのServer Actionを参照しているとき、このServer ActionにBreak Pointを配置してデバッグするにはどうすればいいのか？
このときは、Server ActionにBreak Pointを配置した上で、Service StudioでDebuggerを起動する際に、Entry ModuleとしてDirectoryモジュールを選択します。
![qProfessionalSample2_1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/08e9fd3a-ae2d-a678-9c28-af57b62d4a17.png)
その上で、Directoryモジュールを実行してDirectory_CSのServer Actionを呼び出す操作をすればデバッグできます。

プロジェクトで何回か聞かれたので、なれない人は引っかかりやすいポイントなのでしょう。

(*)_CSとついているのはCore Serviceのモジュールの命名規則ですね。
Core Serviceのモジュールには業務ロジックを提供するサービスなどを配置します。
4 Layer Architectureの動画などを見ると、モジュール設計方法と命名規則の説明があります。

# 8 モジュール間参照のルールと違反の解消方法
この問題はOutSystemsにおけるソフトウェアアーキテクチャ設計方法である4 Layer Architectureが前提知識として必要です。
この設計方法では、独立性が高く再利用性が高いモジュール構成を実現するために、Foundation, Core, End User, Orchestrationの4つの階層に分けます。

## モジュール間参照のルール
4つの階層に配置して設計したモジュール間の関係は、以下3種類のルールに反してはいけません。

- 上方参照の禁止（上のレイヤの要素にたいして参照してはいけません）
- End UserとOrchestractionレイヤー（つまり上2つのレイヤー）のモジュールは、横（同じレベルの別モジュール）参照禁止
- CoreとFoundationレイヤー（つまり下2つのレイヤー）のモジュール間の循環参照禁止（例えば、CoreのAモジュールがFoundationのBモジュールを参照し、BがFoundationレイヤーのCを、更にCがAを参照するような場合）

英語しか見つからないのですが以下のページに記述があります。
[Validating your application architecture](https://success.outsystems.com/Support/Enterprise_Customers/Maintenance_and_Operations/Designing_the_architecture_of_your_OutSystems_applications/03_Validating_your_application_architecture)

## モジュール間参照違反の解消手順
新規開発時にルールを守りきれなかったり、追加開発時にルール違反になることもあります。
そういう場合の解消順序も決まっています。影響範囲の大きい順序になっています。

1. Orchestrationレイヤーのモジュールへの上方/横参照
2. End Userレイヤーのモジュールへの上方/横参照
3. Coreモジュール間の循環参照
4. FoundationレイヤーからCoreモジュールへの上方参照
5. Foundationレイヤー間の循環参照

以下の動画に説明があります。動画は英語ですが、日本語字幕をつけられます（歯車アイコン⇨Subtitles/CC⇨Japanese）。
[アプリケーションのリファクタリング](https://www.outsystems.com/ja-jp/learn/lesson/1229/refactoring-an-application)

# 9 Service Action、参照の強弱
OutSystemsバージョン11で導入された参照の強弱の問題。
Service Actionへの参照は弱い参照です。
弱い参照の場合、参照されているモジュールへの変更が「インターフェイスへの変更を伴わない、実装のみの変更」である場合、参照元のモジュールの再パブリッシュが不要です。

このあたりは、以前Qiitaに書きました。
[強い依存関係と弱い依存関係](https://qiita.com/jyunji_watanabe/items/f19948379d1494b5aee8#%E5%BC%B7%E3%81%84%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%81%A8%E5%BC%B1%E3%81%84%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82)

# 10 4 Layer ArchitectureのFoundationレイヤー
上でも出てきましたが、OutSystemsでモジュール構成を設計する際に推奨されている4 Layer  Architectureの最下層レイヤーがFoundationです。

以前の資料で勉強したことがある方は注意してください。かつては、Libraryレイヤーと呼ばれていました。

このレイヤーには業務固有ロジックを「含まない」再利用性が高い部品を含めます。OutSystems UIにあるようなUI Pattern、外部システムへのコネクタ（例：JIRAのREST APIのConsume）、C#によるExtensionなどがあげられます。

また、8の項目でも書いたように4 Layer Architectureにおいて上方参照は禁止です。