Class 分班
我有一个名为UFDevice的类,为了初始化它需要一个位置字符串。 我还有一个名为UFResponse的类,它提供了一个位置 因为这个设备只需要一个位置,所以我应该把它放进去,这样它就可以在没有UFResponse的用例中初始化。 或者我应该传递整个响应,以防以后它需要更多的信息而不仅仅是位置 在伪代码中:Class 分班,class,architecture,language-agnostic,Class,Architecture,Language Agnostic,我有一个名为UFDevice的类,为了初始化它需要一个位置字符串。 我还有一个名为UFResponse的类,它提供了一个位置 因为这个设备只需要一个位置,所以我应该把它放进去,这样它就可以在没有UFResponse的用例中初始化。 或者我应该传递整个响应,以防以后它需要更多的信息而不仅仅是位置 在伪代码中: foundDevice(Data data) { response = new UFResponse(data); device = new UFDevice(respons
foundDevice(Data data) {
response = new UFResponse(data);
device = new UFDevice(response);
}
或:
或者我甚至应该将UFResponse封装在UFDevice中,因为目前它仅用于创建UFDevices:
foundDevice(Data data) {
device = new UFDevice(data);
}
未来的可能性包括:
//maybe in the future I have saved a favourite location so need to do:
loadFavourite(String location) {
device = new UFDevice(location);
}
//or device needs more info
device = new UFDevice(location, color, ...20 more parameters...);
我应该在哪里划定分隔线?更重要的是,我将来如何为自己做出决定?这听起来像是一个接口分离的问题()。UFDevice是从UFResponse构建的,但它并不需要UFResponse包含的所有内容。它只需要它的一部分,当UFResponse在不应该影响UFDevice的区域发生变化时,您不希望UFDevice受到影响 一种方法是让UFResponse从名为UFDeviceParams的接口继承,如果这有意义(可能是多重继承),那么UFDevice应该在其构造函数中获得对UFDeviceParams的引用 这允许基于整个UFResponse或基于更轻量级的UFFavoriteParams实例(也继承自UFDeviceParams)初始化UFDevice,该实例仅包含位置+颜色等
foundDevice(Data data) {
response = new UFResponse(data);
device = new UFDevice(response);
}
loadFavourite(String location) {
params = new UFFavouriteParams(location);
device = new UFDevice(params);
}
要真正了解这是否是适合您的案例的最佳方法,您需要更多地了解您的系统,了解用例和模块之间的界限。我建议观看Robert Martin关于界面分割原则和整体坚实原则的视频()
foundDevice(Data data) {
response = new UFResponse(data);
device = new UFDevice(response);
}
loadFavourite(String location) {
params = new UFFavouriteParams(location);
device = new UFDevice(params);
}