Hai thành phần cung cấp cùng chức năng, được yêu cầu bởi các phụ thuộc khác nhau


9

Tôi đang xây dựng một ứng dụng trong PHP, sử dụng Zend Framework 1 và Doctrine2 làm lớp ORM. Tất cả đang diễn ra tốt đẹp. Bây giờ, tôi tình cờ nhận thấy rằng cả ZF1 và Doctrine2 đều đi kèm và dựa vào việc thực hiện bộ nhớ đệm của riêng họ. Tôi đã đánh giá cả hai, và trong khi mỗi người đều có những ưu và nhược điểm riêng, không ai trong số họ nổi bật hơn người khác vì những nhu cầu đơn giản của tôi. Cả hai thư viện dường như cũng được viết chống lại các giao diện tương ứng của họ, chứ không phải các triển khai của họ.

Lý do tại sao tôi cảm thấy đây là một vấn đề là trong quá trình khởi động ứng dụng của tôi, tôi phải cấu hình hai trình điều khiển bộ đệm - mỗi trình điều khiển có cú pháp riêng. Một sự không phù hợp dễ dàng được tạo ra theo cách này và cảm thấy không hiệu quả khi thiết lập hai kết nối đến phụ trợ bộ đệm vì điều này.

Tôi đang cố gắng xác định cách tốt nhất phía trước là gì và sẽ hoan nghênh mọi hiểu biết mà bạn có thể cung cấp.

Những gì tôi đã nghĩ cho đến nay là bốn lựa chọn:

  1. Không làm gì cả, chấp nhận rằng hai lớp cung cấp chức năng lưu trữ có mặt.
  2. Tạo một lớp Facade để gắn giao diện của Zend vào triển khai bộ đệm của Doctrine.
  3. Tùy chọn 2, theo cách khác - tạo Mặt tiền để ánh xạ giao diện của Doctrine trên phụ trợ Zend Framework.
  4. Sử dụng kế thừa nhiều giao diện để tạo một giao diện để thống trị tất cả chúng và cầu nguyện rằng không có bất kỳ sự chồng chéo nào (nghĩa là: nếu cả hai đều có phương thức "lưu", chúng sẽ cần chấp nhận các tham số theo cùng một thứ tự do PHP thiếu đa hình thích hợp).

Lựa chọn nào là tốt nhất, hoặc có một biến thể "Không có ở trên" mà tôi không biết?


3
Có lẽ bạn nên mô tả vấn đề theo nghĩa thiết kế phần mềm tổng quát hơn, cho những người không biết PHP, ZF hoặc Học thuyết. Có phải hai thư viện lưu trữ cùng một thứ? Nếu vậy, tại sao không vô hiệu hóa một bộ đệm? Nếu không, vấn đề là gì? Đó là loại điều.
ngốc nghếch

Trước đây tôi đã làm việc với .NET CMS có nhà cung cấp bộ đệm truy cập cơ sở dữ liệu ORM và cơ sở dữ liệu riêng. Sau đó tôi đã phải tích hợp CMS với nền tảng kinh doanh của chúng tôi, nơi đã sử dụng nhà cung cấp bộ nhớ đệm hoàn toàn khác nhau. Điều này đã gây ra cho chúng tôi một vấn đề vì nhà cung cấp bộ đệm trong CMS không thể mở rộng cho trang trại web, khi nhà cung cấp bộ đệm nền tảng kinh doanh của chúng tôi có thể mở rộng. Những vấn đề bạn đang phải đối mặt mặc dù?
CodeART

Hãy xem Symfony2 và cách họ giải quyết vấn đề này.
nietonfir

Câu trả lời:


7

Không làm gì Chấp nhận rằng các dự án riêng biệt có thể có dự phòng miễn là chúng hoạt động trong không gian riêng của chúng (không gây ô nhiễm cho nhau các bộ đệm). Doctrine biết Zend có bộ nhớ đệm nhưng họ không muốn phụ thuộc vào Zend và ngược lại. Không phải tất cả mọi người muốn sử dụng Zend và Học thuyết.

Tôi sẽ để mã Doctrine sử dụng công cụ của riêng mình và sử dụng ZF cho mọi thứ khác. Bằng cách này tôi chỉ cần biết các lớp ZF. Bộ đệm dữ liệu chỉ nên được sử dụng bên trong bởi học thuyết cho đối tượng cơ sở dữ liệu. ZF có thêm giao diện người dùng hữu ích bên ngoài ORM, như giao diện bộ đệm ẩn trang html.

Tạo một lớp khác sẽ là lý tưởng nhưng nó sẽ thêm một phụ thuộc khác vào dự án, vì vậy không tốt cho việc bảo trì.

Tôi biết rằng trong bootstrap, nó có thể trông có vẻ dư thừa để thiết lập nhiều bộ đệm. Nó có thể trở nên tồi tệ hơn nếu bạn cố gắng sử dụng đồng thời ZF1, Doctrine và ZF2. Nhưng đó là một thời gian không đổi rất nhỏ vì họ chỉ thiết lập các biến, chưa kết nối với các đầu cuối.

Vì vậy, từ quan điểm lập trình, bảo trì và vận hành, tôi chỉ để họ một mình.


3

Lý do tại sao tôi cảm thấy đây là một vấn đề là trong quá trình khởi động ứng dụng của tôi, tôi phải cấu hình hai trình điều khiển bộ đệm - mỗi trình điều khiển có cú pháp riêng. Một sự không phù hợp dễ dàng được tạo ra theo cách này và cảm thấy không hiệu quả khi thiết lập hai kết nối đến phụ trợ bộ đệm vì điều này.

Tại sao không chỉ giải quyết vấn đề từ quan điểm "làm cho cấu hình thuận tiện hơn"?

Nói cách khác, viết một số lớp mới chấp nhận dữ liệu cấu hình của bạn và sau đó áp dụng nó cho cả trình điều khiển bộ đệm. Chắc chắn, nó không linh hoạt, nhưng điều đó cũng có nghĩa là ít có thể đi sai.


0

Tại sao không tạo ra một sự trừu tượng của giao diện của bạn có thể được chuyên biệt cho từng khung công tác? Tôi sẽ viết Trình điều khiển bộ đệm của riêng mình bằng các phương thức tôi cần, nó sẽ gói gọn cả hai bộ đệm. Sau đó tôi có thể quên chúng và chỉ nói chuyện với Người điều khiển của tôi. Bất kỳ vấn đề với giải pháp đó?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.