Tôi đã thấy một số phương pháp tiếp cận giải quyết những gì bạn đang tìm kiếm. Kiểm tra
nhập khẩu được xác định
https://github.com/mongodb/casbah/blob/master/casbah-core/src/main/scala/Implicits.scala
dụ nhỏ của phương pháp này:
object Imports extends Imports with commons.Imports with query.Imports with query.dsl.FluidQueryBarewordOps
object BaseImports extends BaseImports with commons.BaseImports with query.BaseImports
object TypeImports extends TypeImports with commons.TypeImports with query.TypeImports
trait Imports extends BaseImports with TypeImports with Implicits
@SuppressWarnings(Array("deprecation"))
trait BaseImports {
// ...
val WriteConcern = com.mongodb.casbah.WriteConcern
// More here ...
}
trait TypeImports {
// ...
type WriteConcern = com.mongodb.WriteConcern
// ...
}
nhập khẩu sử dụng
https://github.com/mongodb/casbah/blob/master/casbah-core/src/main/scala/MongoClient.scala
Khi họ sử dụng đối tượng nhập này, nó sẽ mở khóa tất cả bí danh loại của bạn cho bạn. Ví dụ, WriteConcern
import com.mongodb.casbah.Imports._
// ...
def setWriteConcern(concern: WriteConcern): Unit = underlying.setWriteConcern(concern)
Về cơ bản họ quấn lên tất cả các hàng nhập khẩu vào một đối tượng nhập khẩu thông thường, sau đó chỉ cần sử dụng com.mycompany.Imports._ nhập khẩu
Doobie làm điều gì đó tương tự như nơi mà hầu hết người dùng cuối chỉ import doobie.imports._
https://github.com/tpolecat/doobie/blob/series/0.3.x/yax/core/src/main/scala/doobie/imports.scala
một lần nữa, một mẫu từ mô hình này:
object imports extends ToDoobieCatchSqlOps with ToDoobieCatchableOps {
/**
* Alias for `doobie.free.connection`.
* @group Free Module Aliases
*/
val FC = doobie.free.connection
/**
* Alias for `doobie.free.statement`.
* @group Free Module Aliases
*/
val FS = doobie.free.statement
// More here ...
}
Sự khác biệt chính trong cách tiếp cận này giữa kiểu đối tượng gói là bạn có quyền kiểm soát nhiều hơn đối với những gì/khi nào cần nhập. Tôi đã sử dụng cả hai mẫu, thường là một đối tượng gói cho các phương thức tiện ích phổ biến mà tôi sẽ cần qua một gói nội bộ. Và đối với các thư viện, cụ thể là người dùng mã của tôi, tôi có thể đính kèm một số định nghĩa ngầm định cho đối tượng nhập như trong số doobie
được đề cập ở trên để mở khóa cú pháp DSL cho người dùng bằng một lần nhập.
Đặt bí danh thành đối tượng gói com.acme, sau đó mỗi tệp là 'package com.acme; gói projectx'. Không cần nhập. –
@BrianPendleton Tốt hơn nhiều, được thăng hạng! –