2

我正在开发一个基于 Spring MVC 的 Web 应用程序。我们有各种屏幕用于添加不同的域组件(例如帐户详细信息、员工详细信息等)。我需要为这些域组件中的每一个实现上传功能,即上传帐户、上传员工详细信息等,这些将在 csv 文件中提供(打开文件、解析其内容、验证然后持久化)。

我的问题是,我应该考虑哪种设计模式来实现这样的要求,以便上传(打开文件、解析其内容、验证然后持久化)功能变得通用。我正在考虑使用模板设计模式。模板模式

任何建议,指针,链接将不胜感激。

4

3 回答 3

5

我不会回答你的问题。说了这么多,我来回答你的问题!;-)

我认为设计模式不应该成为这个开发阶段的问题。尽管它们很棒(我一直在使用它们),但它们不应该是您的主要关注点。

我的建议是让您实现第一个上传功能,然后是第二个,然后观察他们是否拥有相同的内容并创建一个“母亲”类。每当你来到第三节课时,重复概括的过程。泛型类会在这个过程中自然而然地出现。

有时,我相信人们倾向于过度设计和过度计划。我的公司很好: 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

您可以使用抽象工厂模式。

有一个上传接口,然后为每个领域对象实现它,并根据传入的类在工厂中构造它。

例如

上传者 uploader = 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 回答