Liệu có ý nghĩa để tránh một khuôn khổ khi xây dựng một ứng dụng web lớn với PHP không?


9

Là một nhà phát triển ứng dụng web PHP trong vài năm nay, tôi đã có những chia sẻ về MVC và khung công tác. Lúc đầu tôi nghĩ chúng là thứ ngon nhất kể từ khi bánh mì cắt lát; mọi thứ dường như rất dễ thực hiện.

Tuy nhiên, bây giờ có vẻ như ứng dụng càng phức tạp thì khung công tác càng rắc rối, vì vậy tôi phải phát triển các cách giải quyết để khắc phục chúng. Cách giải quyết như vậy thường khá khó khăn và phức tạp vì tôi phải đi sâu vào mã lõi khung và thực hiện các thay đổi để nó hoạt động theo cách tôi muốn.

Ví dụ, trong một trong các dự án của tôi, nơi tôi sử dụng Slim (C) + Idiorm (M) + Twig (V) (mà tôi tin là rất linh hoạt), tôi phải tạo một chức năng tùy chỉnh chỉ để hiển thị dữ liệu động trong các mẫu cha mẹ; không có khung công tác, tôi có thể thực hiện đơn giản mysql_query () trong tệp được bao gồm.

Được rồi, khung rất tuyệt nếu tôi đang tạo một trang web hồ sơ công ty đơn giản; Tôi chỉ có thể quất một số mã trong một đêm và chúng thường sẵn sàng vào buổi sáng, và số lượng mẫu thực hành và thiết kế mã hóa tốt mà tôi học được từ chúng là rất có giá trị.

Nhưng thực sự, đối với một ứng dụng web phức tạp như hệ thống quản lý trường học dựa trên web tất cả trong một, các khung công tác thường cản trở quá trình kinh doanh của tôi như trong ví dụ trên.

Vì vậy, câu hỏi của tôi là: liệu có ổn không khi chỉ cần quay lại những điều cơ bản và sử dụng mã PHP và các thư mục tiêu chuẩn để thực hiện dự án tiếp theo của tôi, nơi có thể có một khung công tác và thư viện, với điều kiện tôi có thể sử dụng đủ các thực tiễn mã hóa tốt và tuân theo các mẫu thiết kế hợp lý như MVC? Nhóm phát triển của tôi khá nhỏ: chỉ có 2 lập trình viên và 1 nhà thiết kế. Các lập trình viên khác đồng ý với suy nghĩ của tôi ở trên.


1
"Tuy nhiên, ứng dụng càng phức tạp, tôi càng gặp nhiều rắc rối hơn với các khung công tác". Đây chỉ là tranh luận và chủ quan. Bạn có thể loại bỏ khiếu nại này và đi đến câu hỏi thực tế không? Bạn có thể cung cấp các ví dụ cụ thể, cụ thể về một vấn đề bạn muốn giải quyết không? Nếu đây chỉ là "Tôi không thích các khung công tác", thì đó thực sự không phải là một câu hỏi hay. Có lẽ bạn có thể tập trung vào một cái gì đó có câu trả lời thực sự, không phải là chia sẻ ý kiến.
S.Lott

@ S.Lott: Vâng, tôi có cung cấp một ví dụ trong câu hỏi của tôi. Và thực sự, tôi không ghét khuôn khổ. Tôi chỉ muốn biết mọi người nghĩ về việc không sử dụng khung PHP trong thời hiện đại.
Furunomoe

"Tôi thường phải tạo một chức năng tùy chỉnh chỉ để hiển thị dữ liệu động"? Không phải là một ví dụ rất chi tiết. Không rõ tại sao hoặc làm thế nào khuôn khổ làm bạn thất bại. Có một khả năng rất xa là bạn đã sử dụng khung không chính xác.
S.Lott

Câu trả lời:


17

Kinh nghiệm của tôi là khá nhiều đối nghịch với bạn. Khi thực hiện những việc nhỏ, nhanh chóng, một khung có thể "cản trở" một chút khi bạn cần trình bày mã của mình theo một cách nhất định và suy nghĩ cẩn thận về mọi thứ trước khi tiếp tục. Chỉ cần nhảy thẳng vào mysql_querybạn có thể có nguyên mẫu của bạn lên và chạy nhanh hơn nhiều.

Nhưng đối với các trang web lớn, phức tạp, việc đặt mã cẩn thận và thực sự suy nghĩ về cách bạn viết mã là vô cùng quan trọng nếu bạn muốn một trang web sẽ được duy trì trong tương lai.

