我試圖更好地堅持Single Responsibility Principle,並且我遇到了如何構建與數據庫通信的常規類設計的問題。在一個簡化的版本,我基本上具有含有一個數據庫:在遵循單一責任原則的同時設計數據庫交互
廠商< ==探頭< ==> ProbeSettings
探針具有製造商。探針有一組設置。相關的對象可以在整個應用程序中訪問,坦率地說,目前的實現是一團糟。
目前,這裏有一個如何溝通和對象實現了一個普遍觀點:
public class Manufacturer
{
public int ID; // Primary key, auto-incrementing on insert
public string Name;
}
public class Probe
{
public int ID; // Primary key, auto-incrementing on insert
public int ManufacturerID;
public string Name;
public int Elements;
}
public class ProbeSettings
{
public int ProbeID; // Primary key, since it is unique.
public int RandomSetting;
}
// This class is a mess...
public static class Database
{
public static string ConnectionString;
public static void InsertManufacturer(Manufacturer manuf); // ID would be ignored here, since it's auto-incrementing.
public static void InsertProbe(Probe probe); // Again, ID generally ignored.
public static void InsertProbeSettings(ProbeSettings probeSet);
public static Manufacturer[] GetAllManufacturer();
public static Probe[] GetProbesFromManufacturer(int manufacturerID);
public static Probe[] GetProbesFromManufacturer(Manufacturer manuf);
}
我在這裏看到的許多問題。
Database
確實太多了。- 這些對象在讀取時可能是不可變的,唯一的問題是插入後,我不知道它們分配了什麼ID,插入的對象現在已經過時。
- 任何時候一個類需要從
Database
獲取信息,我不得不添加另一個Get方法來處理特定的查詢。
在這裏,我真的很遺憾什麼是正確的實現。改進我唯一真正的想法是某種基本接口的數據庫對象,儘管它可能只是幫助插入...
public interface IDatabaseObject
{
void Insert(Database db);
bool Delete(Database db);
}
的是,真正實現這個好辦法?
如果您發現存儲庫的「最佳」解決方案,讓我們都知道。因爲我曾經使用過的解決方案沒有在邊緣周圍出現某種粗俗的廢話。 – Will 2010-01-20 21:39:05