设计模式:是否应该将对不同模块的重复函数调用移动到它们自己的 "abstraction"?
Design patterns: Should repetitive function calls, to different modules, be moved to their own "abstraction"?
作为一名 JS 开发人员,我经常发现自己在为这个问题苦苦挣扎,是否应该将某些 "procedures" 移动到它们自己的层。例如:
const localStorageUser = jwtService.userExistsInStorage();//Returns a user object if available
if (localStorageUser) {//If so, "login" from it
// debugger;
store.dispatch(userActions.setUserData(localStorageUser))//Set the user object in the Redux store.
AjaxService.setHeader('token', localStorageUser.data.token);//Set the token header for every ajax request.
if (localStorageUser.data.shortcuts) {
store.dispatch(navigationActions.setNavigation(localStorageUser.data.shortcuts));
} else {
store.dispatch(navigationActions.resetNavigation());
}
}
这是来自 React 应用中顶级文件的一些代码。如您所见,它会在应用加载时调用各种初始化函数。
比方说,有一天我可能会发现自己在应用程序的不同部分(某些自动重新登录)重复此代码。是不是"customary"把这样的代码放在自己的class里?我的意思是,这样做会完全违反单一职责原则,因为这个 class/module 会与许多其他 class 和职责高度耦合。
这只是一个例子(也许不是最好的例子),但这种困境经常出现。有经验的开发人员如何处理这个问题?
首字母缩略词 DRY - 不要重复你自己 - 就这样吧。并且提取代码完全符合单一职责原则,因为新的 class 将只负责一件事,即登录过程,并且只有一个更改原因,即如果登录过程发生变化。使用登录组件的所有其他对象都不会关心(如果 API 没有改变)这就是你想要的。如果您必须更改组件的 API,则耦合会产生问题,因此请始终尝试创建清晰稳定的 APIs。
作为一名 JS 开发人员,我经常发现自己在为这个问题苦苦挣扎,是否应该将某些 "procedures" 移动到它们自己的层。例如:
const localStorageUser = jwtService.userExistsInStorage();//Returns a user object if available
if (localStorageUser) {//If so, "login" from it
// debugger;
store.dispatch(userActions.setUserData(localStorageUser))//Set the user object in the Redux store.
AjaxService.setHeader('token', localStorageUser.data.token);//Set the token header for every ajax request.
if (localStorageUser.data.shortcuts) {
store.dispatch(navigationActions.setNavigation(localStorageUser.data.shortcuts));
} else {
store.dispatch(navigationActions.resetNavigation());
}
}
这是来自 React 应用中顶级文件的一些代码。如您所见,它会在应用加载时调用各种初始化函数。
比方说,有一天我可能会发现自己在应用程序的不同部分(某些自动重新登录)重复此代码。是不是"customary"把这样的代码放在自己的class里?我的意思是,这样做会完全违反单一职责原则,因为这个 class/module 会与许多其他 class 和职责高度耦合。
这只是一个例子(也许不是最好的例子),但这种困境经常出现。有经验的开发人员如何处理这个问题?
首字母缩略词 DRY - 不要重复你自己 - 就这样吧。并且提取代码完全符合单一职责原则,因为新的 class 将只负责一件事,即登录过程,并且只有一个更改原因,即如果登录过程发生变化。使用登录组件的所有其他对象都不会关心(如果 API 没有改变)这就是你想要的。如果您必须更改组件的 API,则耦合会产生问题,因此请始终尝试创建清晰稳定的 APIs。