Tôi nhận thấy trong Ruby, API của nhà cung cấp thường trả về kết quả là mảng? Các đối tượng cũ không đồng bằng (như POJO trong Java) có tiêu chuẩn cao hơn không? Nếu tôi viết thư viện của riêng mình, tôi có nên sử dụng
POJOs
PORO không?Đối tượng cũ đồng bằng trong Ruby?
Trả lời
Đó là tất cả các đối tượng, mọi lúc. Điều quan trọng là liệu các đối tượng được trả lại có hành vi liên kết với chúng hay không. Đó là tốt để làm điều này:
def read_first_and_last_name(data_source)
[data_source.read_string, data_source.read_string]
end
Nhưng ngay khi bạn tìm thấy ở đó là hành vi liên quan đến các mục dữ liệu ...
def print_name(first_name, last_name)
puts "#{first_name} #{last_name}"
end
def read_and_print_name
first_name, last_name = read_first_and_last_name(data_source)
print_name(first_name, last_name)
end
...sau đó họ phải là một lớp:
class FullName
def FullName.read(data_source)
FullName.new(data_source.read_string, data_source.read_strng)
end
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
end
def print
puts "#{@first_name} #{@last_name}"
end
end
Với hành vi của một tên độc đáo đóng gói, sử dụng trở nên đơn giản như:
def read_and_print_name
FullName.read(data_source).print
end
Tôi nghĩ mảng so với đối tượng là sự phân đôi sai. Nó là hoàn toàn hợp lý, nơi một cuộc gọi API trở lại nhiều hơn một điều, rằng nó ở dạng một mảng (và một mảng là một đối tượng khá đơn giản, và do đó được cho là một 'PORO', trong ruby anyway)
Edit: để đáp lại ý kiến của bạn:
Ví dụ bạn trích dẫn (http://github.com/cjheath/geoip) trả về một mảng các hạng mục khác nhau. Tôi đồng ý điều này không nhất thiết phải là định dạng tốt nhất để trả lại dữ liệu. Trong trường hợp đó tôi đã nghĩ rằng một băm với các khóa có tên hợp lý sẽ là một cấu trúc tốt hơn.
Như John Topley nói, bản chất OO của Ruby có nghĩa là mọi người không phải phát minh ra thuật ngữ như 'PORO', vì hàm băm đơn giản như bạn có thể nhận được.
Các mảng kết quả này chứa những gì? Câu trả lời là trong Ruby chúng chứa các đối tượng, bởi vì mọi thứ trong Ruby là một đối tượng.
POJO trong thế giới Java là phản ứng đối với một số phức tạp gây ra trên thế giới bởi doanh nghiệp Java, v.d. EJB. Để báo Martin Fowler người đặt ra thuật ngữ:.
"Chúng tôi tự hỏi tại sao mọi người đã rất chống sử dụng đối tượng thường xuyên trong hệ thống của họ và kết luận rằng đó là vì đối tượng đơn giản thiếu một tên ưa thích Vì vậy, chúng tôi cho họ một, và nó là bị bắt rất độc đáo. "
May mắn thay, Ruby luôn là điều tự nhiên để mọi người chỉ thực hành lập trình hướng đối tượng mà không cần phải tạo ra các thuật ngữ xung quanh nó.
Tôi cho rằng những gì tôi thực sự hỏi là nếu có cách nào tốt hơn để lấy các thuộc tính có tên được trả về và tại sao nó không được sử dụng nhiều hơn, nên có lẽ tôi nên hỏi lại câu hỏi này! – Zombies
Một lý do có thể là Gems như HTTParty làm cho nó rất dễ dàng để bọc các dịch vụ Web trong Ruby và nhận được một wrapper đối tượng nhẹ xung quanh JSON hoặc XML trả về miễn phí. –
Cá nhân tôi sử dụng PORO trong hầu hết mọi thứ tôi viết không phải là tập lệnh hoàn chỉnh.
Tôi thấy mình thường tạo kiểu chủ chứa dữ liệu của lớp sẽ quản lý và giữ nhiều đối tượng thuộc loại cụ thể của tôi và bao gồm một số phương thức trợ giúp. Tôi thấy điều này thuận tiện khi ai đó cũng phải làm việc với mã của tôi.
Tôi nghĩ câu hỏi này rất chủ quan theo nghĩa là không có câu trả lời luôn đúng. Đôi khi chỉ cần quay trở lại một mảng là tốt và không cần phải tạo thêm một lớp. Đôi khi mức độ trừu tượng thêm làm cho điều gì đó rõ ràng hơn cho người dùng.
Đây chính là điều tôi đang thắc mắc. Cảm ơn bạn đã thêm đầu vào của mình. Tôi không nghĩ rằng đó là chủ quan vì tôi đang cố gắng để xem những gì người khác làm và đưa tất cả những điều này vào xem xét cho sự cải tiến của riêng tôi ... – Zombies
- 1. Vị trí đối tượng Ruby cũ đồng bằng trong Rails
- 2. jQuery.bind() sự kiện trên đồng bằng javascript đối tượng
- 3. Thống kê các đối tượng trong thế hệ cũ?
- 4. đối tượng So sánh trong ruby
- 5. Đối tượng đông lạnh trong Ruby
- 6. Xóa đối tượng giống hệt trong Ruby?
- 7. DRY'er Khởi tạo đối tượng trong Ruby
- 8. Xử lý các sửa đổi đồng thời trong Grails (GORM) trong khi tránh các ngoại lệ đối tượng cũ
- 9. Làm thế nào tôi có thể sử dụng đường ray helper "distance_of_time_in_words" trong ruby cũ đồng bằng (không đường ray)
- 10. JavaScript đồng bộ hai mảng (của đối tượng)/tìm delta
- 11. Đối tượng find_first của Ruby Array?
- 12. Sử dụng đối tượng đồng bộ hàng rào trong OpenGL
- 13. Scala: đồng hành mục đích đối tượng
- 14. Scala ngầm Numeric [T] trong đối tượng đồng
- 15. Đồng thời, hiển thị đối tượng
- 16. Biểu tượng quá cũ trong Clojure
- 17. Ruby: "if! Object.nil?" hoặc "nếu đối tượng"
- 18. Đối tượng chuỗi Ruby rỗng hay không?
- 19. boolean công bằng bằng (Đối tượng khác)
- 20. đồng bộ hóa trên đối tượng phi chính thức
- 21. Siêu đối tượng đồng hành chung trong Scala
- 22. Thiết kế hướng đối tượng với Ruby
- 23. có được phương pháp của một đối tượng trong ruby
- 24. So sánh đối tượng tương đương trong Ruby
- 25. Truy cập địa chỉ bộ nhớ đối tượng trong ruby ..?
- 26. Ruby: Tại sao Array.sort lại làm chậm đối tượng lớn?
- 27. ABAP: đồng bộ hóa đối tượng bộ nhớ chia sẻ
- 28. Khởi tạo đối tượng COM cũ trong C# động (sử dụng ID của nó trong chuỗi)
- 29. Lấy cá thể đối tượng bằng tên chuỗi trong scala
- 30. Scala: các đối tượng đồng hành và từ khóa "mới"
Không, bởi vì bạn cần phải tham khảo tài liệu API để xác định giá trị đang được đã quay lại vị trí nào. Nếu nó nằm trong một đối tượng tùy chỉnh, bạn sẽ không phải tham chiếu đến rdoc. – Zombies
Bạn đang thực sự đề cập đến một mảng nơi bạn có các cá thể lớp khác nhau tại các điểm được xác định trước của mảng không? Bạn có thể liên kết với một ví dụ về loại điều bạn đang đề cập đến không? – DanSingerman
http://github.com/cjheath/geoip .... Dường như các chức năng đó sẽ được hưởng lợi từ việc trả về các đối tượng tùy chỉnh thay vì một số ** chuỗi thay đổi ** trong một mảng – Zombies