0

アプリケーションにデータベース層があります。私の前面には、ユーザーに表示するグラフィックがあります。データベースから必要なデータを取得し、そのデータを Web サイトに表示します。データベースから生データを取得すると、使用する API (ハイチャートなど) のデータを処理します。私はそのようなものを設計しました:

ChartDTO

すべてのチャート実装のメイン インターフェイス。次のようなメソッドがあります。

public Object getTotalUsersPieChart(DatabaseData databaseData);

HighChartsDTOImpl

ChartDTO の実装。そのすべてのメソッドは、オブジェクト型変数を返します。

クライアント側では、クライアント側での前処理を必要とせずに、サーバー側からのデータをグラフィックに直接フィードします。

私の質問は次のとおりです。 ここに設計上の誤りがあり、おそらくそれは DTO 設計ではないことを知っています (少なくとも私のアーキテクチャはそう言っています)。

そのシナリオをどのように設計できますか?

4

2 に答える 2

1

ある種のファクトリパターンを使用することをお勧めします。
作成するグラフの種類に関する「ヒント」をクライアントに渡し、
ChartFactoryに作成してもらう必要があります。
コードスニペットは次のとおりです。

public class ChartFactory {
    
    public Chart createChart(ChartType, ChartParameters params) {
       Chart chart = ... //Creates a chart object based on type and ChartParameters
       return chart;
    }
}

このファクトリをシングルトンにすることができる
ので、ファクトリの初期化を行う必要がある場合は、それを1回だけ行います。ChartParametersは、特定のチャートタイプのオブジェクトを作成するためのパラメーターを保持する必要があります。
これは、キーと値の単純なマップにすることができます。つまり、次のようになります。

public class ChartParameters {
    private Map<String,Object> params = new HashMap<String,Object>();

    public Object getParam(String paramName) {
        return params.get(paramName);
    }

    //Add here more methods... maybe a CTOR that takes a map of params,
    //And a method to add a parameter
}

または、これは別の実装を持つことができます。Chartのサブクラスごとにパラメータークラスを設定することもできます(これらのパラメータークラスはすべてChartParametersを拡張します)が、
これにより、継承ツリーで何らかの重複が発生する可能性があります。

結論として、
このようにクライアントに送信する必要があるのは、チャートタイプとパラメーターだけであり、適切なチャートオブジェクトをインスタンス化します。

于 2012-09-17T07:46:55.610 に答える
0

あなたはファクターパターン、あるいは抽象的なファクトリパターンでさえあったように聞こえます。このファクトリを使用すると、必要なルックアンドフィール用に構成された適切なコンポーネントを生成できます。

于 2012-09-17T07:47:10.743 に答える