sách gpt4 ăn đã đi

php - OOP 原则 - 如何构造类

In lại Tác giả: Walker 123 更新时间:2023-12-01 00:30:51 25 4
mua khóa gpt4 giày nike

我目前有一个 Message_Repository 类,它有如下方法:

getLocationDetailsByID($messageId),
getCustomerDetailsById($messageId),
getMessages(),
updateMessageForEmail(array $data), //this takes an array which includes the message ID
getLinkIndicatorById($messageId),
setIndicator($data) //this takes an array which includes the message ID

这些方法都是数据库交互,在大多数情况下我选择各种数据,在某些情况下我进行更新。

我发现,当我充实这一点时,我的类(class)名称不再代表类(class)中发生的事情,至少不是排他性的。

最好的做法是说,一个 Location_Repository 类和一个 Customer_Repository 类将包含获取与主题相关的数据的方法吗?

仍在尝试理解单一职责。从理论上讲,这似乎很简单,但在实践中,我发现它更具挑战性,尤其是在我的类(class)不断增加和变化的情况下。绝对需要重构,但要确保我正确地考虑了这一点。

biên tập我可能对我的类(class)名称感到困惑。它不是设计模式严格意义上的“存储库”,而只是我用来与数据库交互的类的命名约定。可能需要重命名它。

câu trả lời hay nhất

Single responsability是原子化的 OOP 概念,它导致 Encapsulation concept .

这些概念由 SOLID Principle 结合在一起,一个强大的原则,将节省您的大量时间并避免您余生的头痛:

Single responsibility principle: a class should have only a single responsibility (i.e. only one potential change in the software's specification should be able to affect the specification of the class)

Open/closed principle “software entities … should be open for extension, but closed for modification.”

Liskov substitution principle “objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program.” See also design by contract.

Interface segregation principle “many client-specific interfaces are better than one general-purpose interface.”

Dependency inversion principle one should “depend upon abstractions, [not] concretions.”

如果不了解您的所有业务规则并仔细阅读您的代码,就很难分析您应该如何组织您的软件,但我会试一试:

MessageRepository 不扩展 Customer 或 Location,而是 compounded被他们。

Composition Example上图中,来自维基百科的 Composition toke 示例

在 MessageRepository 的构造中,您将实例化这些类以在 MessageRepository 中使用。完美的情况是避免在类中使用公共(public)变量,并高度依赖检索和设置数据的方法(我看你已经用那种方式做了一些事情)。所以,据我所知,方法名称:

MessageRepository 方法:

  • 公共(public) getMessages();
  • public updateMessageForEmail(array $data);//这需要一个包含消息 ID 的数组
  • public getLinkIndicatorById($messageId);
  • public setIndicator($data);//这需要一个包含消息 ID 的数组

LocationRepository 方法:

  • public getLocationDetailsByID($messageId);

CustomerRepository 方法:

  • public getCustomerDetailsById($messageId);

重要的是要记住:您的业务规则方法应该是私有(private)的。

可读性建议:

  • 避免在类名中使用下划线;
  • 避免重复类名或总线。规则转化为方法。 IE。 getLocationDetailsByID 应该是 getById(),永远记住——你的方法会有实例,所以会被调用:$this->location->getById()。这同样适用于您描述的所有方法。

关于命名,这是一个很好的问题。我建议你学习设计模式/软件架构,我最喜欢的(opposing Uncle Bob perspective)是 MVC(Model-View-Controller)架构:

MVC Schema

具有业务规则原则和数据库抽象的“存储库”应该是一个模型,因此,如果您想使用该模式,请创建 MVC 目录结构并朝着它努力!

关于php - OOP 原则 - 如何构造类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44202108/

25 4 0
  • php - Cần tư vấn chỉnh sửa php qua php

    Mình có file cấu hình viết bằng PHP như hình bên dưới nên muốn sử dụng PHP để phát triển một giao diện (interface), có thể chỉnh sửa các giá trị file như $WEBPATH, $ACCOUNTPATH ​​và const value (value) view

  • Không thể xuất bản "tệp PHP" PHP

    Tôi đang cố gắng tạo một trang đăng nhập để tìm hiểu PHP cơ bản, trước tiên tôi muốn tệp PHP độc lập của mình lưu trữ đầu vào của tệp HTML (có biểu mẫu), nhưng khi tôi nhấn một nút (kích hoạt POST cho tập lệnh PHP ) Tôi liên tục mắc phải sai lầm khó chịu. Tôi đã tìm kiếm S

  • Có chức năng in nào cho PHP tạo ra các biểu thức PHP hợp lệ không?

    Tôi đang tìm cách để PHP in một mảng tùy ý ở dạng mà tôi có thể đưa vào dưới dạng bài tập trong mã (kiểm tra) của mình. print_r tạo ra ví dụ: Array ( [0] => qsr-part:1285 [1]

  • Có giới hạn kích thước cho các khóa mảng PHP không? Những hạn chế chung của mảng PHP là gì?

    Câu hỏi này đã có câu trả lời: Đã đóng cửa 11 năm trước. Có thể trùng lặp: Kích thước khóa tối đa cho một mảng trong PHP là bao nhiêu? Như tiêu đề đã nói, tôi muốn biết

  • Có chức năng in nào cho PHP tạo ra các biểu thức PHP hợp lệ không?

    Tôi đang tìm cách để PHP in một mảng tùy ý ở dạng mà tôi có thể đưa vào dưới dạng bài tập trong mã (kiểm tra) của mình. print_r tạo ra ví dụ: Array ( [0] => qsr-part:1285 [1]

  • php - Cho phép hàm thực thi khi php làm mới (PHP)

    đóng cửa. Câu hỏi này cần được hỏi tập trung hơn. Câu trả lời không được chấp nhận vào thời điểm này. Bạn muốn cải thiện vấn đề này? Câu hỏi được cập nhật để chỉ tập trung vào một vấn đề chỉnh sửa bài đăng này. Đã đóng 9 năm trước. Cải thiện truy vấn này

  • php - Hiển thị menu theo khoảng thời gian PHP PHP MySQL

    Tôi có một bảng trong cơ sở dữ liệu MySQL lưu trữ các thực đơn do nhà hàng cung cấp vào mỗi ngày trong tuần và khoảng thời gian. Cấu trúc bảng như sau: i_type i_name i_cost i_day i_start i_

  • Gửi tham số tới PHP động được lồng trong trang PHP

    Tôi có hai trang. test1.php và test2.php. Tất cả những gì tôi muốn làm là nhấn gửi trên test1.php và hiển thị test2.php trong div. Điều này thực sự hoạt động tốt, nhưng tôi cần thêm

  • php - vùng văn bản -> php -> mysql -> php

    Tôi đã nhận được mã này. Tôi muốn cập nhật mysql qua vùng văn bản. Tôi đang lặp lại MySQL của mình trong một vùng văn bản nhưng tôi không biết cách cập nhật nó, tôi có nên đặt mọi thứ vào đó không vì chế độ _GET không mang lại cho tôi bất cứ thứ gì, tôi cũng đã thử _GET

  • Làm cách nào để phân tích một giá trị từ php này sang php khác

    Trước hết, tôi mới làm quen với php nên tôi vẫn đang cố gắng học hỏi. Tôi đã tạo một biểu mẫu trên Wordpress và tôi muốn chèn các giá trị vào một bảng (bảng data_test mà tôi đã quản lý) và sau đó lấy tất cả các cột (id

  • php - Tùy chọn bảo mật trong php, các hàm php để vệ sinh đầu vào

    Tôi có chức năng sau để lọc dữ liệu đầu vào từ người dùng hoặc URL: function SanitizeString($var) { $var=stripslashes($var);

  • Chuyển hướng đăng nhập HTML/PHP sang php

    Tôi có một trang html sử dụng tệp php để truy vấn cơ sở dữ liệu và sau đó cho phép người dùng đăng nhập hoặc từ chối quyền truy cập. Vấn đề tôi gặp phải là nó chỉ chuyển hướng đến url của tệp php và không bao giờ cung cấp phản hồi về những gì đang diễn ra. Đây là lần đầu tiên tôi sử dụng html,

  • Chức năng PHP onClick của PHP sau đó chuyển hướng

    Tôi có một trang chứa đầy các liên kết đến pdf và tôi muốn theo dõi những liên kết nào được nhấp vào. Tôi nghĩ tôi có thể làm điều gì đó như sau, nhưng tôi gặp phải một vấn đề: query($sql); if($result){

  • Có cách nào để phân tích cú pháp PHP từ một tệp được tải bằng mã PHP không?

    Tôi đang sử dụng mã để tải HTML/PHP từ tệp văn bản bên ngoài $f = fopen($filename, "r"); while ($line = fgets($f, 4096)) { print $l

  • Xem sitemap của VNExpress