OOP值对象和实体在同一个类中

时间:2010-07-29 15:04:43

标签: oop dns domain-driven-design entities value-objects

我正在将一个旧的程序性PHP网站重构为一个美味的OOP应用程序,轻轻一点的域驱动设计增加了味道。

我一直在遇到需要可以拥有子实体或值对象的类的情况。

例如,

url对象。那里有很多网址,所以他们都不能真正成为实体。但有些是非常特殊的网址,比如我的主页。那是一个实体。

另一个例子是,例如,'配置对象'。我希望一些配置具有身份,因此我可以创建“预设”并通过在线控制面板管理它们。对于那些需要查找器/存储库来查找它们并且需要ORM来管理它们的生命周期。但是,对于其他人的“非预设”(具有相同的类层次结构),我希望能够使用已经定制的数据加载它们,而不需要保留它们。

我正在设想很多:

class factory { 
 reconstitute($rawdata) {
  if (raw data has identity)
   load up and return entity version of the class 
  else
   load up and return anonymous/value object version of the class

这一切似乎有点奇怪。

是否有任何模式讨论处理此问题的最佳方法?

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全了解你的场景,但......这真的很重要吗? 根据我使用EFs / ORM的经验,我想做的最好的方法是让你的实体类决定是否根据定义的业务规则从/向数据库加载/持久化在课堂上。

$url = new URLClass('KEY_DATA') // returns loaded object url if key if found in database
$url = new URLClass() // returns new url object
$url = new URLClass('', '110011000110010001000011101010010100') // returns new url with data loaded from raw data

不确定这是否真的可以帮助你,或者它是否适用。