我正在开发一个基于spring MVC的Web应用程序。我们有各种屏幕用于添加不同的域组件(例如,帐户详细信息,员工详细信息等)。我需要为每个域组件实现上传功能,即上传帐户,上传员工详细信息等,这些信息将在csv文件中提供(打开文件,解析其内容,验证然后保留)。
我的问题是,我应该考虑采用哪种设计模式来实现这样的要求,以便上传(打开文件,解析其内容,验证然后保留)功能变得通用。我在考虑使用模板设计模式。 Template Pattern
任何建议,指示,链接都将受到高度赞赏。
答案 0 :(得分:4)
我不会回答你的问题。那就是说,让我回答你的问题! ; - )
我认为设计模式不应该成为这个发展阶段的关注点。尽管它们很棒(而且我一直使用它们),但它们不应该是你最关心的问题。
我的建议是让你实现第一个上传功能,然后是第二个,然后观察他们拥有的相同内容并创建一个"母亲"类。每当你来到第三课时,重复一般化的过程。通用类将在此过程中自然而然。
有时,我认为人们倾向于过度工程和过度计划。我很好: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了吗?它已经老了但很棒!)。
答案 1 :(得分:0)
您可以使用抽象工厂模式。
有一个上传界面,然后为每个域对象实现它,并根据传入的类在工厂中构建它。
E.g。
Uploader uploader = UploadFactory.getInstance(Employee.class);
答案 2 :(得分:0)
strategy pattern我在这里对上传者有用。 Uploader类是一种容器/管理器类,它只包含一个解析属性和一个persistance属性。这两个属性都将被定义为抽象基类,并且具有多个实现。即使你说它将永远是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