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