Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[OutSystems] OutSystems が誘う Null がない世界の罠

kata_junn
December 23, 2021

[OutSystems] OutSystems が誘う Null がない世界の罠

× "さそう"
〇 "いざなう"
文章版はこちら:https://qiita.com/kata_junn/items/5018b3b42c142d7e4997

kata_junn

December 23, 2021
Tweet

More Decks by kata_junn

Other Decks in Technology

Transcript

  1. Java Struts/Spring/MyBATIS 2005 2014 OutSystems Developer@3人(6か月) Developer && TL@約10人(24か月) OutSystems

    推進 2019 2020 Scrum on AWS Role:Developer TypeScript Serverless Dynamo, Lambda, S3, SQS, Kinesis, Athena Angular 認定スクラムマスター(CSM) AWS Certified DevOps Engineer - Professional OutSystems Expert Traditional Web Developer OutSystems Architecture Specialist 好き:リアル脱出ゲーム、低温調理、スパイス、モブプロ、DQW、ゼルダ 20% OutSystems OutSystems 推進 Expert Service BootCamp 講師 PoC 提案+実施 プロジェクト支援 now!! 2 片野 潤一(かたじゅん) Twitter:@kata_junn
  2. OutSystems は Null を意図的に排している ⚫ 初期値は「型に応じたデフォルト値」 ⚫ Null~という Built-in Function(?)もデフォルト値を返す

    ⚫ ex. NullIdentifier() は 0 ⚫ 理由は不明 ⚫ NullPointerException 回避(推測) ⚫ Null チェックの根絶(推測) ⚫ 宗教的な理由(推測) ⚫ 学習の容易さアピール(推測)
  3. OutSystems アプリ → 内部DB/外部DB/Consume REST ⚫ 内部 DB or 外部

    DB ⚫ SQL query で “NULL” を頑張って書けば良い ⚫ また、前提として画面からの入力値を全て Text で受ける必要がある ⚫ Built-in Validation くんの存在価値 is 何 ⚫ 外部DB ⚫ Entity の Default Value Behavior の設定でデフォルト値を Null に変換可能 ⚫ ただし、デフォルト値と Null 値の両立ができない ⚫ Consume REST ⚫ デフォルト値で送信するか、キー自体を消すかの選択が可能 ⚫ OnBeforeRequest で文字列操作(null に置換)すれば良いが精神が死ぬ ⚫ OutSystems 開発の悪いところが凝縮されている感
  4. 内部DB/外部DB/Expose REST → OutSystems アプリ ⚫ 基本的に Null は全てデフォルト値に変換されて入ってくる ⚫

    Null を送ってきたのかデフォルト値を送ってきたのか判別ができない ⚫ Expose REST の場合、undefined も判別不可 ⚫ Expose REST は介入ワンチャン ⚫ OnRequest で JSON を文字列解析すれば null や undefined のキーは判別可能 ⚫ ただ、キーがわかったところでメタプログラミングできないため、「このキーだった ら Null として扱う」のような、プロパティを文字列指定するような柔軟性の無い実 装を余儀なくされる ⚫ OutSystems 開発の(略
  5. 個人的所感 ⚫ Null がないのは「学習が簡単なように見せかけている」だけ ⚫ NullPointerException や Null-check 等の煩雑さに蓋をしている ⚫

    外部システムとの I/F で致命的になり得るユースケースが多い ⚫ 対応は不可能ではないが、スクラッチの方が素直で品質も保持しやすく本末転倒 ⚫ Null を完全排除しているのは筋が悪い ⚫ 拡張性や柔軟性、外部接続性をアピールしているのだから選択肢は欲しい ⚫ NEO でも Null は導入されないとかなんとか(噂) ⚫ 今のところ NEO への唯一の失望ポイント
  6. まとめ ⚫ OutSystems で Null を扱うのは大変難しい ⚫ AOP 等が無いので透過的に実装することができない 1つ1つの

    I/F に個別に似たような処理を実装する必要があり、人を精神的 に追い込むには十分な面倒さ ⚫ 特に連携する外部システムで OutSystems のデフォルト値と Null に明確な意味の違いを持つ場合、面倒な実装や調整が求められる ⚫ とりあえず Null の Idea に LIKE してね!!!! ⚫ https://www.outsystems.com/ideas/213/null-values/