2011-10-05 26 views
0

我正在規劃一些簡單的應用程序,並希望遵循單一責任和封裝原則。簡單對象 - 單責任和封裝原則的正確設計

主力球員有:

的API - 這暴露能夠保存用戶:

class API{ 
    .... 
    public void saveUser(id, name, address){ 
     //save the received user in the DB 
    } 
    .... 
} 

的DBConnector類 - 這暴露保存用戶數據的能力進入數據庫。

用戶類別 - 表示用戶。

在舊的方式saveUser方法看起來像:

IDBConnector connector = DBConnectorFactory.getDBConnector(); 
User user = new User(id, name, address); 
connector.saveUser(user); 

通過新的原則似乎是一個正確的方法是:

User user = new User(id, name, address, DBConnectorFactory.getDBConnector()); 
user.save(); 

這是正確的嗎?

用戶應該處理DB保存嗎?

如果不是,您能否提供更好的方法?

回答

0

如果你的類都包含數據(用戶),並知道如何堅持,那麼它是做更多的一件事。換一種方式。它有更多的理由來改變。如果數據庫的變化,用戶將不得不改變(和所有其他持久化的業務對象)

一個解決方案:

public interface Persister { 
    void persist(User user); 
} 

您的應用程序,然後將實現該接口爲你勾勒出的數據庫的一部分。 如果用戶在應用程序部分完成創建。這篇文章也包含界面。 這樣你的主應用程序就與持久層分離了。它對此一無所知。相反,您的數據庫「插入」。

(我知道我們的界面非常愚蠢的命名,但主要想法是分離關注點,履行單一責任)