如何在没有硬编码的情况下测试代码中的动态元素集?

时间:2010-08-20 07:47:40

标签: design-patterns language-agnostic database-design

最好通过一个例子来理解这个问题。

我有一家医院,有3家主要药店叫;中央药房,病房药房和私人套房。

可以随意添加,删除和扩展这些药房。当这些事情继续下去时,我很想知道我的代码,当我们谈论中央药房或病房药房时,没有硬编码ID。

有人可以帮助我解决这个问题吗?

当回答这个问题时,我会提出一个不同的场景。提前谢谢大家。

编辑#1

我认为会有某种表设计和表格。代码设计模式,以实现这种灵活性。

3 个答案:

答案 0 :(得分:1)

如果您没有对ID进行硬编码,则需要对某些内容进行硬编码,您只是说您的代码想知道它与中央药房有效,所以 / em>关于它在这里被硬编码到逻辑中。

身份证这么糟糕吗?

您是否可以在数据库中存储行为标记,以便不是说if (pharmacy.Name == "Central Pharmacy") ...而是说if (pharmacy.IsCentral) ...或类似?

答案 1 :(得分:1)

如果没有硬编码ID,有两种方法可以解决:

  • 在药房表中添加“药房类型”。这表明它是中央药房,病房药房还是私人套房。
  • 添加一个不同的表格,其中三行一个包含中央药房及其ID,第二行包含病房药房及其ID等。

关于第一个选项:

如果您只需要一个中央药房,您的代码需要确保在没有其他药房的情况下只能将该类型设置为“中心”。

如果您需要随时拥有中央药房,那么您的代码需要确保无法删除中央药房,并且可能只是从界面“删除”中央药房类型以添加​​删除和更改其他药房。

请注意,在编写此类“单实例”约束时,您可能需要在更新之前和之后查看表宽锁或重新读取/重新检查。最后,只有一个不可删除的中央药房可能会更容易处理。

答案 2 :(得分:1)

我的初始表格设计是

CREATE TABLE Hospitals (
  HospitalID INTEGER PRIMARY KEY
  , Name VARCHAR(16)
)

CREATE TABLE PharmacyTypes (
  PharmacyTypeID INTEGER PRIMARY KEY
  , Name VARCHAR(16)
)  

CREATE TABLE Pharmacies (
  PharmacyID INTEGER PRIMARY KEY
  , HospitalID INTEGER FOREIGN KEY REFERENCES Hospitals (HospitalID)
  , PharmacyTypeID INTEGER FOREIGN KEY REFERENCES PharmacyTypes (PharmacyTypeID)
  , Name VARCHAR(16)
)

这样可以添加通用药房以及您提及的类型。

在某个时间点,无论如何,您都必须对Central Pharmacy(以及所有)的PharmacyTypeID或其名称进行硬编码。