DTO תבנית ב-XOOPS
DTO דפוס (אובייקטי העברת נתונים) ב-XOOPS
Section titled “DTO דפוס (אובייקטי העברת נתונים) ב-XOOPS”2.5.x ✅ 4.0.x ✅
אובייקטי העברת נתונים (DTOs) הם אובייקטים פשוטים המשמשים להעברת נתונים בין שכבות שונות של יישום. DTOs עוזרים לשמור על גבולות ברורים בין שכבות ולהפחית תלות באובייקטים של ישות.
DTO קונספט
Section titled “DTO קונספט”מהו DTO?
Section titled “מהו DTO?”DTO הוא:
- אובייקט ערך פשוט עם מאפיינים
- ניתן ללא שינוי או לקריאה בלבד לאחר היצירה
- אין היגיון עסקי או שיטות
- מותאם להעברת נתונים
- בלתי תלוי במנגנוני התמדה
מתי להשתמש DTOs
Section titled “מתי להשתמש DTOs”השתמש ב-DTOs כאשר:
- העברת נתונים בין שכבות
- חשיפת נתונים דרך APIs
- צבירת נתונים ממספר ישויות
- הסתרת פרטי יישום פנימיים
- שינוי מבנה נתונים עבור צרכנים שונים
בסיסי DTO יישום
Section titled “בסיסי DTO יישום”<?phpclass UserDTO{ private $id; private $username; private $email; private $isActive; private $createdAt;
public function __construct($entity = null) { if ($entity instanceof User) { $this->id = $entity->getId(); $this->username = $entity->getUsername(); $this->email = $entity->getEmail(); $this->isActive = $entity->isActive(); $this->createdAt = $entity->getCreatedAt(); } }
// Read-only accessors public function getId() { return $this->id; } public function getUsername() { return $this->username; } public function getEmail() { return $this->email; } public function isActive() { return $this->isActive; } public function getCreatedAt() { return $this->createdAt; }
public function toArray() { return [ 'id' => $this->id, 'username' => $this->username, 'email' => $this->email, 'isActive' => $this->isActive, 'createdAt' => $this->createdAt, ]; }
public function toJson() { return json_encode($this->toArray()); }}?>Request/Input DTO
Section titled “Request/Input DTO”<?phpclass CreateUserRequestDTO{ private $username; private $email; private $password; private $errors = [];
public function __construct(array $data) { $this->username = $data['username'] ?? ''; $this->email = $data['email'] ?? ''; $this->password = $data['password'] ?? '';
$this->validate(); }
private function validate() { if (empty($this->username) || strlen($this->username) < 3) { $this->errors['username'] = 'Username too short'; }
if (empty($this->email) || !filter_var($this->email, FILTER_VALIDATE_EMAIL)) { $this->errors['email'] = 'Invalid email'; }
if (empty($this->password) || strlen($this->password) < 6) { $this->errors['password'] = 'Password too short'; } }
public function isValid() { return empty($this->errors); }
public function getErrors() { return $this->errors; }
public function getUsername() { return $this->username; } public function getEmail() { return $this->email; } public function getPassword() { return $this->password; }}?>שימוש בשירותים
Section titled “שימוש בשירותים”<?phpclass UserService{ public function createUserFromRequest(CreateUserRequestDTO $dto) { if (!$dto->isValid()) { throw new ValidationException('Invalid input', $dto->getErrors()); }
$user = new User(); $user->setUsername($dto->getUsername()); $user->setEmail($dto->getEmail()); $user->setPassword($dto->getPassword());
$userId = $this->userRepository->save($user);
return new UserDTO($user); }}?>שימוש בבקרים של API
Section titled “שימוש בבקרים של API”<?phpclass ApiController{ public function createUserAction() { $input = json_decode(file_get_contents('php://input'), true); $dto = new CreateUserRequestDTO($input);
if (!$dto->isValid()) { http_response_code(400); return ['success' => false, 'errors' => $dto->getErrors()]; }
try { $userDTO = $this->userService->createUserFromRequest($dto); http_response_code(201); return ['success' => true, 'data' => $userDTO->toArray()]; } catch (\Exception $e) { http_response_code(500); return ['success' => false, 'message' => $e->getMessage()]; } }}?>שיטות עבודה מומלצות
Section titled “שיטות עבודה מומלצות”- שמור על DTOs ממוקד וספציפי
- הפוך את DTOs לבלתי משתנה או לקריאה בלבד
- אל תכלול היגיון עסקי ב-DTOs
- השתמש ב- DTOs נפרד עבור קלט ופלט
- מסמך DTO מאפיינים ברורים
- שמור על DTOs פשוט - רק מיכלי נתונים
תיעוד קשור
Section titled “תיעוד קשור”ראה גם:
- שכבת שירות לשילוב שירותים
- Repository-Pattern לגישה לנתונים
- MVC-Pattern לשימוש בבקר
- בדיקה לבדיקת DTO
תגיות: #dto #data-transfer-objects #design-patterns #module-development