在实体内部使用连接

时间:2018-11-28 11:38:06

标签: php oop design-patterns architecture

我真的不知道如何称呼这种方法,但问题是-做这样的事情还可以吗?我创建了一个实体Messages,并在该实体内设置了Connection

<?php

class Message {
   private $connection;

   public function setName();
   public function setSubject();

   public function send()
   {
       $this->connection->send($this);
   }
}

这似乎违反了单一责任原则。

我有服务Mailer,它可以创建Message实体(已经在Connection内部)。 Mailer也可以自己发送Message实体。

有两种选择,我该如何使用;

<?php
// First
$mailer->send($message);

// Second
$message->send();

这不行,我应该只使用第一种方法吗?

1 个答案:

答案 0 :(得分:0)

对此的答案在很大程度上取决于您对各个建筑营地(DDD vs an Anemic Domain model)的忠诚程度。如果您是DDD的拥护者,则可能会主张该消息可以发送自身,这将使其能够执行各种操作,例如验证其自身状态,根据发送结果更改该状态等。使用瘦/贫血域模型,您将使消息变得愚蠢,并依靠服务来发送消息。

每条路径都有权衡取舍,您应该弄清楚哪一种最适合您的应用程序并坚持下去。混合它们会使您的应用程序变得一团糟。