Tại sao Zend Framework lại phức tạp như vậy?


42

Tôi là nhà phát triển web và có kinh nghiệm phát triển một số ứng dụng web trong PHP. Tôi có ý tưởng tự phát triển sản phẩm và quyết định sử dụng khung dựa trên MVC vì tôi thực sự thích ý tưởng về MVC và cách người ta có thể dễ dàng quản lý và sửa đổi ứng dụng mà không gặp khó khăn gì.

Tôi đã chọn Zend Framework và có vẻ khó hơn học một ngôn ngữ lập trình mới. Có rất nhiều thứ xảy ra cùng một lúc thậm chí để chạy một ứng dụng nhỏ.

Tương tự, ý tưởng định tuyến rất phức tạp vì nó là mới đối với một lập trình viên cốt lõi. Tôi biết rằng những người ở đây đã đọc hàng ngàn câu hỏi như vậy mà tôi đang hỏi nhưng tôi không muốn tìm hiểu Zend Framework chỉ sau một đêm. Tôi sẵn sàng cho nhiều thời gian như nó cần nhưng cho đến bây giờ nó không có ý nghĩa gì với tôi. Có hàng ngàn lớp trong thư viện Zend, nhưng làm thế nào một noob biết nơi sử dụng một lớp specfic và làm thế nào để sử dụng nó? Tôi vẫn thấy rất khó để hiểu bootstrap của Zend Framework và ánh xạ của nó. Tôi đọc hướng dẫn, làm theo và mọi thứ bắt đầu hoạt động nhưng tôi thực sự không biết chính xác chúng đang diễn ra như thế nào.

Tôi cũng vẫn chưa biết các mô hình, khung nhìn và bộ điều khiển hoạt động cùng nhau như thế nào và cách lập kế hoạch cho một ứng dụng trong Zend Framework. Khi nói đến cốt lõi php, tôi chính xác có ý tưởng phải làm gì và dễ dàng dịch chúng theo mã nhưng trong Zend Framework tôi không biết cách dịch ý tưởng của mình.


10
Nếu bạn chưa quen với MVC, hãy tự triển khai một giàn giáo MVC trước khi sử dụng bất kỳ ứng dụng nào đầy đủ - chúng không tốt cho việc học.
treecoder

2
@greengit đó là những gì tôi đã làm!
Kyle Hodgson

Zend Framework không khó, nó đòi hỏi một chút thời gian để tìm hiểu, do tài liệu không tốt, nhưng tôi có thể đảm bảo với bạn rằng đó là một khung rất mạnh. Chúng tôi đã xây dựng phần mềm doanh nghiệp lớn trên ZF2 và tính linh hoạt về cấu hình là phi thường trong ZF.
albanx

Câu trả lời:


38

Khung Zend là khó. Nó không được xây dựng như một khung cấp nhập cảnh, kiến ​​thức về các khái niệm liên quan được giả định 1 . Điều đó nói rằng, yêu cầu đầu tiên đối với Zend Framework 2.0 là làm cho nó dễ dàng hơn một chút:

Dễ dàng học tập

Vào cuối năm 2009, chúng tôi đã thực hiện một cuộc khảo sát về người dùng khung để xác định những gì họ sử dụng, môi trường họ sử dụng và nhu cầu của họ là gì. Vấn đề hàng đầu, không có gì, là khó khăn trong việc học khung. Một số vấn đề này bao gồm:

  • Khó khăn trong "giờ đầu tiên" với khuôn khổ.
  • Không chắc chắn về "các bước tiếp theo" sau khi bắt đầu nhanh.
  • API không nhất quán trong chính mã nguồn. Một thành phần có thể sử dụng "plugin", "trình trợ giúp" khác và "bộ lọc" khác.
  • Không chắc chắn về nơi tồn tại các điểm mở rộng và cách lập trình cho chúng.
  • Nhầm lẫn về việc họ có thể sử dụng Zend Framework chỉ như một ngăn xếp MVC hoặc như các thành phần riêng lẻ.

Vì vậy, không chỉ riêng bạn, mọi người đều khó khăn - đọc toàn bộ trang wiki, có khá nhiều điều được xác định là phức tạp không cần thiết. Nhưng ngay cả khi yêu cầu trên được đáp ứng, nó vẫn không trở thành khung mức nhập cảnh, nghĩa là nó không phải là khung bạn nên học, mà là một khung mà bạn nên sử dụng khi bạn thực sự hiểu các khái niệm liên quan.

