【问题标题】:Models and domain objects模型和领域对象
【发布时间】:2013-10-14 13:15:28
【问题描述】:

我读了一篇关于如何创建域对象here 的文章。 作者正在解释如何设计这些类。简而言之,每个现实世界的实体都有一个类(即 User、Comment、Post 等类)和 getter + setter(检查数据的有效性)。

对于一对多的关系,例如与单个帖子相关的所有cmets,作者使用数组将Comment类的实例存储到Post类的实例中。但这是我不明白的:

$post = new Post();

$post->addComment( new Comment() );
$post->addComment( new Comment() );
$post->addComment( new Comment() );

$postModel = new PostModel();
$postModel->insert( $post ); // Should also insert (or not !) the added comments.

当我们要插入新帖子时,相关的 cmets 可能实际存在也可能不存在(我的示例没有多大意义,因为您只能评论存在的帖子,但这只是一个示例)。模型是否应该在添加之前检查每个添加的 cmets 是否存在?

另外,如果您知道一篇文章可以解释如何正确编写模型,并且与上述文章的作者使用的哲学相同,那就太好了。

【问题讨论】:

  • 不,模型不应该检查它,这是控制器的工作
  • 感谢您的评论。为什么它是控制器的工作?
  • 由于MVC的逻辑:en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller你的模型中的insert()方法应该在控制器成功响应后调用
  • 如果只有一些要插入的 cmets 存在怎么办。控制器应该指定哪些或应该中止整个插入?
  • 取决于您想要实现的目标。但这两种情况都是控制器的工作。如果 10 个模型中的 1 个不存在则继续操作并不重要,请不要停止应用程序。

标签: php database-abstraction domain-object


【解决方案1】:

我认为首先你需要创建帖子然后添加评论,

$post = new Post();
$post->populate($postData);
$post->save();
$post->addComment( new Comment() );

或选择您在哪个帖子中添加评论

$post = new Post($idPost);
$post->addComment( new Comment() );

【讨论】:

猜你喜欢
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 2012-02-04
  • 1970-01-01
相关资源
最近更新 更多