2

spring MVC に基づく Web アプリケーションに取り組んでいます。さまざまなドメイン コンポーネント (アカウントの詳細、従業員の詳細など) を追加するためのさまざまな画面があります。これらのドメイン コンポーネントごとにアップロード機能を実装する必要があります。つまり、アカウントのアップロード、従業員の詳細のアップロードなどを csv ファイルで提供します (ファイルを開き、その内容を解析し、検証してから永続化します)。

私の質問は、アップロード (ファイルを開き、その内容を解析し、検証してから永続化する) 機能が汎用になるように、そのような要件を実装するためにどの設計パターンを検討する必要があるかということです。テンプレートのデザインパターンを使おうと考えていました。テンプレート パターン

提案、ポインタ、リンクは大歓迎です。

4

3 に答える 3

5

私はあなたの質問に答えるつもりはありません。つまり、あなたの質問に答えさせてください!;-)

この開発段階では、デザインパターンは気にするべきではないと思います。それらの偉大さにもかかわらず (そして私は常にそれらを使用しています)、それらはあなたの主な関心事ではありません。

私の提案は、最初のアップロード機能を実装し、次に 2 番目の機能を実装してから、それらが等しいものを監視し、「マザー」クラスを作成することです。3 番目のクラスに来るたびに、一般化のプロセスを繰り返します。ジェネリック クラスは、このプロセスで自然に発生します。

時々、人はオーバーエンジニアリングやオーバープランする傾向があると私は信じています。私は良い仲間です: http://www.joelonsoftware.com/items/2009/09/23.html . 明らかに、私は設計ソフトウェアがないことを主張しているわけではありません - それは決してうまくいきません。それにもかかわらず、いくつかのものを実装した後に類似点を探し、それらをリファクタリングすると、より良い結果が得られる場合があります (既にhttp://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672/ref=sr_1_1を読んでいますか? ?ie=UTF8&qid=1337348138&sr=8-1 ? 古いけど素晴らしい!)。

于 2012-05-18T13:36:20.683 に答える
0

Abstract Factory パターンを使用できます。

アップロード インターフェースを用意し、ドメイン オブジェクトごとにそれを実装し、渡されたクラスに基づいてファクトリで構築します。

例えば

アップローダー アップローダー = UploadFactory.getInstance(Employee.class);

于 2012-05-18T13:37:35.517 に答える
0

ここで、アップローダーにとって戦略パターンが役立つ可能性があります。Uploader クラスは、解析属性と永続化属性を単純に含む一種のコンテナ/マネージャ クラスになります。これらの属性はどちらも抽象基本クラスとして定義され、複数の実装を持つことになります。常に csv と oracle になるとあなたは言いますが、このアプローチは将来的にも保証され、永続化コードから解析/検証を分離することにもなります。

次に例を示します。

class Uploader
{
private:
    Parser parser_;
    Persistence persistence_;

    void upload() {
        parser_.read();
        parser_.parse();
        parser_.validate();
        persistence_.persist(parser_.getData());
    }

public:
    void setParser(Parser parser) {parser_ = parser;}
    void setPersister(Persistence persistence) {persistence_ = persistence;}
};

Class Parser
{
    abstract void read();
    abstract void parse();
    abstract void validate();
    abstract String getData();
};

class Persistence
{
    abstract persist(String data);
};

class CsvParser : public Parser
{
    // implement everything here
};

// more Parser implementations as needed

class DbPersistence : public Persistence
{
    // implement everything here
};

class NwPersistence : public Persistence
{
    // implement everything here
};

// more Persistence implementations as needed
于 2012-05-18T13:53:50.313 に答える