Vì bạn vẫn đang học, nên việc xây dựng kiến ​​trúc MVC của riêng bạn sẽ có giá trị hơn rất nhiều. Bài viết nổi tiếng của Rasmus Lerdorf 2 " Bài viết blog về khung công tác PHP MVC không khung " đưa ra một ví dụ rất đơn giản và rõ ràng về MVC thông qua PHP thủ tục, không có bất kỳ khung hoặc thư viện bên thứ ba nào khác tham gia.

Nhưng nếu bạn thực sự muốn học với một khung công tác, bạn nên xem xét một khung vi mô thay vì một khung đầy đủ. Slim có một cơ sở mã rất nhỏ, sạch sẽ và được kiểm tra kỹ lưỡng và nó nên là lý tưởng cho việc học tập. Tôi chưa chơi xung quanh với bất kỳ khuôn khổ vi mô nào khác, bạn nên tự nghiên cứu và quyết định xem cái nào tốt hơn cho bạn.

Và để có một giới thiệu nhanh chóng và bẩn thỉu về định tuyến, hãy xem câu trả lời của tôi cho câu hỏi này . Đây không phải là một khái niệm quá khó để nắm bắt, nhưng Zend Framework thực sự khiến nó trông giống rất nhiều so với thực tế .

1 Mô tả tốt nhất tôi đã đọc cho ZF là đó là khung xây dựng khung chứ không phải khung ứng dụng. Đó là sức mạnh thô và danh sách các tính năng cực kỳ không phù hợp với các trang web vừa và nhỏ. Thật không may, thực sự không thể tìm thấy nơi tôi đọc nó.

2 Đọc từ chối trách nhiệm ở đầu bài viết trên blog.


Cập nhật, lấy cảm hứng từ bình luận của @ Karpinie:

Một khung không được coi là khó, toàn bộ quan điểm của khung là làm cho mọi thứ dễ dàng hơn. Có thể là ngay cả khi nắm vững các khái niệm liên quan, ZF không phù hợp với bạn.

Có rất nhiều yếu tố chủ quan liên quan khi chọn khung và trừ khi mọi khung khác thiếu chức năng bạn thực sự cần - và không thể tự viết, bạn nên tránh ZF và sử dụng khung làm việc tự nhiên hơn với bạn.

Nếu bạn biết các khái niệm, khung không nên cản trở.


3
Ngay cả với kiến ​​thức về các khái niệm, thật khó để tham gia, và thành thật mà nói tôi không nghĩ rằng nó đáng để nỗ lực. Tài liệu thường sai, ví dụ trên web sau khi hết hạn, kênh hỗ trợ IRC nói chung đã chết và từ những gì tôi thấy không có nơi nào khác để nhận hỗ trợ.
Sevenseacat

@Karpie Tôi không thấy khó khăn lắm, phải trung thực. Nhưng đó là loại thành ngữ, vì vậy nó chắc chắn phù hợp với một số nhà phát triển tốt hơn những người khác. Chẳng hạn, tôi thấy nó dễ hiểu hơn CodeIgniter, nhưng đó chỉ là do quy trình cá nhân của tôi: Tôi thích đọc mã hơn tài liệu và mã của CI quá tào lao, tâm trí tôi ngừng hoạt động. Nhưng đối với hầu hết các nhà phát triển, CI dễ học hơn rất nhiều so với ZF và không phải ai cũng đồng ý rằng mã của CI chứa đầy rác rưởi. Điều quan trọng là một khung công tác không được coi là khó sử dụng, nếu nó luôn có những khung khác.
yannis

Tôi thấy Zend Framework 1 tương đối dễ nắm bắt. Nhưng bạn nói ý tưởng đằng sau ZF2 là để làm cho nó dễ dàng hơn , tôi cảm thấy như đó là nhiều hơn phức tạp hơn bao giờ hết.
mua777

Mọi thứ trong ZF2 đều quá phức tạp. Sẽ là ổn khi trình bày "khung" Zend dưới dạng tập hợp các mô-đun / thư viện. Khung thực tế bị thiếu. Không có lớp mô hình, vì vậy bạn hoặc phải tự thực hiện, thường là một mớ hỗn độn hoặc sử dụng Doctrine, đòi hỏi một số tích hợp. Để viết một số bài kiểm tra đơn vị, bạn cần dành một lượng thời gian vô lý để giải mã hướng dẫn và viết (hoặc cố gắng tìm trực tuyến) một số mã chỉ để khởi động bài kiểm tra của bạn. Trong khi nó có thể được xây dựng xung quanh các khái niệm âm thanh, sự giải thích của họ về các khái niệm đó là khủng khiếp.
vladko

11

Tôi không thích thiếu khả năng khám phá khi tôi bắt đầu sử dụng Zend Framework, quá nhiều lớp dựa vào mảng và bạn phải tìm kiếm những khóa nào bạn có thể / cần xác định.

