繁体   English   中英

实现上传功能的最佳设计模式

[英]Best design pattern to implement upload feature

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

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

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

我不会回答你的问题。 就是说,让我回答您的问题! ;-)

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

我的建议是,您先实现第一个上载功能,然后再执行第二个上载功能,然后观看它们是否具有相同的功能并创建一个“母亲”类。 每当您上第三堂课时,请重复概括过程。 泛型类将在此过程中自然地出现。

有时,我相信人们倾向于过度设计和计划。 我在不错的公司中: 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 ?很老,但是刺激性很大!)。

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

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

例如

Uploader uploader = UploadFactory.getInstance(Employee.class);

策略模式对上传者来说很有用。 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM