2010-07-29 48 views
1

我正在将一个旧的过程式PHP网站重构为一个美味的OOP应用程序,并使用轻量的域驱动设计来增添趣味。OOP值对象和同一类中的实体

我一直在磕磕绊绊,因为我需要可以具有实体或值对象的子类的类。例如,

一个url对象。那里有十亿个网站,所以他们都不可能真正成为实体。但有些是非常特殊的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 

这一切似乎有点奇怪。

有没有什么模式讨论处理这个问题的最佳方法?

回答

0

我不知道我完全理解你的scenerio,但是......真的很重要吗? 根据我对EFs/ORMs的经验,做我想做的事情的最好方法是让实体类根据业务规则决定是否从/向数据库加载/保留自己。在课堂上定义。

$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 

不知道这是否真的帮助你,或者它甚至适用。

+0

是的,谢谢。这很有帮助。我一直痴迷于让我的实体类抛出任何试图在没有id的情况下创建它们(我不明白他们如何使用'Identity Map'(PoEAA))。所以,我想你是在说放松,让对象存在没有身份 - 这将解决当前的问题。 – 2010-07-29 21:49:45

+0

p.s.什么是'EF'? – 2010-07-29 21:50:10

+0

EF =实体框架 – 2010-07-29 22:18:36