2010-01-05 67 views
2

我想要一些關於OOD查詢的幫助。關於面向對象設計的建議

說我有以下Customer類:

public class Customer 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

這對客戶相關數據的簡單佔位符。接下來是CustomerFactory,這是用來獲取客戶:

public static class CustomerFactory 
{ 
    public static Customer GetCustomer(int id) 
    { 
     return null; // Pretend this goes off to get a customer. 
    } 
} 

現在,如果我想寫一個名爲UpdateCustomer(Customer customer)可有人建議,我可以把這個方法程序?

很明顯,我不想使用Customer類,因爲這會違反SRP(單一責任原則),我也不認爲將該方法附加到CustomerFactory類是一個好主意,因爲它只是角色是從數據庫獲取客戶。

所以它看起來像我需要另一個類,但我不知道該如何命名它。

乾杯。 Jas。

+0

爲了將來的參考 - 沒有任何需要將這個問題標記爲社區wiki :-) – Justin 2010-01-05 16:07:50

回答

4

你所謂的工廠根本不是工廠。這是一個存儲庫。

A Factory處理根據一些參數集共享通用接口或類層次結構的各種類的實例化。

A Repository處理數據的檢索和管理。

存儲庫肯定會有UpdateCustomer(Customer customer)方法以及GetCustomer(int id)方法。

+0

啊,很好。這是我通過命名類CustomerFactory而不是CustomerRepository而使事情變得泥濘的地方。這似乎更好。 – 2010-01-05 16:03:07

0

您的UpdateCustomer例程不會放在您的DAL(數據訪問層)中。您應該定義一個類來處理對數據庫的插入或更新,然後將一個客戶對象傳遞給它。

您可以編寫DAL類來處理所有這些,但我沒有看到將它存儲在您的CustomerFactory類中的任何問題,雖然如前所述它不是真正的工廠。

4

你在創建存儲庫的方式上更少。做這樣的事情:

public interface ICustomerRepository 
{ 
    Customer SelectCustomer(int id); 

    void UpdateCustomer(Customer customer); 

    void DeleteCustomer(int id); 

    void CreateCustomer(Customer customer); 
} 

然後創建這個接口的具體實現(該接口是真的只是因爲它是很好的做法,程序對接口 - 你可以跳過它,不過,雖然我會建議你把它) 。

+0

真棒建議+1! – JonH 2010-01-05 16:08:12