2010-03-10 25 views
8

Singleton, Decorator, Abstract, Factory và danh sách tiếp tục. Các mẫu thiết kế OO có liên quan như thế nào trong việc phát triển các ứng dụng PHP cho web? Liệu nó có làm gì để thực hiện? Hoặc là nó chỉ để giữ mã nạc cho thực hành phát triển nhanh? Ai là người tài trợ chính cho việc triển khai các mẫu thiết kế này? Đó có phải là khách hàng hoặc nhà phát triển không?Làm thế nào có liên quan là các mẫu thiết kế OO để phát triển web trong PHP?

Tôi nhận ra rằng tôi đang đặt nhiều câu hỏi nhưng tất cả chúng đều liên quan đến cùng một chủ đề. Tôi không chắc chắn có một sự cần thiết cho các mẫu thiết kế OO với một ngôn ngữ kịch bản vì nó được biên dịch tại thời gian chạy. Tất cả các bạn nghĩ gì? Nó quan trọng?

Trả lời

9

Các mẫu thiết kế được tạo ra để giải quyết các vấn đề cụ thể. Những vấn đề này xảy ra cho dù bạn sử dụng PHP hay bất kỳ ngôn ngữ nào khác (mặc dù các mẫu có thể khác nhau theo ngôn ngữ). Hầu hết các mẫu có nguồn gốc của họ trong thiết kế hướng đối tượng, nhưng có thể thích nghi với các thiết lập thủ tục. Sử dụng mẫu thiết kế khi bạn gặp sự cố rằng mẫu địa chỉ, cho dù là PHP hay bất kỳ ngôn ngữ nào khác. Không sử dụng một mẫu thiết kế chỉ vì nó là một "mẫu thiết kế" - biết làm thế nào và khi nào nó được áp dụng và khi nào nó không.

Có nói rằng, phần lớn các mẫu thiết kế là gì, là tổ chức mã để hoàn thành mục đích của chúng theo cách sạch sẽ, dễ hiểu. Có nhiều cách khác để giải quyết vấn đề, nhưng mẫu thiết kế là một phương pháp được công nhận, rõ ràng và dễ hiểu. Nếu bạn cần giải quyết một vấn đề được giải quyết bằng một mẫu cụ thể, bạn thường sẽ sử dụng mẫu tốt nhất (hoặc điều chỉnh mẫu) thay vì chọn một phương án thay thế.

Sử dụng các mẫu, khi thích hợp, mang lại lợi ích cho cả nhà phát triển hiện tại và tương lai - mã rõ ràng, rõ ràng hơn - và khách hàng - ít thời gian hơn để phát minh lại bánh xe, mã mạnh mẽ hơn. Sử dụng các mẫu khi chúng không phải là những lợi ích thích hợp không ai; nó có khả năng là một tập thể dục trong sự thất vọng cố gắng thích ứng với một mô hình để giải quyết một vấn đề không liên quan và nhiều hơn khả năng sẽ đơn giản làm cho mọi thứ trở nên phức tạp hơn.

+0

Câu trả lời hay! có bất kỳ nơi nào trên web nơi bạn có thể tìm thấy các hướng dẫn về học tập để nhận ra các mẫu và thời điểm sử dụng chúng không? Cách tốt nhất để tìm hiểu chúng là gì? –

+0

Có một cuốn sách của những người kiến ​​trúc sư PHP về các mẫu thiết kế trong PHP, mà tôi đã thấy hữu ích vì nó giải thích cách mỗi mẫu hoạt động trong ngữ cảnh của ngôn ngữ. Học cách nhận ra chúng là gì và khi nào nên sử dụng chúng ... khó hơn một chút, nó chỉ đi kèm với thực hành. –

+0

