ใช้การเชื่อมต่อภายในเอนทิตี

ฉันไม่รู้จริงๆว่าจะเรียกวิธีนี้ว่าอย่างไร แต่คำถามคือ - มันโอเคไหมที่จะทำอะไรแบบนี้ ฉันสร้างเอนทิตี 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();

ไม่เป็นไรใช่ไหม และฉันควรใช้วิธีแรกเท่านั้น?


person Mikhail Stroev    schedule 28.11.2018    source แหล่งที่มา
comment
ข้อความไม่ได้ส่งเอง   -  person tereško    schedule 28.11.2018


คำตอบ (1)


คำตอบสำหรับเรื่องนี้ขึ้นอยู่กับความแข็งแกร่งของผู้นับถือในค่ายสถาปัตยกรรมต่างๆ (DDD เทียบกับโมเดลโดเมนโลหิตจาง) หากคุณเป็นสาวกของ DDD คุณน่าจะสนับสนุนให้ข้อความสามารถส่งได้เอง ซึ่งจะอนุญาตให้ข้อความทำสิ่งต่าง ๆ เช่น ตรวจสอบสถานะของตนเอง เปลี่ยนสถานะนั้นตามผลลัพธ์ของการส่ง เป็นต้น หากคุณเป็น เมื่อใช้โมเดลโดเมนแบบบาง/โลหิตจาง คุณจะทำให้ข้อความเป็นโง่ และพึ่งพาบริการในการส่งข้อความ

แต่ละเส้นทางมีข้อดีข้อเสีย คุณควรพิจารณาว่าเส้นทางใดที่เหมาะกับการใช้งานของคุณและยึดมั่นในเส้นทางนั้น การผสมให้เข้ากันจะทำให้แอพพลิเคชันของคุณเลอะเทอะ

person Rob Conklin    schedule 28.11.2018