Ứng dụng tôi đang viết có các nhóm người dùng, hãy gọi cho họ là cộng đồng. Mỗi cộng đồng có các cuộc họp cũng có một số đối tượng liên kết với họ (người tham dự, mục tiêu, nhiệm vụ, thành tích, v.v.).Mô-đun Php trong mối quan hệ cha-con và thực thi tập lệnh nhanh
Tôi hơi bối rối về cách tốt nhất để triển khai thực hiện các đối tượng con khi cha mẹ được tạo. Đây là một thiết lập lớp đơn giản.
Thực hiện Đầu tiên
<?php
class community
{
public $id;
public $name;
//Store an array of meeting objects
public $meetings = array();
//Store an array of member objects
public $members = array();
//etc
public function getProperties()
{
//hit database for community properties including ids of meetings
//and members associated with this community
//Set community properties
//Use returned ids to populate community properties
foreach($returnedMeetingIds as $meetingId)
{
//The meeting class is responsible for its own init.
$newMeeting = new Meeting();
$newMeeting->id = $meetingId;
$newMeeting->getProperties();
$this->meetings[$meetingId] = $newMeeting;
}
}
}
?>
Phương pháp này đặt trách nhiệm khởi tạo trên từng đối tượng mà theo ý kiến của tôi là tốt hơn cho khả năng bảo trì và mô đun nhưng tôi có thể thấy điều này trở thành một nút cổ chai tầng khổng lồ như nhiều cuộc họp được thêm bởi vì các đối tượng con của mỗi cuộc họp cũng sẽ chịu trách nhiệm tự khởi tạo.
Cách khác tôi có thể nghĩ để làm điều này là điền vào mảng $ họp với một cuộc gọi cơ sở dữ liệu duy nhất. Tất cả các cuộc họp được lưu trữ trong một bảng duy nhất với một trường id cộng đồng.
Thứ hai Thực hiện
<?php
class community
{
public $id;
public $name;
//Store an array of meeting objects
public $meetings = array();
//Store an array of member objects
public $members = array();
//etc
public function getProperties()
{
$sql = 'SELECT *
FROM meetings
WHERE community_id = :community'
//etc
$stmt->execute();
while($meeting = $stmt->fetch())
{
$newMeeting = new Meeting();
$newMeeting->id = $meeting['id'];
//etc
$this->meetings[$newMeeting->id] = $newMeeting;
}
}
}
?>
Tôi tin rằng lớp thứ hai sẽ thực hiện nhanh hơn nhiều nhưng bây giờ tôi đã cùng lớp họp lớp cộng đồng và cảm thấy như nó không phải là tốt nhất các giải pháp.
Câu hỏi của tôi là nên đặt bao nhiêu cổ phiếu trong việc tách các nhóm lớp này (cộng đồng, cuộc họp, mục tiêu, thành tích, nhiệm vụ, v.v.)? Cảm giác cá nhân của riêng tôi là tôi nên đi theo Thực hiện đầu tiên cho đến khi nó chứng minh là không phù hợp với lưu lượng truy cập của tôi và sau đó chuyển đến một cái gì đó như Thực hiện thứ hai. Tôi muốn biết một người nào đó có nhiều kinh nghiệm hơn một chút đã trở thành phương pháp hay nhất. Tôi cảm thấy đây là một lỗ thỏ mà một khi tôi đi xuống có thể khó khăn để tái cấu trúc sau này. Ngoài ra tôi không tin rằng Hoặc là phương pháp là cách phù hợp để tiếp cận điều này. Cảm ơn bạn rất nhiều vì đã giúp đỡ!
Bạn có thể giải thích một chút về thời điểm bạn thực sự gọi mã này không? Chắc chắn bạn không muốn luôn luôn xây dựng toàn bộ hệ thống phân cấp. Bạn có thể nghĩ về một trường hợp sử dụng mà bạn cần tất cả các cuộc họp trong một cộng đồng cùng một lúc? Nếu vậy, bạn có thực sự cần cộng đồng trong trường hợp sử dụng đó không? Nó có thể là tốt hơn để bỏ qua cộng đồng và đi thẳng cho các cuộc họp đôi khi. – Dan
@Dan - Người dùng đăng nhập vào trang cộng đồng liệt kê tất cả các cộng đồng mà họ thuộc về. (người dùng có thể thuộc về nhiều cộng đồng) Chọn một cộng đồng sẽ tải một trang hiển thị tất cả các cuộc họp cộng đồng, các thành viên và các thuộc tính cộng đồng khác. Khi một cuộc họp được chọn, một trang sẽ được tải chứa tất cả thông tin liên quan đến cuộc họp đó. Có những trường hợp sử dụng mà tôi nghĩ rằng tôi có thể bỏ qua tải cộng đồng, tức là một cuộc gọi ajax để tải thuộc tính cuộc họp được chỉnh sửa, nhưng tôi không nghĩ rằng tôi có thể loại bỏ hoàn toàn nó. Tôi nghĩ Triển khai đầu tiên sẽ hoạt động tốt với đề xuất của bạn. – Tanner
Xem câu trả lời của tôi cho một gợi ý cho một cách tiếp cận thay thế. Hãy cho tôi biết nếu bạn có thắc mắc hoặc nghi ngờ. – Dan