Cuốn sách Gang of Four (http://c2.com/cgi/wiki?DesignPatternsBook) là một nơi tốt để bắt đầu, nhưng việc triển khai sẽ cần phải được dịch sang PHP. Định dạng của các mẫu tự cho bạn biết vấn đề gì mô hình giải quyết. Điểm khởi đầu tốt sẽ là mục nhập wikipedia: http://en.wikipedia.org/wiki/Design_Patterns – tvanfosson

1

Có, nhưng bạn phải chọn đúng mẫu cho nền tảng. Cho đến nay, mẫu thiết kế OO quan trọng nhất là MVC (Model-View-Controller), tất cả các khung công tác chính (CakePHP, CodeIgniter, v.v.) đều sử dụng.

+0

Tôi là một fan hâm mộ lớn của CakePHP và MVC nói chung. Tôi tin rằng nó mang lại cấu trúc cho cơ sở mã của bạn cho chắc chắn. Nhưng MVC là một mẫu thiết kế hay một kiến ​​trúc? Hay là mô hình/kiến ​​trúc đồng nghĩa? –

+0

Nó có thể được tranh luận cho dù đó là một kiến ​​trúc hay một mẫu thiết kế, nhưng MVC là một mô hình cơ bản cho phát triển web hiện đại - để tổ chức mã, làm cho nó thêm mô-đun, duy trì, v.v ... –

+0

Tôi đồng ý, tôi thích sử dụng MVC . Nó chỉ làm mọi thứ dễ dàng hơn. –

1

Sử dụng OOP và phương pháp không OOP có thể có sự khác biệt nhỏ trong performance, với không OOP là bit nhanh hơn, nhưng sự khác biệt sẽ không đáng kể thực tế.

Tôi nghĩ rằng các mẫu thiết kế OO sẽ mang lại lợi ích cho tổ chức mã, nhưng các vấn đề thiết kế vẫn còn tùy thuộc vào bạn. Tôi nghĩ bạn sẽ có lợi nhiều hơn người dùng. Người dùng có thể thấy kết quả tương tự cho dù bạn sử dụng OOP hoặc không OOP.

+0

Thông tin chi tiết tuyệt vời! Tôi đã nhận thấy từ tất cả các mã tôi đã xem xét trong cuộc đời của tôi mà những người khác cảm thấy như vậy. Một số mã sẽ mất nhiều thời gian hơn để tăng tốc hơn để viết các bản cập nhật cho một khi bạn đã tìm ra những gì đang diễn ra trong đó. –

+2

Cá nhân tôi thích phương pháp OOP. Nó tiết kiệm cho tôi rất nhiều thời gian cố gắng để thay đổi tất cả các mã khi tôi có thể thực hiện những thay đổi ở một vài nơi. –

3

Các mẫu thiết kế OO có liên quan như thế nào trong việc phát triển các ứng dụng PHP cho web?

IMO chúng rất phù hợp với bất kỳ ứng dụng PHP không tầm thường nào, miễn là mẫu bạn đang sử dụng được áp dụng cho sự cố trong tầm tay.

Ứng dụng có hoạt động không?

Không nhất thiết và bạn có thể thực hiện điều đó ở cả hai khía cạnh tích cực và tiêu cực. Hầu hết các mẫu thiết kế phổ biến sẽ không trực tiếp thêm bất kỳ lợi ích hiệu suất tích cực nào và một số cấu trúc thừa kế hoặc lớp học có thể thêm chi phí hiệu suất không đáng kể (tôi nhấn mạnh không đáng kể).Những lợi ích của việc sử dụng các mẫu nổi tiếng, khi áp dụng, lớn hơn những chi phí không đáng kể này.

Một ví dụ tôi có thể nghĩ về nơi mà một mô hình sẽ trực tiếp cải thiện "hiệu suất" (liên quan đến sử dụng bộ nhớ) sẽ là việc sử dụng thích hợp của mẫu đơn. Nếu bạn thực sự chỉ cần một cá thể của một đối tượng tại bất kỳ thời điểm nào, thì bạn sẽ giảm thiểu việc sử dụng bộ nhớ bằng cách sử dụng cá thể đó.

Hoặc là chỉ để giữ mã gọn gàng cho thực tiễn phát triển nhanh?

Tôi muốn nói rằng việc sử dụng đúng mẫu sẽ giữ mã dễ bảo trì hơn là "gọn gàng". Điều này sẽ tạo thuận lợi cho bất kỳ chu kỳ phát triển nào, bao gồm cả nhanh nhẹn, vì mã sử dụng các mẫu nổi tiếng dễ đọc hơn.

Ai là người tài trợ chính để triển khai các mẫu thiết kế này? Đó có phải là khách hàng hoặc nhà phát triển không?

Chủ yếu là nhà phát triển (đặc biệt nếu đó là nhà phát triển số nhiều trong đó một nhóm đã xem xét cùng một mã.) Có tác động gián tiếp đến khách hàng trong mã được viết rõ ràng đó rõ ràng sẽ có ít lỗi hơn và phần mềm sử dụng các mẫu có thể sẽ có ít thời gian quay vòng hơn từ việc phát minh lại bánh xe.

+0

Tôi đồng ý với tất cả phản hồi của bạn. Vậy tại sao nó lại có quá nhiều "khách hàng" nhỏ đến trung bình thích sử dụng các lập trình viên ít kinh nghiệm/rẻ tiền hơn?Có lẽ họ chỉ không quan tâm làm thế nào ruột can nhìn miễn là nó có một động cơ lớn và sơn là sáng bóng, eh? –

+1

Tôi nghĩ rằng các khách hàng vừa và nhỏ thích lập trình rẻ hơn đơn giản vì chúng rẻ hơn. Nếu được lựa chọn giữa nhà phát triển rẻ tiền sẽ viết mã spaghetti và nhà phát triển đắt tiền hơn sẽ viết mã tuyệt vời, rất nhiều khách hàng, đặc biệt là khách hàng mới phát triển phần mềm ký kết, sẽ chọn nhà phát triển giá rẻ. Tốt mã là khó để định lượng. Các SMB có kinh nghiệm hơn sẽ biết một chút về những gì cần tìm kiếm, hoặc ít nhất sẽ xem xét nghiêm túc danh mục đầu tư của bạn. – schematic

0

Thuật toán nào (như quicksort) là lập trình thủ tục, các mẫu thiết kế là thiết kế hướng đối tượng. Họ đã được chứng minh cách để slove một số vấn đề phổ biến.

Người hưởng lợi chính là người phá sản - nhưng như là một tác dụng phụ, khách hàng có thể sẽ có được sản phẩm cuối cùng tốt hơn.

Bất cứ khi nào chúng có liên quan hay không, tùy thuộc vào các yêu cầu và cách tiếp cận ứng dụng nhất định mà bạn đã chọn lựa. Nó có thể âm thanh laconic, nhưng khi bạn bắt đầu để phân tích ứng dụng của bạn và so sánh các yêu cầu thiết kế của nó với các mẫu hiện có bạn sẽ biết làm thế nào và khi nào sử dụng chúng.

+0

Tốt hơn theo cách nào? Tôi biết nhiều khách hàng muốn trả một học sinh trung học $ 500 để dán trang web của họ hơn là trả một kỹ sư $ 1500 để xây dựng cho họ một cái gì đó ngoạn mục. Vậy làm thế nào để chúng ta có được khách hàng nhận ra rằng họ có được thứ gì đó "tốt hơn" bằng cách thuê kinh nghiệm? –

+0

Thông thường mã định hướng đối tượng linh hoạt hơn so với thủ tục một và điều này có thể được "chạm" bởi người dùng cuối. Tất nhiên, mã thủ tục tốt có thể hoạt động tốt hơn so với định hướng đối tượng không tốt. Khi bạn đã quen thuộc với các mẫu đó, bạn sẽ trở nên hiệu quả hơn -> thêm thời gian để viết mã -> mã tốt hơn -> sản phẩm cuối cùng tốt hơn. Nhưng như bạn đã nói, tất cả đều phụ thuộc vào yêu cầu của khách hàng. – doc

Các vấn đề liên quan