我在尋找特定的設計模式。另一個類中的方法的設計模式
例如,我有一個文章類,clsArticle。該類包含成員變量,如Id,標題,作者,文章等。想象一下,我想顯示列表中的所有文章。所以我必須創建一個方法getAllArticles()。由於clsArticle不負責獲取所有文章,我必須將此方法放在另一個類中,clsArticleFact(其中Fact代表工廠)。
有人知道如何調用這種模式嗎?這是一種設計模式嗎?
我在尋找特定的設計模式。另一個類中的方法的設計模式
例如,我有一個文章類,clsArticle。該類包含成員變量,如Id,標題,作者,文章等。想象一下,我想顯示列表中的所有文章。所以我必須創建一個方法getAllArticles()。由於clsArticle不負責獲取所有文章,我必須將此方法放在另一個類中,clsArticleFact(其中Fact代表工廠)。
有人知道如何調用這種模式嗎?這是一種設計模式嗎?
Yeap。這是正確的。
它可以是AbstractFactory或DataAccessObject。
第一種是當你想讓實現返回不同體裁的文章
例如假設您擁有的物品與平臺根據不同行爲的條件。
ArticleFactory.getAll(): Article[]
會在每個平臺返回正確的列表。
的IMPL可能是:
WindowsArticleFactory
或
OSXArticleFactory
前者可用於抽象的,其中物品從檢索到的地方:
你可能有
ArticleDao.getAll(): Article[]
個實現:
XmlArticleDao // Return a list of articles from an XML
或
DatabaseArticleDao // return the list from the database.
在這裏點是解耦從使用創建(GETALL())(文章)
如果你的應用是足夠的,你簡單可以使用factoryMethod來代替。
class Article {
static Article[] getAll() {
// do whatever is neede here...
}
}
我希望這有助於。
您還可以使用Rails的ActiveRecord的模型類所採取的做法
public class clsArticle
{
public static clsArticle[] findAll() { /*... */ }
// the other regular code here;
}
// client code
foreach(clsArticle obArticle in clsArticle.findAll())
{
list.add(clsArticle)
}
你描述的是不是一個真正的模式,但而是一種名爲'分離問題'的編程原則。
從你的描述,我強烈認爲,您的結構設計模式後,不是造物設計模式,因爲編碼的擔憂分配在造物共謀討論。
所以,我最好的猜測是,你以後的模式也許是外觀模式或網關。使用實體(您的clsClass)和網關是很常見的。
但是,我並不一定會鼓勵跳到使您的方法變爲靜態,但從那時起,這些在業務邏輯測試期間不會被模擬。如果業務邏輯依賴於這些網關/外牆,當您不想在數據庫中點擊數據庫時,您會想要嘲笑這些返回數據訪問對象的方法(如果它們形成應用程序的數據層)。
public class clsClass
{
public int ID;
public string title;
public string author;
public string article;
}
public class BookGateway
{
public List<clsClass> GetAllArticles()
{
var result = new List<clsClass>();
// Add items here.
// Can call database and populate each new clsClass
// and add to result object.
return result;
}
}
不要創建靜態方法!
您首先想到的應該是接口。
也許你可以寫類似的信息(例如在Java中)
public interface ArticleService {
Article[] getAllArticles() throws ServiceException();
}
你需要做的文章還進入這個界面中的所有其他的事情。將該類的具體實現(DbArticleService,XmlArticleService,...)注入到需要處理文章的每個對象中。
就像其他海報中提到的那樣,你可以得到解耦的代碼和很好的關注點分離。
但無論你做什麼,都不要讓東西靜止。
感謝您的回答。我真的不明白。我正在用C#編程。我有一個文章類型。 – Martijn 2008-12-11 09:55:34
@Martijn:OT:如果你使用C#編程,你不應該使用任何前綴(比如你的clsArticle),你不應該縮寫任何東西(比如你的* Fact)。查看.NET Framework中的命名指南,這將有利於任何人回答您未來的C#問題。 – OregonGhost 2008-12-11 10:03:29
這適用於任何OO lang。事實上,你不需要那麼多的靈活性。最後一個選項(使用類方法)對你來說已經足夠了。但是,如果您想要將所有這些操作放在單獨的類中,您可能仍稱爲ArticleFactory。這個概念仍然是sam – OscarRyz 2008-12-11 16:38:06