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

Java 实现上传功能的最佳设计模式,java,design-patterns,Java,Design Patterns,我正在开发一个基于SpringMVC的web应用程序。我们有各种屏幕可用于添加不同的域组件(例如帐户详细信息、员工详细信息等)。我需要为每个域组件实现上传功能,即上传账户、上传员工详细信息等,这些信息将在csv文件中提供(打开文件,解析其内容,验证,然后保存) 我的问题是,我应该考虑哪种设计模式来实现这样的要求,以便上传(打开文件,解析其内容,验证,然后继续)特征变得通用。我在考虑使用模板设计模式 如果您有任何建议、指点和链接,我们将不胜感激。我不会回答您的问题。也就是说,让我回答你的问题!;-

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

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


如果您有任何建议、指点和链接,我们将不胜感激。

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

我认为在这个发展阶段,设计模式不应该成为一个关注点。尽管它们很伟大(我一直在使用它们),但它们不应该是你最关心的

我的建议是,你先实现第一个上传功能,然后是第二个,然后观察他们拥有什么是平等的,并创建一个“母亲”类。每当你上第三节课时,重复概括的过程。在这个过程中,泛型类将自然出现


有时,我认为人们往往会过度设计和计划。我有好朋友:。很明显,我并不提倡没有设计软件——它永远不会工作得很好。尽管如此,在一些东西实现后寻找相似之处并重构它们可能会获得更好的结果(你已经读过了吗?它很旧,但仍然很好!)。

你可以使用抽象工厂模式

拥有一个上载接口,然后为每个域对象实现它,并在工厂中基于传入的类构造它

例如

Uploader Uploader=UploadFactory.getInstance(Employee.class)

A my在这里对上传程序很有用。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

当你说“上传”时,你是指打开一个csv文件,解析内容,并保存结果条目吗?你是如何考虑使用模板模式的?还有,它是否总是csv?是否会有多种持久性类型:DB、NW等?它将始终是一个CSV文件,持久性类型始终是oracle数据库。我想在基类(abstract)中有一个模板方法,它将调用read、validate和persist方法,这些方法将是抽象的,并将由子类@Brady实现