Cụ thể, việc thêm mysql_querycác cuộc gọi vào các phần ngẫu nhiên của chu kỳ trang nói chung là một ý tưởng thực sự tồi tệ. Bạn có thể có một cái ở đây và một cái ở đó để bắt đầu và nó không phải là vấn đề lớn, nhưng chẳng bao lâu sau, bạn đã có hàng tá trải khắp nơi và bạn đang tự hỏi tại sao các trang của bạn chỉ mất 3 giây để hiển thị. Hoặc bạn thay đổi lược đồ của mình và các phần dường như không liên quan của trang web bị phá vỡ mà không rõ lý do.


1
Tất nhiên tôi không chỉ ném ngẫu nhiên mysql_query()ở đây và ở đó. Ý tôi là, trong PHP cổ điển tôi chỉ có thể thêm một lệnh gọi vào một cái gì đó giống như Categories::read_all()và lặp qua kết quả trong một số tệp tin.php, trong khi trong Twig tôi phải tạo một hàm Twig tùy chỉnh cho điều đó. Và để tạo mẫu, tôi thích các tính năng của giàn giáo :)
Furunomoe

1
bạn không cần một khung để cẩn thận đặt ra và suy nghĩ về mã của mình. làm điều đó dễ dàng hơn mà không cần khuôn khổ. khuôn khổ buộc các mẫu tổ chức mã tầm thường lên bạn.
Raynos

3
Các khung thực sự tỏa sáng khi bạn đang thực hiện các dự án phức tạp khi chúng xác định một bộ quy tắc và hướng dẫn mà bạn phải tuân theo. Tôi + 1'd câu trả lời của Dean vì đây cũng là kinh nghiệm của tôi.
Burhan Khalid

7

Theo tôi, một khung chỉ nên được sử dụng nếu nó làm cho quá trình phát triển dễ dàng hơn cho bạn, và không cồng kềnh. Không có gì sai khi không sử dụng khung hoặc xây dựng của riêng bạn, đặc biệt là cho các dự án nhỏ.

Rõ ràng bạn sẽ vẫn cần chú ý đến các khía cạnh cấu trúc và bảo mật, nhưng xem xét bạn đã sử dụng các khung công tác trong nhiều năm, bạn có thể đã biết những khía cạnh đó từ bên ngoài.

Đối với các dự án lớn hơn, tôi đồng ý với các dự án khác, có nghĩa là sử dụng khung có thể sẽ là lựa chọn tốt nhất về lâu dài.


Những gì dễ dàng hơn cho một trang web nhỏ có thể không dễ dàng hơn cho một trang web lớn. Và cách khác xung quanh.
Goran Jovic

1
@Goran Jovic, đồng ý.
Daniel Scocco

1
+1 cho building your own. Cho dù bạn có nhận ra hay không, bạn sẽ kết thúc với nhiều chức năng và / hoặc các lớp trợ giúp, có thể được coi là khuôn khổ của riêng bạn.
Izkata

5

Trải nghiệm của tôi với "khung" phía máy chủ khá khó chịu, ví dụ:

A) Jar tập tin địa ngục nơi các khung xung đột với nhau hoặc máy chủ ứng dụng cho các phiên bản không tương thích lẫn nhau của những thứ bạn không muốn và không biết bất cứ điều gì và không ở vị trí để ra lệnh vì dù sao nó sẽ ngăn bạn triển khai nhiều máy chủ.

B) Sự bùng nổ thảm khốc của việc tạo đối tượng đơn giản nhất thành hàng ngàn lần thực thi SQL không cần thiết.

C) Quan niệm kỳ quái rằng mã hóa 100 dòng XML bằng cách nào đó dễ dàng hoặc đáng tin cậy hơn so với mã hóa 2 dòng Java.

D) Nhu cầu viết 100 dòng POJOS phía máy chủ hoàn toàn không cần thiết để ánh xạ lên các đối tượng phía máy khách bằng ngôn ngữ khác hoặc đôi khi là nhiều ngôn ngữ khác (C # JS, v.v.)

E) Không có manh mối về những gì thực sự đã xảy ra khi bạn nhận được dấu vết ngăn xếp sâu 30 cấp thậm chí không bao gồm dòng mã bạn đã sử dụng để gọi khung.

