Đánh giá các không gian tên PHP


11

Tôi đang ở giai đoạn tiền phát hành của một dự án PHP nguồn mở, một dự án mà tôi hy vọng sẽ được các nhà phát triển khác sử dụng trong các dự án của riêng họ. Dự án hiện không hỗ trợ các không gian tên và tôi đang cố gắng đánh giá xem có nên sử dụng không gian tên hoặc quy ước đặt tên PEAR của Dir_Subdir_Class, dường như có tất cả các lợi ích kỹ thuật giống nhau mà không có một số nhược điểm. Thành thật mà nói, đó không phải là một lựa chọn dễ dàng.

Một số điểm xem xét đối với không gian tên:

  • Một trong những cách mà dự án của tôi đang cố gắng tạo sự khác biệt bằng cách cung cấp API đơn giản hơn các dự án tương tự khác. Bởi vì các không gian tên là mới và cũng vì chúng phức tạp hơn quy ước đặt tên PEAR, nên việc đưa chúng vào cơ sở mã sẽ làm cho dự án của tôi sử dụng ít đơn giản hơn. Bằng cách thực hiện chúng, tôi mất một số khác biệt về tính dễ sử dụng.
  • Mặc dù tôi có thể thấy một số lợi ích đối với không gian tên, nhưng dường như chúng không giải quyết được vấn đề cần giải quyết trong một sản phẩm PHP hiện đại sử dụng quy ước đặt tên PEAR. Đặt tên xung đột trong khi sử dụng dự án của tôi nên là tối thiểu nếu không phải là không tồn tại.
  • Bài viết này cung cấp cho tôi một số tạm dừng trong việc áp dụng các không gian tên vì việc triển khai của chúng ít hơn sao.
  • Tôi cũng ngần ngại nhảy lên một nhóm nhạc có thể không đi đâu cả. Vì không gian tên là một tính năng mới của PHP, tôi chưa tin rằng chúng sẽ trở thành tiêu chuẩn.
  • Khả năng tương thích. Hầu như tất cả các mã PHP đã được viết không sử dụng không gian tên vì đây là một tính năng mới. Các thư viện khác sẽ không tương thích nếu không có chuyển đổi.

Một số điểm để sử dụng không gian tên:

  • Nhận thức. Nếu không gian tên trở thành tiêu chuẩn và thông lệ tốt nhất, dự án của tôi có thể nhanh chóng bị xem là không chuyên nghiệp và lỗi thời nếu không có chúng.
  • Cuộc thi. Trong khi một số dự án PHP cạnh tranh đang bắt đầu sử dụng các không gian tên trong các phiên bản mới nhất của chúng, nhiều dự án vẫn chưa có bước nhảy vọt. Làm như vậy bây giờ có thể giúp dự án của tôi dự phòng cho các dự án khác.
  • Công việc trong tương lai sẽ dễ dàng hơn nếu tôi thực hiện chuyển đổi ngay bây giờ trước khi dự án được công khai thay vì sau đó, nơi tôi sẽ phải hỗ trợ hai phiên bản của nó trong một thời gian.
  • Tôi muốn hỗ trợ các thực tiễn tốt nhất và nếu không gian tên trở thành một thực tiễn tốt nhất cho PHP, dự án của tôi nên sử dụng chúng.

Từ những gì tôi có thể nói, bạn phải chọn cách này hay cách khác; bạn không thể làm cả hai. Có điểm nào mà tôi chưa xem xét? Có bất kỳ dấu hiệu khách quan nào (không có flamewar, xin vui lòng) hướng tới hoặc chống lại không gian tên trở thành tiêu chuẩn chuyên nghiệp cho PHP? Tôi sẽ đánh giá cao bất kỳ cái nhìn sâu sắc hoặc tài nguyên nào mà bạn sẽ sẵn sàng chia sẻ vì tôi cần sớm đưa ra quyết định.

Câu trả lời:


5

Hai dấu hiệu cho thấy không gian tên trong PHP ở đây:

  1. Lược đồ đặt tên PEAR đã bị bỏ qua có lợi cho các không gian tên trong PEAR2 .
  2. Một trong những mục tiêu đã nêu của Zend Framework 2.0 là trở thành một ví dụ điển hình cho việc sử dụng PHP 5.3 , bằng cách sử dụng đầy đủ các không gian tên, trong số những thứ khác. Tôi coi đây là một dấu hiệu mạnh mẽ cho thấy Zend hoàn toàn cam kết với các không gian tên và sẽ tiếp tục hỗ trợ và phát triển chúng (hy vọng sẽ tốt hơn).

