Tôi đã đọc về cách tiếp cận giao diện thông thạo của OO ở Java, JavaScript và Scala và tôi thích giao diện của nó, nhưng đã phải vật lộn để xem cách điều chỉnh nó bằng phương pháp tiếp cận dựa trên kiểu/chức năng hơn trong Scala .Làm cách nào để kết hợp giao diện thông thạo với phong cách chức năng trong Scala?
Để cung cấp một ví dụ rất cụ thể về những gì tôi muốn nói: Tôi đã viết một ứng dụng API mà có thể được gọi như thế này:
val response = MyTargetApi.get("orders", 24)
Giá trị trả về từ get()
là một loại Tuple3
gọi RestfulResponse
, theo quy định trong tôi package object:
// 1. Return code
// 2. Response headers
// 2. Response body (Option)
type RestfulResponse = (Int, List[String], Option[String])
này hoạt động tốt - và tôi không thực sự muốn hy sinh sự đơn giản chức năng của một giá trị tuple trở lại - nhưng tôi muốn mở rộng thư viện với nhiều 'f luent' cuộc gọi phương pháp, có lẽ một cái gì đó như thế này:
val response = MyTargetApi.get("customers", 55).throwIfError()
// Or perhaps:
MyTargetApi.get("orders", 24).debugPrint(verbose=true)
Làm thế nào tôi có thể kết hợp đơn giản chức năng của get()
trả về một tuple gõ (hoặc tương tự) với khả năng bổ sung thêm 'khả năng thông thạo' để API của tôi?
Cách tiếp cận "giao diện thông thạo" này ... trông không thân thiện với các ngôn ngữ được nhập tĩnh. Mặc dù tôi chắc chắn với một số mã gói và thừa kế bạn có thể làm điều đó với Scala, nó sẽ không được an toàn như có 'getOrders' và' getCustomers' một cách riêng biệt, thay vì 'get (" orders ")' và 'get (" customers ")' sử dụng cùng phương thức 'get'. –
Cảm ơn Dan - nhưng tôi sẽ không lo lắng quá nhiều về cú pháp 'get (" slug ", id)' - đây thực sự không phải là câu hỏi của tôi. Trong mọi trường hợp có một chế độ an toàn hơn trong thư viện trông giống như 'MyTargetApi.orders.get (id)' –
Cá nhân tôi nghĩ bạn nên cung cấp một ví dụ điển hình hơn về một số mã thông thạo và chính xác bit mà bạn nghĩ là không hoạt động. Tại thời điểm này, nó chỉ xuất hiện từ câu hỏi của bạn mà bạn không thực sự biết những gì thông thạo có nghĩa là –