Hãy là một kẻ bội ước, viết ra khuôn khổ của riêng bạn ... bạn sẽ không hối tiếc miễn là bạn lên kế hoạch trước để loại bỏ tất cả những thứ không cần thiết mà những người khác đánh lừa bạn nghĩ bạn cần. Sau đó, bạn sẽ hiểu tất cả về nó, nó sẽ xuất xưởng trong Kb thay vì Mb và nó có thể sẽ "chạy ở bất cứ đâu", một trong những nguyên tắc sáng lập của Java phải không?

Hãy thử nghĩ theo cách này "tại sao tôi cần điều này ... có phải chỉ để giữ cho khuôn khổ hạnh phúc?" .. Nếu tôi không cần điều đó, thì tôi không cần gì nữa?


4

Có một cách trình bày trở lại bởi các nhà phát triển Django, hiện tôi đang gặp khó khăn khi tìm kiếm, nhưng họ nói về "thung lũng hiệu quả" nơi một khuôn khổ giúp bạn làm việc hiệu quả hơn.

Giả sử bạn không có kiến ​​thức về khung khi bạn bắt đầu một dự án, năng suất ban đầu của bạn sẽ rất thấp - bạn sẽ học quy ước của khung chứ không phải là thành ngữ của ngôn ngữ (mà hy vọng bạn đã biết).

Sau một khoảng thời gian ngắn, bạn sẽ nắm bắt được các quy ước và đây là lúc các khung thực sự tỏa sáng - đột nhiên năng suất của bạn vượt qua mái nhà và bạn đang tiến bộ và tăng tốc đáng kinh ngạc thông qua sự phát triển.

Cuối cùng, mặc dù, dự án sẽ trở nên có kích thước lớn đến mức khung bị ràng buộc nhiều hơn lợi ích và bạn sẽ thấy chính mình chống lại khung để thử và thực hiện một số tính năng.

Trong bài trình bày, họ đề cập rằng tất nhiên nếu bạn đã có kiến ​​thức về các quy ước của khung thì các dự án có quy mô nhỏ hơn sẽ không gây trở ngại ban đầu cho hiệu quả.

Do đó, đối với các dự án nhỏ (theo kinh nghiệm của tôi, bất cứ điều gì dưới ~ 500 giờ) hiệu quả của bạn với một khung sẽ lớn hơn, có thể, hơn là hiệu quả của bạn mà không có. Khi bạn đã đạt đến một ngưỡng nhất định (trong khoảng từ 500 đến 800 giờ, IME), bạn sẽ bắt đầu nhận ra rằng có những hạn chế đối với những gì khung công tác có thể cung cấp.

Như đã nói, các khung mang lại lợi ích lớn hơn nhiều so với hiệu quả - một khung như Symfony hoặc Django hoặc (tôi giả định) Rails cung cấp một quy ước cho phép một nhóm linh hoạt linh hoạt và cũng cho phép khách hàng hoặc chủ sở hữu sản phẩm thay đổi nhân viên của họ mà không yêu cầu tài nguyên mới để hoàn toàn học lại một hệ thống mới - nếu họ quen thuộc với quy ước của khung và quy ước đó đã được tuân thủ, ban đầu họ sẽ có năng suất cao hơn nhiều so với cách khác.


4

Một khung được thiết kế tốt nên là một trợ giúp cho lập trình viên, không phải là một trở ngại. Nếu khung bạn đã sử dụng đang cản trở bạn quá nhiều, tôi sẽ khuyên bạn nên xem xét một khung khác. Mỗi cái có phong cách mã hóa riêng, và ưu và nhược điểm riêng.

Có nói rằng, khuôn khổ Zend dường như rất phổ biến những ngày này, và trung thực? Tôi đấu tranh để xem tại sao đôi khi. Tôi đã từng làm việc với nó trong quá khứ và tôi không thích kiến ​​trúc của nó một chút nào. Lớp Zend_Form bị áp đảo một cách lố bịch, hệ thống trang trí của nó hoàn toàn đáng sử dụng, và các nhà trang trí buộc các hình thức vào các khung nhìn, phá vỡ một khái niệm cơ bản về OOP nói rằng các đối tượng nên được ghép lỏng lẻo. Nó cũng có rất nhiều mã được triển khai là Singletones (rất tệ vì những lý do được ghi chép tốt nên tôi sẽ không nhắc lại) và đối tượng Registry cũng góp phần khuyến khích một kiểu mã hóa cẩu thả.

Tôi đã nghe nói rằng Zend Framework 2 (hiện đang ở giai đoạn thử nghiệm) là một sản phẩm tốt hơn nhiều, nhưng mùi vị xấu mà Zend 1 để lại trong miệng có nghĩa là tôi không vội vàng dùng thử.

