首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原则2设计模式提示

原则2设计模式提示
EN

Stack Overflow用户
提问于 2013-06-24 11:58:43
回答 1查看 941关注 0票数 1

我正试图找出在原则2中定义我的实体的最佳方法,但没有任何解决方案是真正正确的。我可能是从错误的角度进行这个,所以指针是非常感谢的。

问题是如何为用户定义实体和一个或多个概要文件。现在,我有了当前的设置:

用户

代码语言:javascript
复制
/**
 * @ORM\Entity
 */
class User {
    use AutoIdentifiable; //Trait for auto-generating an @id.

    /**
     * @ORM\OneToMany(targetEntity="UserProfile", mappedBy="user", cascade={"all"}, fetch="EAGER", orphanRemoval=TRUE)
     * @var UserProfile
     */
    protected $profiles;    
}

UserProfile

代码语言:javascript
复制
/**
 * @ORM\Entity
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({"personalprofile" = "PersonalProfile", "companyprofile" = "CompanyProfile"})
 */
abstract class UserProfile {
    use AutoIdentifiable;

    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="profiles", fetch="EAGER")
     * @var User
     */
    protected $user;
}

PersonalProfile

代码语言:javascript
复制
/**
 * @ORM\Entity
 */
class PersonalProfile extends UserProfile {
    /**
     * @ORM\Column(length=50)
     * @var String
     */
    protected $firstName;

    /**
     * @ORM\Column(length=50)
     * @var String
     */
    protected $lastName;
}

CompanyProfile

代码语言:javascript
复制
/**
 * @ORM\Entity
 */
class CompanyProfile extends UserProfile {

    /**
     * @ORM\Column
     * @var String
     */
    protected $name;

    /**
     * @ORM\Column(length=9)
     * @var String
     */
    protected $orgNr;
}

如您所见,一个用户可以拥有一个或多个配置文件,其中包含非常不同的信息。如果我决定继续使用这个设计,我以后可能会根据用户的角色添加更多的配置文件。(例如,如果用户有一个个人博客,他们可能有一个BlogProfile,其中包含一张图片和一些关于自己的描述。)

问题是,加载和检查特定的配置文件是非常困难的,用户甚至可能有组合的配置文件。(例如: Personal+Blog)仅仅对每个特定的配置文件都有一个命名的引用似乎也不是一个好主意。我确实检查了装饰模式,但我不确定它是否合适。

的问题是:

  1. 是否有一个设计模式是完美的,我错过了这种类型的结构?
  2. 也许还有更好的方法来解决整个问题?
  3. 有没有人有这类数据结构的经验,并能分享一些有用的提示?
EN

回答 1

Stack Overflow用户

发布于 2014-02-18 19:49:49

我自己还没有实现它,但我想您可以看看ResolveTargetEntityListener是如何在理论中使用的:

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/resolve-target-entity-listener.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17274932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档