簡體   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