Đây là vấn đề của tôi: Tôi muốn đọc đầu vào từ các thiết bị HID khác nhau như gamepad, đua tốt, cần điều khiển, v.v ... Khá nhiều bộ điều khiển trò chơi. Vấn đề là tất cả chúng đều có đầu vào khác nhau.
Các gamepad có nút, công tắc và gậy trong khi xe đua có thể có một bánh răng. Tôi đã quản lý để trừu tượng tất cả các thành phần khác nhau này thành chỉ 3 vì vậy thay vì có một lớp cơ sở với tất cả các kết hợp có thể:
abstract class Device
{
public Buttons Buttons;
public Axes Axes;
public Switches Switches;
public GearSticks GearSticks;
//many more
}
Bây giờ tôi có thể có:
abstract class Device
{
public Buttons Buttons; //on or off
public Axes Axes; //range [-100%:100%]
public Switches Switches; //multiple states
}
Lúc đầu, tôi rất hài lòng với điều này vì nó dường như bao gồm tất cả các loại đầu vào có thể và vì vậy lớp của tôi có thể bị đóng trong khi mở để mở rộng thông qua tất cả các triển khai cụ thể vì mọi thứ có thể được trừu tượng hóa chỉ với 3 loại đầu vào.
NHƯNG sau đó tôi tự nghĩ rằng nếu tôi chỉ trì hoãn điều không thể tránh khỏi thì sao? Điều gì sẽ xảy ra nếu một ngày tôi sẽ phải thêm một lĩnh vực khác vào Device
lớp học của mình ? Nó không hỗ trợ một cái gì đó như trackball!
Có cách nào để tôi có thể chứng minh lớp học này trong tương lai không? Theo cách tôi nhìn thấy, tôi sẽ kết thúc với một thứ như thế này:
public Device1 : Device
{
//buttons
//trackball
}
public Device2 : Device
{
//Switch
//Axis
}
public Device3 : Device
{
//trackball
//switch
}
Và tôi sẽ phải tiếp tục thêm các thuộc tính vào lớp cơ sở của mình mỗi khi có một cái gì đó mới để thực hiện.
parameter1=value1¶meter2=value2
, v.v.