2

私の質問を説明するのに役立つ次のコンストラクターURL(図 1 ) があります。このメソッドisValidUrlは、オプションのパラメーターを取りますoptUrl。デフォルトでは、インスタンス プロパティurlが使用されます。ただし、引数が設定されている場合は、引数によってオーバーライドされoptUrlます。

これが優れたソフトウェア エンジニアリングの実践であるかどうかはわかりません。

図1:

function Url(url) {

    this.url = url;

    this.isValidUrl = function (optUrl) {
        var url;

        // Questionable pattern
        if (typeof(optUrl) === 'undefined') {
            url = this.url;
        } else {
            url = optUrl;
        }

        // 1. call: 'http://www.example.com'
        // 2. call: 'http://www.exampl2.com'
        console.log(url); 

        return url !== ''; // Very simple check
    }
}

var u = new Url('http://www.example.com');
console.log(u.isValidUrl()); // true
console.log(u.isValidUrl('http://www.exampl2.com')); // true
4

1 に答える 1

2

まず、isValid を UrlHelper などの静的ヘルパー メソッドにします。このメソッドに Url クラスだけが必要な場合は、別のクラスを用意せずにヘルパーを直接呼び出します。

何かのようなもの:

function Url(){

}

Url.isValidUrl(url){
 if(!url) return false;

  return true; //add here code to check if url is valid 
}

追加のロジックのために Url クラスが必要な場合は、ヘルパー クラスからメソッドを呼び出すことができます。

インスタンス プロパティを引数でオーバーライドするのが良い方法であるかどうかという質問に関する限り、私の意見はノーです。上記の例では、クラスをオブジェクト (インスタンスの作成、それらのインスタンスでのメソッドの呼び出し) として、および特定のインスタンスとは関係のないユーティリティ クラス (少なくとも上記の例では) として使用しています。

于 2013-07-02T11:59:40.760 に答える