我需要一个数据映射/存储库解决方案,并希望避免必须写自己的文章。
学说似乎还满足了除一个要求外的所有要求,但我只是不知道该怎么做。
我正在使用旧数据库,我想让我的域对象完全与数据库无关,直到我们能够部分逐步逐步淘汰旧应用程序(至少需要一年)。这意味着我需要一种将从其他表添加到实体的字段的方法。
这是一个示例:
<?php
namespace Entities;
class Article
{
protected $id;
protected $name; // from article table
protected $description; // from article_info table, joined from article table
protected $stock; // from article_variation_info, joined from article_info table
...
}
学说文档似乎表明了两个可能的解决方案:
- 为所有表创建实体,然后使用自定义Getters/setter添加一个字段到实体
- 使用本机SQL获取实体数据和每个存储库查询(请参见此处)
我想避免使用第一个选项,因为我想为新应用程序创建一个干净的域模型,而没有过去的旧限制/错误决策。必须为每个表创建实体似乎适得其反。
第二个选项似乎更好,但是如果我必须编写所有SQL,我最好还是编码自己的PDO存储库和映射器。
我错过了什么,还是教义不是我想做的理想解决方案?
学说2对您的问题不是理想的选择。它确实想要每个实体关系的一张桌子。另一方面,一旦您过渡,事情就会很好。
我确实认为观点是您最好的解决方案。我知道功能是有限的,但您应该能够通过它来进行。
但是,您的第一个选择是可行的。重要的是,您的新型号具有一个不错的干净界面。您的应用程序仅知道模型接口。模型层中没有持久性代码。
NewModel
NewArticleModel implements NewArticleModelInterface
NewArticleModelInterface
NewArticleRepositoryInterface
NewEntity
NewArticleEntity extends NewArticleModel
NewArticleEntityRepository implements NewArticleRepositoryInterface
OldEntity
OldArticleDoctrineEntity
OldArticleDoctrineRepository
诀窍是让newarticleentityrepository负责从旧的核能中构建新属性。
最终,当数据库已更新以直接支持newartileStity时,您只需要调整存储库即可插入新的存储库。同样,您的应用程序仅知道模型级别的接口。
。实际上,无论您采用哪种方法,创建持久性中性模型层可能是开始的方法。