このJavascriptコードをリファクタリングするのを手伝ってください。スケジュールされたメッセージ送信には大きな形式があります(送信日、繰り返しタイプ、日付/数量で終了、クレジットシステム-実行時にスケジュールされた送信プランの総コストをカウントする必要があります)。このフォームのJavascriptバリデーターを書いています。
検証アルゴリズムがあります1)送信日時が過去の瞬間にないかどうかを確認します2)「日付で終了」フィールド時間が最初の送信日時よりも大きいかどうかを確認します3)スケジュール計画の総コストを検証します
(約6つのステップがありますが、ここに3つだけ記述します-問題を把握するのに十分だと思います)
「スケジュールされたプランを保存」ボタンには、「クリック」イベントのJavaScriptリスナーがあります。このリスナーはこの関数を呼び出します。
ScheduledValidator.checkIfSendDateTimeIsNotInPast(params, form);
これがその宣言です:
ScheduledValidator.checkIfSendDateTimeIsNotInPast = function (params, form) {
var conn = new Ext.data.Connection();
conn.request({
url: CONST.BASE_URL + 'url',
params: params,
callback: function (options, success, response) {
response = Ext.util.JSON.decode(response.responseText);
if (response.success == false) {
// display error messages
} else {
ScheduledValidator.checkIfEndDateIsGreaterThatSendDate(params, form);
}
}
});
}
後でリクエストをネストしました:
ScheduledValidator.checkIfEndDateIsGreaterThatSendDate = function (params, form) {
var conn = new Ext.data.Connection();
conn.request({
url: CONST.BASE_URL + 'url2',
params: params,
messageForm: form,
callback: function (options, success, response) {
response = Ext.util.JSON.decode(response.responseText);
if (response.success == false) {
// display error messages
} else {
ScheduledValidator.validateTotalCost(params, form);
}
}
});
}
そしてもう1つここに:
ScheduledValidator.validateTotalCost = function (params, form) {
...
私はそのアプローチが好きではありません。アルゴリズムを一目で理解するのは非常に難しいからです。たぶん、単一のフォームの検証のために多くの(約6)ネストされたAJAXクエリを作成するのは良くありませんか?たぶんそれは単一のリクエストにマージされるべきであり、その後、サーバー側ですべての検証アクティビティを実行しますか?このコードをどのようにリファクタリングする必要がありますか?