たとえば、DataObjectタイプのJsonパーサークラスを次のように使用します。
class JsonDataParser{
public DataObject parseData(String data){
// Parse data
return dataObject;
}
}
今、私はJsonを取得するためにサーバーに接続する必要があるので、これがあります:
class DataRetriever{
public String getData(){
// Get data from server using URL
return jsonDataString;
}
}
問題は、メインクラスで次のようにコーディングする方が良いということです(メソッド-A)
DataObject d = new JsonDataParser().parseData(new DataRetriever().getData());
または、DataRetrieverを変更して、次のようにJson解析をinside(Method-B)に含めます。
class DataRetriever{
public DataObject getData(){
// Get data from server using URL
return new JsonDataParser().parseData(jsonDataString);
}
}
結果はどちらの場合も同じですが、概念的には、Method-AまたはMethod-Bを使用してコーディングする方がよいでしょうか。
私は通常、メソッドAに従うコントローラークラスを作成しますが、これが効率的かどうかはわかりません。
編集:
実際、私はJsonを解析するときにGenericTypeとInterfaceを使用することを考えています。だから私は以下を用意しました:
public interface IJsonParser<T> {
public T parseJSON(String jsonString);
public T parseJSON(JSONObject jsonObject);
}
次に、次のようにDataRetrieverのコンストラクターに追加します。
class DataRetriever<T>{
private IJsonParser<T> parser;
public DataRetriever(IJsonParser<T> parser){
this.parser = parser;
}
public DataObject getData(){
// Get data from server using URL
return new JsonDataParser().parseData(jsonDataString);
}
}
最終的には、複数のタイプのパーサーを許可して、毎回独自のパーサーを提供して柔軟性を追加できるようにすることを考えていました。これはある種の不正行為と見なされますか?