Tôi hoàn toàn đồng ý với bạn rằng việc triển khai các không gian tên hiện tại là thiếu, để nói rằng ít nhất, nhưng các đối số của bạn chống lại việc sử dụng chúng không phải là vững chắc. Ngay cả ở dạng hiện tại, không gian tên cung cấp cho:

  • Tổ chức mã tốt hơn,
  • Tránh va chạm đặt tên,
  • Bối cảnh cho các lớp, hàm và hằng.

Hãy nhớ rằng hầu hết các đối số chống lại không gian tên PHP là bằng cách so sánh với việc triển khai trong các ngôn ngữ khác và không chống lại giá trị thực tế của chúng như là một tính năng.


+1 cho các liên kết. Bạn có thể mở rộng về tổ chức mã và điểm bối cảnh tốt hơn không? Tôi có một chút khó khăn để hiểu làm thế nào nó cung cấp tổ chức mã tốt hơn. Dường như hầu hết các dự án sẽ bám vào lớp 1: 1 để cấu trúc tệp được nhóm trong các thư mục logic, giống như bạn sẽ sử dụng trong sơ đồ đặt tên PEAR. Ngay cả ZF2 trông giống như nó đang sử dụng cùng một cấu trúc thư mục và tệp trong hầu hết các trường hợp, nhưng chỉ là bây giờ với các không gian tên. Nó khác nhau, nhưng tôi không nhất thiết phải thấy nó tốt hơn hoặc có tổ chức hơn các thư mục và tệp được đặt tên tốt ở vị trí đầu tiên.
VirtuosiMedia

Tôi gặp rắc rối với các điểm bối cảnh là tốt. Nếu bất cứ điều gì, có vẻ như không gian tên loại bỏ bối cảnh để có một phong cách mã hóa ngắn gọn hơn thay vì thêm bối cảnh. Ví dụ, nếu tôi khởi tạo một lớp mới sâu trong một tệp, bây giờ tôi cần tìm nơi không gian tên được khai báo để tìm ra nó thuộc lớp nào thay vì có ngay lập tức từ tên lớp. Trừ khi tôi thiếu một cái gì đó, có vẻ như các không gian tên ít dài dòng hơn, nhưng với chi phí rõ ràng.
VirtuosiMedia

@VirtuosiMedia Các PEAR và các đề án đặt tên ZF cũ thi đua không gian tên, vì vậy ba điểm của tôi là hơi đúng đối với họ quá. Điều tôi đang cố gắng chỉ ra là nếu những điểm đó là đúng trong quá trình triển khai các không gian tên PHP hiện tại, thì các snafus nhỏ của chúng không đủ để không sử dụng chúng. Với tổ chức mã tốt hơn, ý tôi là chủ yếu trên các tệp, áp dụng cấu trúc và phân cấp hợp lý và hợp lý cho các lớp của bạn, điều gì đó tất nhiên là khả thi nếu không có không gian tên. Nhưng không gian tên (và các sơ đồ mô phỏng chúng) là một tính năng giúp bạn đạt được cả ba điểm cùng một lúc.
yannis

Gotcha. Cảm ơn bạn đã làm rõ. Bạn có thấy những lợi thế đáng kể cho không gian tên thực tế so với không gian tên được mô phỏng không?
VirtuosiMedia

1
@VirtuosiMedia Tất cả các điểm để sử dụng không gian tên bạn thực hiện cho câu hỏi là hợp lệ. Tôi sẽ thêm rằng các không gian tên PHP giúp mã của bạn cảm thấy tự nhiên hơn một chút đối với các lập trình viên từ các nền tảng khác nhau, một cái gì đó có thể là vô giá trong một dự án lớn. Ngoài ra, không có một tiêu chuẩn nào cho các không gian tên được mô phỏng , chắc chắn rằng hầu hết chúng đều giống nhau nhưng sử dụng các không gian tên thực tế đảm bảo rằng mọi người đều sử dụng cùng một lược đồ. BTW có một trình đặt tên ngoài đó bạn có thể sử dụng để xác định tên mã của mình.
yannis
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.