Không có gì sai khi có các phương thức thiết lập rõ ràng hoặc các thông số được đặt tên, nó sẽ, đi một chặng đường dài để giúp khám phá.

Khung Yii thậm chí còn tồi tệ hơn với loại điều này.


3
+1 Lý do quan trọng của tôi về việc không nghiêm túc xem xét sự hấp thu của ZF / ZF2 phải là sự xấu xí, tự động hoàn thành / gợi ý và tránh các cấu hình dựa trên mảng lồng nhau. Nó vi phạm cá nhân tôi không thích việc lạm dụng các mảng trong thế giới OO.
Gavin Howden

1
Chính xác là ý kiến ​​của tôi là tốt.
Daniel

Tôi không thấy Yii 1 quá khó khăn. Có lẽ đó là cho tôi. : P
Eugine Joseph

5

Một số vấn đề với ZF, gây khó chịu (và khó cho người mới bắt đầu) khi làm việc với:

ORM không bao gồm . Mọi người sẽ nghĩ rằng điều này rất nên dựa trên khung MVC hiện đại, nhưng ZF chỉ đi kèm với Zend_Db_Tablemức độ thấp đến mức nực cười. Bạn có thể sử dụng Học thuyết, nhưng sau đó bạn tự mình thực hiện, nó không được tích hợp với ZF.

Không thể đọc được, bộ định tuyến URL cồng kềnh . Ví dụ, phải mất 9 dòng mã để xác định định tuyến rất đơn giản:

$route = new Zend_Controller_Router_Route(
    'archive/:year',
    array(
        'controller' => 'archive',
        'action'     => 'show'
    ),
    array('year' => '\d+')
);
$router->addRoute('archive', $route);

Với số lượng câu hỏi liên quan đến vấn đề này , mọi thứ đều đơn giản nhưng đơn giản đối với hầu hết mọi người. Ngoài ra, tôi không thể giúp nó và so sánh nó với Django, nơi tương đương với nó ở trên

url(r'^archive/(?P<year>\d+)/$', 'archive.show')

Zend_Acllà cách để phức tạp cho hầu hết các trường hợp sử dụng. Thông thường bạn sẽ có xác thực để xác định người dùng. Và một tùy chọn để dễ dàng giới hạn quyền truy cập vào một số bộ điều khiển chỉ cho người dùng được xác thực. Đối với nhiều trường hợp người dùng là đủ. Đối với trường hợp phức tạp hơn, sẽ tùy thuộc vào logic nghiệp vụ trong bộ điều khiển để xác định xem người dùng có quyền thực hiện hành động nhất định hay không. Trong ZF, bạn không có tùy chọn chỉ dễ dàng giới hạn quyền truy cập đối với người dùng được xác thực, cách tiêu chuẩn là sử dụng ACL và hệ thống vai trò, bất kể nhu cầu của bạn thực sự đơn giản đến mức nào.

Thư mục cồng kềnh và bố trí tập tin . Cấu trúc thư mục được đề xuất trông như thế này:

<project name>/
    application/
        configs/
            application.ini
        controllers/
            helpers/
        forms/
        layouts/
            filters/
            helpers/
            scripts/
        models/
        modules/
        services/
        views/
            filters/
            helpers/
            scripts/
        Bootstrap.php
    data/
        cache/
        indexes/
        locales/
        logs/
        sessions/
        uploads/
    docs/
    library/
    public/
        css/
        images/
        js/
        .htaccess
        index.php
    scripts/
        jobs/
        build/
    temp/
    tests/

4

Zend Framework giống như một loạt các thư viện độc lập cùng hoạt động như một khung. Rất khó để phát triển một cái gì đó đồng thời tách rời và "dễ sử dụng". Để "dễ sử dụng", ý tôi là làm những việc phức tạp với vài dòng mã.

Vì vậy, bắt đầu với Zend khó hơn các khung khác, như CakePHP. Nhưng tôi cũng dễ dàng mở rộng và tùy chỉnh ứng dụng của bạn mà không có mã bẩn. Zend cũng tuân theo các tiêu chuẩn và các mẫu thiết kế trên toàn bộ mã của nó, vì vậy một khi bạn đọc mã khung, bạn có thể đoán những gì đang diễn ra.

