2014-06-26 14 views
6

Tôi đã nhận thấy những người sử dụng các mô hình với object Dependencies và làm import Dependencies._ trong object build trong SBT như sau:Tại sao tôi nên sử dụng đối tượng và đặc điểm phụ thuộc và nhập nó so với mixin để xây dựng định nghĩa?

import sbt._ 
import Keys._ 

object Dependencies { 
    // dependencies declared as vars 
} 

object build extends Build { 
    // bring Dependencies' vars to scope 
    import Dependencies._ 

    // project definitions 
} 

Khá Gần đây tôi đã tìm thấy cách tiếp cận khác với một đặc điểm như sau:

import sbt._ 
import Keys._ 

trait Dependencies { 
    // dependencies declared as vars 
} 

// bring Dependencies' vars to scope by with 
object build extends Build with Dependencies { 
    // project definitions 
} 

tôi nghĩ rằng cách tiếp cận đặc điểm mang lại cho tôi một cách đặt tên tốt hơn cho đối tượng xây dựng vì nó đọc là xây dựng đối tượng là một Xây dựng với các phụ thuộc được gạch chân.

Sự khác nhau giữa các cách tiếp cận (bên cạnh việc viết/đọc có lẽ tốt hơn của đối tượng) là gì? Tôi nghĩ rằng câu hỏi có thể dễ dàng đun sôi xuống những gì khác biệt giữa các đối tượng và đặc điểm trong Scala, nhưng vì nó được thu hẹp để xây dựng các định nghĩa sbt (mà tôi nghĩ không cần nhiều biểu cảm) tôi nghĩ tôi sẽ hỏi ở đây để xây dựng các định nghĩa mẫu phổ biến.

+0

Bạn không thể kế thừa từ 'đối tượng' để không thể xây dựng trừu tượng tốt hơn và cho phép chương trình quyết định thời gian chạy thực hiện để chọn. 'Trait' là một kiểu trong khi' đối tượng' thì không. Đó là ý kiến ​​của tôi và nó đề cập đến 'scala' nói chung hơn là một số hàm ý pracitcal trong' sbt'. – goral

+0

Trong trường hợp đầu tiên, bạn đang tạo phụ thuộc như một singleton. Trạng thái của một đối tượng sẽ được chia sẻ giữa tất cả người tiêu dùng của nó. Với những đặc điểm mà mỗi người tiêu dùng sẽ có được một cá thể độc lập của riêng một người phụ thuộc. –

+3

Tôi nghĩ rằng liên quan đến sbt đó là một sự khác biệt về phạm vi, nếu bạn sử dụng đặc điểm, bạn có thể truy cập 'val' từ 'build.sbt' trực tiếp, vì mọi thứ thuộc về' Build' được hiển thị trong 'build.sbt'. Nếu bạn sử dụng 'object' và import, thì bạn sẽ phải' import Dependencies._' vào tệp 'build.sbt' của bạn hoặc sử dụng tên đủ điều kiện. – lpiepiora

Trả lời

0

Không có sự khác biệt ngữ nghĩa giữa hai. Nếu bạn phải chọn một, tôi thích biến thể object Dependencies vì biến thể này hoạt động tốt hơn với các tệp build.sbt.

+0

Cảm ơn Josh. Bạn có thể vui lòng nói về những gì tốt hơn có nghĩa là trong bối cảnh này? –

+0

tốt hơn => nó hoạt động. Bạn không thể thực sự ghi đè đặc điểm dễ dàng trong build.sbt, vì vậy sẽ rất khó để truy cập vào các thành viên đó. – jsuereth

Các vấn đề liên quan