两部分问题:
第 1点:当引用对象的某些属性/属性并不总是必需时,为引用另一个对象的对象创建模型的最佳方法是什么?
想象一下,如果你有两个对象:PERSON和BUSINESS
Person
+ PersonID
+ Name
+ Age
+ Sex
+ Skill
+ Business *
Business
+ BusinessID
+ Name
+ Address
+ CorporateVision (this is large)
在上面的示例中:PERSON将BUSINESS作为其当前雇主。
在数据库中,每个对象都有两个表。在代码中,使用 MVC 架构模式,我将为每个对象创建两个类。数据库将在BUSINESS --> PERSON之间具有外键关系,而在代码中PERSON对象将有一个成员变量,该变量包含对BUSINESS对象的引用。
现在假设我想列举PERSONS的集合并找出为特定公司工作的人的总数(基于BUSINESS . Name)。
如果不使用 MVC,我可以创建一个查询数据库并获得计数的函数。简单而有效。
使用 MVC,我需要实例化每个PERSON对象,而后者又会实例化一个BUSINESS对象以供参考(如果尚未为它完成... BusinessFactory将首先检查一个集合)。此外,它必须拉入BUSINESS。CorporateVision从数据库中获取每个对象。而且由于这些企业中的大多数都是媒体营销公司,因此他们的大多数企业愿景都是大文本块。因此,当我们只需要企业名称时,就没有必要从数据库中读取 CorporateVision。
我可以通过将代码中的PERSON对象更改为:
Person
+ PersonID
+ Name
+ Age
+ Sex
+ Skill
+ BusinessID
+ BusinessName
所以现在当我创建我的PERSON对象时,我会与BUSINESS进行 JOIN并缓存名称。现在我可以快速有效地获取 BusinessName ......而且我仍然可以根据需要通过查找 ID来获取完整的BUSINESS对象。但我只是对模型进行了非规范化......我刚刚引入了一个新问题......和一个新问题。
数字 2:MVC 如何处理多用户数据库的并发性?
可以说,当我的客户端应用程序正在枚举时(使用我上面提到的枚举来查找为特定业务工作的所有人员),另一个用户合并了两个BUSINESS对象。
现在我的内存集合是错误的,因为所有的 BusinessName 缓存都是陈旧的。如果我刚刚离开PERSON ,情况也是如此。业务作为业务对象引用:业务对象将是陈旧的。
总结:我觉得使用 MVC 会失去数据检索效率以及应用程序的 ACIDness。还是我使用 MVC 错误?