javascript - 设计模式 : Should repetitive function calls, 到不同的模块,是否被移动到自己的 "abstraction"?

标签 javascript reactjs design-patterns abstraction single-responsibility-principle

作为一名 JS 开发人员,我经常发现自己在这个问题上苦苦挣扎:某些“过程”是否应该移动到自己的层。例如:

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 应用程序中顶级文件中的一些代码。正如您所看到的,当应用程序加载时,它会在初始化时调用各种函数。

比方说,有一天我可能会发现自己在应用程序的不同部分(某些自动重新登录)重复此代码。将此类代码放在自己的类中是否是“习惯”?我的意思是,这样做会完全违反单一职责原则,因为这个类/模块将与许多其他类和职责高度耦合。

这只是一个例子(也许不是最好的例子),但这种困境经常出现。经验丰富的开发人员如何解决这个问题?

最佳答案

首字母缩略词 DRY - 不要重复自己 - 就这么说。提取代码完全符合单一责任原则,因为新类只负责一件事,即登录过程,并且只有一个原因需要更改,即如果登录过程发生更改。使用登录组件的所有其他对象都不会关心(如果 API 没有更改)您想要什么。如果您必须更改组件的 API,那么耦合会产生问题,因此请始终尝试创建清晰且稳定的 API。

关于javascript - 设计模式 : Should repetitive function calls, 到不同的模块,是否被移动到自己的 "abstraction"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58344915/

相关文章:

javascript - React Context 不会更新所有子项

javascript - react 路由器需要两次点击来更新路由

javascript - Spotify 网络 API : Uncaught (in promise) TypeError: Cannot read property 'setState' of undefined

javascript - Angular 4 平均堆栈 : How to get a value depending on another {{value}}

javascript - 单击回显的 html 代码时,PHP 从数据库获取信息

java - 难以理解为什么子类化单例与单例的定义相矛盾?

oop - Scala 中的模式匹配如何克服 switch case 导致的重复?

java - 像包装器一样使用 Facade

javascript - 无法在 SVG g 元素上应用动画

javascript - 本地主机的 Google map api 使用