Khi bạn nói rằng bạn không biết gì về cách các mô hình, khung nhìn và bộ điều khiển hoạt động cùng nhau, xin vui lòng, đừng đổ lỗi cho khung. Nó triển khai MVC giống như bất kỳ khung công tác nào khác, ngoại trừ nó tách Mô hình khỏi cấu trúc Cơ sở dữ liệu, trong rất nhiều khung được triển khai trong cùng một lớp. Vì vậy, bạn sẽ phải đối mặt với rất nhiều lớp như Zend_Db_Table, Zend_Db_Table_Row, Zend_Db_Table_Rowset, v.v ...

Đó là lý do tại sao tôi nghĩ Zend Framework phức tạp hơn, bởi vì nó rất tách rời và bạn có thể sử dụng các lớp của nó trong các dự án khác không sử dụng ZF.


3

Zend Framework yêu cầu một số nền tảng vững chắc trong OOP và các mẫu thiết kế. Từ kinh nghiệm của mình, tôi chỉ tìm thấy các lập trình viên Java-JEE-Struts-Spring có kinh nghiệm dễ dàng làm quen với Zend Framework. Nhà phát triển PHP trung bình thấy khó tiêu hóa các khái niệm và Kiến trúc đằng sau Khung công tác Zend. Nhưng thấy này! Zend Framework xuất phát từ công ty 'Zend' tạo ra PHP ngay từ đầu. Vì vậy, nó cần một số suy nghĩ có thể nếu không tôn trọng!


1
Rasmus Lerdorf đã tạo php, zend là một người hỗ trợ cao cho php. Từ những gì tôi nhớ lại.
Sarmen B.

Không thể không đồng ý ở đó. Tôi là một nhà phát triển Java. Tôi không chỉ tìm thấy đường vào ZF một cách dễ dàng mà còn thích nó hơn các khung công tác khác.
jkushner

-2

Tôi tin rằng zend chỉ là để làm cho mọi thứ trở nên phức tạp, MVC chỉ là một sự gian lận về mặt logic, nó hoạt động giống như PHP đơn giản. nhưng bạn đang phát triển nó trước MVC, như tách các tệp trong các thư mục khác nhau.

Hãy nhớ rằng ai đang nói rằng Zend rất an toàn và không thể hack, là một kẻ ngốc lớn. Zend cũng có thể hack dễ dàng nếu bạn không sử dụng biện pháp bảo vệ tiêm Mysql. Tôi muốn đề nghị bạn xác định các chức năng của riêng mình, sau đó tách các tệp của bạn trong các thư mục khác nhau để làm cho nó giống nhau như MVC lưu các chức năng, lớp và các tài liệu cốt lõi khác trong một thư mục có tên là trình điều khiển, sau đó thêm các trang web của bạn vào thư mục khác mà bạn cần để bao gồm tất cả các tệp chức năng thư mục này sẽ biết dưới dạng xem. đặt các tập tin javascript và css của bạn trong các thư mục khác nhau sẽ được gọi là mô hình.

Hãy nhớ rằng, trong thế giới này, nhiều người luôn làm việc chăm chỉ để làm cho mọi thứ trở nên phức tạp hơn, bởi vì chính họ là những người phức tạp để hiểu.

PHP là ngôn ngữ mà bạn đã học trong sách và từ giáo viên. Zend không chỉ là một khuôn khổ, để làm cho mọi thứ trở nên phức tạp cho khách hàng của bạn. vì vậy bất cứ khi nào khách hàng cần bất kỳ sửa đổi nào, họ sẽ chạy lại cho các nhà phát triển thực sự và những nhà phát triển đó sẽ tính phí cho bạn nhiều tiền hơn. Zend được bảo vệ tất cả chỉ là lời nói dối, một lỗi đơn giản như mã php đơn giản có thể khiến trang web bị hack.


-6

Ít nhất thì việc "bắt đầu nhanh" phải dễ dàng hơn để làm cho một khung công tác thân thiện ..... nếu bạn thích thứ gì đó khó hơn là điều tốt hơn thì tôi sẽ nói "ZF là khung PHP tốt nhất", nếu không thì KHÔNG. Tôi đã tải xuống ZF-2 và dùng thử (thật lòng tôi là người mới sử dụng ZF). Điều đáng buồn là tôi vẫn chưa tìm thấy một "hướng dẫn bắt đầu nhanh" vững chắc với Project Skeleton đơn giản trên internet. Tất cả những gì tôi đang tìm kiếm là cách đơn giản bao gồm các tệp thư viện và tạo một thư mục dự án với các tính năng MVC. Tôi đã sử dụng Codeigniter, Cake php, Yii nhưng tôi thấy nó khá không thân thiện. Vâng, tôi biết Zend nâng cấp PHP nhưng điều đó không có nghĩa đó là khung tốt nhất hoặc bất cứ điều gì bạn sẽ nói.


tiếp tục không thích .... LOL
Ram
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.