2

私たちは、最初はユーザー コードなしで実行するように設計された一種のモバイル アプリケーション キットを開発しました。これはモバイル アプリ スタジオの一部であり、Javascript を使用して「ユーザー オーバーライド」を有効にしたいと考えています。

現在、次の 3 つのアイデアを試しています。

  1. イベントパターン
  2. フックのパターン
  3. 「モンキーパッチ」(既存機能のプロトタイプ上書き)

すべての方法には長所と短所があります。例えば、

Dojo のサブスクライブとパブリッシュで現在実装されているイベント パターン

プロはいいです:コアコードのクリーンで最小限の追加コード。問題: コードの実行は既に行われており、ユーザーはコアで何が起こったのかを通知するだけです。カスタマイズを適用するには、変更を元に戻し、独自のコードをロールアウトする必要があります。コアは、もう存在しないものに後で依存する可能性があるため、これはどういうわけか面倒で信頼性がありません。

フックパターン。「デリゲート」と同様に実装されているとしましょう

つまり、コア コードはデフォルトでコンテンツのピースが共有可能かどうかを決定します。

xapp.utils.getModuleViewCreationParameters = function (content, viewManager, selected,type,heading)
{
    var isShareable = false;

    if(type!=null)
    {
       isShareable=xapp.utils.isSharable(type);
    }

ユーザーがこの動作をオーバーライドできるようにするには、デフォルトのままにしておくには、次のように拡張する必要があります。

xapp.utils.getModuleViewCreationParameters = function (content, viewManager, selected,type,heading)
{
    var isShareable = false;

    if(type!=null)
    {
       isShareable=xapp.utils.isSharable(type);
    }

    if(ctx && ctx.getShareDelegate && ctx.getShareDelegate() && ctx.getShareDelegate().isSharable){
        isShareable=ctx.getShareDelegate().isSharable(type);
    }

現在、「ctx.getShareDelegate()」は、デフォルトの動作をオーバーライドするために使用できるユーザーの実際のクラスを返します。

長所 : まだクリーンであり、コアの流れをより直接的に変更します。短所 : 一種のスパゲッティ コードにつながる可能性がありますが、これについてはよくわかりません。

そして私の最後のアイデア:プロトタイプの修正別名モンキーパッチ

長所 : 確かにすべてのコア オーバーライドを許可しますが、短所 : ユーザー コードは、コア コードの関数シグネチャが同じままであるなど、あまりにも多くの仮定に依存しています。

さて、やはり私のお気に入りは「フックまたはデリゲート パターン」です。

この問題の代替案や提案をお勧めできますか? または、ユーザーがカスタマイズ可能な JS API を設計するには?

4

0 に答える 0