我正在尝试更好地遵守单一职责原则,并且在掌握如何构建通用类设计以与数据库进行通信时遇到问题。在简化版本中,我基本上有一个数据库,其中包含:
制造商 <== 探针 <==> 探针设置
探头有制造商。一个探头有一组设置。相关对象在整个应用程序中都可以访问,坦率地说,当前的实现是一团糟。
目前,这里是如何实现通信和对象的一般视图:
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);
}
什么是实际实现这一点的好方法?