Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 如何在没有硬编码的情况下测试代码中的动态元素集?_Design Patterns_Language Agnostic_Database Design - Fatal编程技术网

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

Design patterns 如何在没有硬编码的情况下测试代码中的动态元素集?,design-patterns,language-agnostic,database-design,Design Patterns,Language Agnostic,Database Design,最好用一个例子来理解这个问题 我有一家医院,有三家主要的药店;中央药房、病房药房和私人套房 这些药店可以随意添加、删除和扩展。当我们谈论中心药房或病房药房时,如果没有硬编码id,我很想从我的代码中知道 有人能帮我解决这个问题吗 回答这个问题后,我将呈现一个不同的场景。提前谢谢大家 编辑#1 我认为会有某种表格设计和代码设计模式来实现这种灵活性。如果你没有硬编码id,你需要硬编码一些东西,你刚才说你的代码想知道它与中央药房一起工作,所以这里的逻辑中硬编码了一些东西 身份证这么差吗 您是否可以将行为

最好用一个例子来理解这个问题

我有一家医院,有三家主要的药店;中央药房、病房药房和私人套房

这些药店可以随意添加、删除和扩展。当我们谈论中心药房或病房药房时,如果没有硬编码id,我很想从我的代码中知道

有人能帮我解决这个问题吗

回答这个问题后,我将呈现一个不同的场景。提前谢谢大家

编辑#1


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

如果你没有硬编码id,你需要硬编码一些东西,你刚才说你的代码想知道它与中央药房一起工作,所以这里的逻辑中硬编码了一些东西

身份证这么差吗


您是否可以将行为标志存储在数据库中,这样,您就不用说
if(pharmacy.Name==“Central pharmary”)…
而是说
if(pharmary.IsCentral)…
或类似的东西了?

如果没有硬编码id,有两种方法:

  • 将“药房类型”添加到“药房”表中。请注明是中心药房、病房药房还是私人套房
  • 添加一个包含三行的不同表,一行包含中央药房及其id,第二行包含病房药房及其id,以此类推
关于第一种选择:

如果您只能有一个中心药房,则代码需要确保只有在没有其他药房具有该类型时,才能将该类型设置为“中心”

如果您需要始终拥有中心药房,那么您的代码需要确保中心药房不能被删除,并且可以从添加、删除和更改其他药房的界面“删除”中心药房类型


请注意,在编码这种“单实例”约束时,您可能需要在更新前后查看表范围的锁或重新读取/重新检查。最终,拥有一个单一的不可删除的中心药房可能会简单得多。

我最初的表格设计是

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)
)
这允许添加非专利药店以及您提到的类型


在某个时间点,您必须以某种方式硬编码中央药房的PharmacyTypeID(et all)或其名称。

我不确定这里是否有真正的问题。您似乎在询问如何设计数据库,然后描述数据库结构,然后询问如何以编程方式访问它。也许你可以尝试构建一个基本的测试程序,然后请人们帮助你评估实现同样目标的其他方法?我想我喜欢主要的药房类型结构。这是因为我可能有第二家医院在同一张表中存储了不同的结构。使用@Venema“Pharmacy Type”结构,我可以将不同的一组主要药房放在同一张表中,并使用完全不同的结构。根据我在这里得到的,在这个场景中,我应该定义一个更通用的主要药房类型列表,只是在它们具有相同特征的情况下。您有更好的解决方案吗?这类似于“用户配置文件”类型的解决方案。您可以向每个用户添加标志,也可以创建配置文件,以便共享该配置文件的所有用户只需链接到该配置文件即可。你只要选一个就行了。我个人可能会选择个人资料解决方案。我认为这是我正在寻找的解决方案(使用医院id)