Tôi có một số nhầm lẫn về việc sử dụng Bộ điều khiển với Mô hình Kho lưu trữ trong khi vẫn duy trì Nguyên tắc RẮN. Xem xét, tôi có hai loại Báo giáNguyên tắc RẮN Trong Laravel với Mô hình Kho lưu trữ
- Báo giá thương mại
- Báo giá cá nhân
Và có một cơ hội cao loại mới của trích dẫn trong tương lai. Mỗi Báo giá có các lĩnh vực khác nhau, logic kinh doanh nhưng họ chia sẻ nhiều chức năng phổ biến. Vì vậy, tôi đã tạo ra một QuotationInterface
Báo giá inteface
interface QuotationInterface
{
public function save(array $data);
}
lớp Báo giá mà thực hiện giao diện
class CommercialQuotation implements QuotationInterface
{
public function(array $data)
{
// save commercial quotation
}
}
class PrivateQuotation implements QuotationInterface
{
public function(array $data)
{
// save Private quotation
}
}
Báo giá Repository
class QuotationRepository
{
public function save(array $data, QuotationInterface $quotation)
{
$quotation->save($data);
}
}
QotationController
public function store(Resource $resource)
{
$inputs = $resource->all();
/**
* Clearly here Open/Close Principle is broken
*/
if ($inputs['type'] == 'private'){
$quotation = new PrivateQuotation;;
}
else if($inputs['type'] == 'commercial'){
$quotation = new CommercialQuotation;
}
$this->repo->save($inputs, $quotation);
}
đây trong QuotationController của tôi, nó đang vi phạm rõ ràng Mở/Đóng Nguyên tắc ..
có phải là một ý tưởng tốt để tạo một điều khiển đối với từng loại ngoặc kép (có thể Hơn 10 ngày, ai biết?) để tránh vi phạm OCP hoặc thiết kế của tôi là sai? Bất kỳ đề xuất, mẹo thay đổi thiết kế, tài nguyên đều được chào đón.
LƯU Ý: Bộ điều khiển báo giá của tôi sẽ có nhiều chức năng khác ngoại trừ chức năng lưu.
Tôi sẽ làm theo ví dụ của bạn. Cảm ơn. –
Sự cần thiết phải sửa đổi nhà máy là một vi phạm cổ điển của Nguyên tắc Mở/Đóng: nó có nghĩa là mã không bị đóng để sửa đổi. Trong thực tế, chuyển đổi/trường hợp luôn luôn là một vi phạm của OCP, đó là lý do tại sao nó không được bao gồm trong mô hình thiết kế phương pháp nhà máy GoF. Mẫu thiết kế dựa trên đa hình. – jaco0646
@ jaco0646: Các mẫu thiết kế không phải là quy tắc tuyệt đối, nhưng đó là định dạng nhập để đánh giá chúng theo tình hình thực tế. Trong một trường hợp như thế này, một nhà máy đơn giản có thể là một giải pháp tốt.Như tôi đã đề ra ở cuối bài viết của tôi, tùy thuộc vào kiến trúc của ứng dụng, op có thể thực hiện một nhà máy trừu tượng hoặc một phương thức factory – Moppo