FunctionalPolicy - cwtickle/danoniplus GitHub Wiki

| < Tips一覧 || 機能実装方針 | ブランチポリシー > |

機能実装方針 / Functional Policy

  • Dancing☆Onigiri (CW Edition)の実装方針について記述します。

機能追加方針

  1. すでに実装済みか、他の機能で代用できるかを 譜面ヘッダー仕様譜面エフェクト仕様共通設定ファイル仕様 を参照して確認すること。

    • すでにある設定の組み合わせで実現できる場合がある。
  2. 特定のキータイプにのみ適用する機能は避けること。
    機能実装時、他のキータイプに適用できないかを検討する。

    • 本ソースでは数多くのキータイプに対応している。
      固有の機能を入れてしまうと、他機能展開時に支障が出る可能性がある。
  3. 画面表示項目(ラベル)を追加する際は、他の作品の描画範囲に影響するかどうかを確認すること。
    避けられない場合は、対象のIDをプルリクエスト時に明示すること。

    • 初期ソースからある程度年数が経っており、カスタムの仕方によってはすでに利用されている領域になっている場合がある。

機能廃止方針

  1. カスタムから参照されうる関数は安易に削除しないこと。
    同一バージョン時までは保持し、次のメジャーバージョン時に danoni_legacy_function.js への移行を検討する。ただし利用用途が他に無い場合は、この限りではない。

    • カスタム関数からはdanoni_main.js及びdanoni_constants.jsに定義している最上位関数はアクセスできてしまう。
      流用性の高い関数は上記に従う。

danoni_main.jsdanoni_constants.jsの棲み分け

  1. 原則、処理系はdanoni_main.jsに記載する。
    初期設定など固定値はdanoni_constants.jsに記載する。
    過去の記載方法からの互換関数もdanoni_constants.jsに記載する。

    • danoni_main.jsCodeClimate と連動している。
      設定系をdanoni_main.jsに書いてしまうと、CodeClimateからの指摘に引っ掛かることがある。
      danoni_constants.jsは CodeClimate の対象外としており、冗長化を許容している。

コード設計方針

  1. 原則、新たなグローバル定数・変数は定義しないこと。
    共用したい場合、既存のグローバルオブジェクトのプロパティに追加することを検討する。

    • 単独変数をグローバル変数にしてしまうと、複数ファイルの読み込み時に支障が出る。
      すでに定義済みのオブジェクトのプロパティであれば、影響を抑えられる。
    • 他に参照させる必要が無い場合は、ローカル変数・定数として定義。
  2. 固有ラベル名はg_lang_lblNameObj、メッセージはg_lang_msgObjのプロパティで定義すること。

    • 言語や作品によって使い分ける可能性がある。
  3. 処理の共通化、共用化を検討すること。

    • 汎用的な関数はある程度準備しているため、それに倣った方が保守性は上がる。
  4. プレイ画面で発生する煩雑な処理は、ロード処理内で対処できるか検討すること。

    • プレイ画面中は1フレーム毎に描画等の処理を行っているため、元の処理量が多い。事前に処理できる部分をロード処理側へ移すことで、プレイ画面で必要時にデータがすぐに取り出せるようにする。
  5. オブジェクトの深度制御(z-index)をしないこと。(下に配置するものは先に定義)

    • z-indexを使ってしまうと、オブジェクトが手前にあるか奥にあるかの判断が難しくなってしまう。各画面にはxxSpriteのようなレイヤー構造を持たせているため、基本的には表示したい位置に近いレイヤー(xxSprite)の子として定義すれば、大抵の問題は解消する。

IDの付与方針

  1. 同一画面内に同じ名前のIDを2つ以上定義しないこと。
  2. ID名は IDリファレンス を参照。大きく接頭辞が決まっており、下記のルールで命名。
接頭辞 用途
lbl 画面表示項目・ラベル
lnk 左右選択ボタン
btn 画面移動用ボタン
sc ショートカット表示用ラベル
graph グラフ描画用Canvas
data 明細データの表示

主な変数の定義方針

  1. グローバルオブジェクトは原則constで定義し、名前は g_XXXObj の形式で定義する。

主な関数の定義方針

  1. 画面の初期表示関数は titleInit, optionInit, resultInit など末尾にInitをつけて定義する。

| < Tips一覧 || 機能実装方針 | ブランチポリシー > |