Tuy nhiên, tại thời điểm này tôi chỉ đang ca ngợi. :) Có rất nhiều khung công tác ngoài kia, mỗi khung đều có ưu và nhược điểm, tôi khuyên bạn nên đánh giá một vài trong số chúng.


3

Những gì bạn mô tả đã được gọi là "sự phức tạp gây ra trừu tượng" trong quá khứ. Tài liệu duy nhất về việc quản lý nó là: Quản lý sự phức tạp gây ra sự trừu tượng của David Keppel. Keppel sẽ đề xuất rằng các khung có một thiết kế gây ra sự phức tạp gây ra sự phức tạp.


2

Làm việc với một khung là giúp bạn tăng tốc độ phát triển của mình bằng cách không phát minh lại bánh xe . Framework cũng cung cấp cho bạn các công cụ để giúp bạn thiết kế ứng dụng của mình đúng cách (nhưng nó không ngăn bạn thực hiện các quyết định thiết kế kém, ví dụ như truy cập cơ sở dữ liệu trực tiếp từ chế độ xem).

Đôi khi bạn cần một chức năng tùy chỉnh, có thể mất nhiều thời gian hơn để viết đúng. Nhưng nếu bạn liên tục hack và tìm cách giải quyết thì bạn đang làm việc theo khung hoặc khung không phù hợp với nhu cầu của bạn.

Điểm mấu chốt là điều này, sử dụng một khung lớn cho các dự án đơn giản (ví dụ: hiển thị một vài trường từ cơ sở dữ liệu) đôi khi có thể là quá mức cần thiết. Đối với các dự án lớn hoặc phức tạp, sử dụng một khung.


1

Có nhiều mặt để viết mã của riêng bạn so với sử dụng Khung:

Quy mô, kiến ​​thức cơ bản và kinh nghiệm của nhóm bạn đang làm việc : Nếu họ không bao giờ sử dụng khung hoặc có ý tưởng về cách kiến ​​trúc một ứng dụng, bạn sẽ tốt hơn với khung tài liệu tốt với nhiều ví dụ và thấy rằng bạn tăng tốc chúng lên.

Kích thước của ứng dụng : Bạn không bao giờ biết trước nó sẽ được sử dụng như thế nào. Vì vậy, bạn tốt hơn nên chuẩn bị cho sự phát triển và thay đổi. Có thể khung của bạn, mà bạn muốn viết mã trong một đêm, phát triển với nhu cầu của quản lý? Thay đổi loại trường trong DB và phải mất một phút hoặc một ngày để thực hiện, đó là quan điểm của tôi ở đây.

Chuẩn bị : Nếu bạn sử dụng một khung công tác, bạn có thể bắt đầu thiết kế ứng dụng thay vì mã hóa lõi của ứng dụng của mình, sử dụng một khung trong đó bảo mậttriển khai là những phần quan trọng, đó là việc mất rất nhiều thời gian. Mỗi lần.

Tôi luôn tranh luận với "ban quản lý" để sử dụng Symfony2 vì đây là khung phát triển web. Quản lý nghĩ rằng nó lớn, nó sẽ tốn tiền và tránh xa các lập trình viên khi đường cong học tập dốc.


0

Các khung vẫn sẽ được sử dụng cho bất kỳ ngôn ngữ nào trong hiện đại, đặc biệt là cho các dự án lớn. Dự án càng lớn thì khung càng quan trọng, vì vậy bạn biết logic ở đâu cho mọi thứ và mọi tính năng đều có bố cục tương tự nhau. Nó giúp sửa đổi dự án dễ dàng hơn và học dễ dàng hơn khi bạn biết nơi tìm kiếm tất cả quyền truy cập dữ liệu hoặc tất cả bản trình bày hoặc nơi quản lý quy tắc kinh doanh.

Cần phải chọn một khung phù hợp với dự án, một giải pháp doanh nghiệp đòi hỏi một khung có khả năng của doanh nghiệp. Đây là vấn đề bạn sẽ gặp phải khi sử dụng PHP. Nhiều (hầu hết) các khung không có ý định được sử dụng ở quy mô lớn, mặc dù chúng hoạt động tốt cho các trang cá nhân nhỏ hơn. Đối với một cái gì đó giống như hệ thống quản lý trường học mà bạn đề cập, nó sẽ đòi hỏi một khung mạnh mẽ hơn và có thể mất một thời gian để tìm một khung thích hợp trong PHP.

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.