Tôi hiện đang làm việc trên một triển khai thiết lập trong JavaScript. Đây là loại mô phỏng tổng quát như được biết từ Java hoặc C #. Tôi cần một phiên bản có thể thay đổi của điều đó (cho phép thêm / xóa các giá trị đã đặt) và một phiên bản không thay đổi.
Chữ ký nhà xây dựng của tôi trông như thế này:
new GenericSet( 'number', [ 10, 20, 30 ] );
,
// mutable set of mixed values (allows to add further values via "add")
new MutableGenericSet( '*', [ 'foo', 42, {}, /./ ] );
hoặc là
// DataValues.prototype.equals will be used by the set for determining equality.
new GenericSet( { type: DataValue, valueComparison: 'equals' }, [ dv1, dv2, dv3 ] );
Chỉ cần cài đặt chung hoặc thực hiện một bộ cho mỗi loại?
Ban đầu, mục đích chính của tôi cho việc này là có các bộ giá trị của một loại. Ví dụ: DataValuesset chỉ chấp nhận Giá trị dữ liệu. Sau đó tôi có thể định nghĩa các giao diện với các hàm yêu cầu một cá thể DataValuesset . Tôi không thể sử dụng thừa kế (và đoán đó sẽ là xấu dù sao đi nữa), vì vậy tôi sẽ sử dụng thành phần và có một GenericSet / MutableGenericSet dụ trong nội bộ.
Một cách tiếp cận khác là luôn luôn sử dụng Genericset và triển khai và sử dụng GenericSet.requireSetOfType( type )
, điều này sẽ gây ra lỗi nếu loại của tập hợp không phải là yêu cầu. Mối quan tâm của tôi khi làm theo cách này là các định nghĩa giao diện của tôi sẽ trông ít rõ ràng hơn.
Lấy
/**
* @param DataValuesSet dataValues
*/
function printDataValues( dataValues ) {
if( !( dataValues instanceof DataValuesSet ) ) {
throw Error( '...' );
}
// ...
}
so với
/**
* @param GenericSet<DataValue>
*/
function printDataValues( dataValues ) {
// Throws error if dataValues is not a set or it it is a set with values of wrong type.
GenericSet.requireSetOfType( dataValues, DataValue );
// ...
}
có lẽ sử dụng @param GenericSet(DataValues) dataValues
để làm tài liệu cho sự lựa chọn thứ hai sẽ ổn chứ? Có ai thấy bất kỳ ý nghĩa nào nữa với cách tiếp cận thứ hai hoặc có bất kỳ đề xuất thay thế nào không? Đối với tôi, cái thứ hai trông trực quan hơn và mối quan tâm của tôi với cái thứ nhất là tôi sẽ chỉ tạo thêm chi phí với các nhà xây dựng trong khi tôi không thể thấy bất kỳ lợi thế rõ ràng nào ngay bây giờ.