上次,作者翻译了一篇文章IllustrationingtheSOLIDPrinciples。这个例子还不错。这次让我翻译吧。一些示例已被删除。这个概念我就不多说了。只需阅读上一篇文章或查看图片即可。那么直接进入正题:S-单一职责原则的例子一个表单需要被验证然后用户保存到数据库。不推荐/***这个函数的名字明显违反了单一职责原则*表单验证和用户创建是耦合在一起的*不推荐这样写!*/functionvalidateAndSaveUser(req){//调用外部函数来验证用户表单constisFormValid=validateForm(req.name,req.password,req.email)//如果表单有效if(isFormValid){doCreateUser(req.name,req.password,req.email)//创建用户的具体实现}}Recommended//验证请求函数functionvalidateRequest(req){//调用外部函数验证用户表单constisFormValid=validateForm(req.name,req.password,req.email)//如果表单有效if(isFormValid){createUser(req)//在另一个模块中实现}}//仅用于将用户存储在数据库函数中createUser(req){doCreateUser(req.name,req.password,req.email)//具体实现代码}上面的修改虽然看起来很小,但是把验证逻辑和用户创建逻辑解耦了,用户创建好像是一个经常变化的函数。为以后的修改提供方便。O-Open-ClosedPrincipleExample假设我们有如下权限验证函数:constroles=["ADMIN","USER"]functioncheckRole(user){if(roles.includes(user.role)){returntrue}returnfalse}//角色检查checkRole("ADMIN")//truecheckRole("Savo")//false如果我们要添加超级??管理员,为了不修改之前的代码(或者不能修改遗留代码),我们可以添加一个新的权限函数://这里的代码不能修改!constroles=["ADMIN","USER"]functioncheckRole(user){if(roles.includes(user.role)){returntrue}returnfalse}//这里的代码不能修改!//我们可以定义一个函数来添加一个新角色functionaddRole(role){roles.push(role)}//调用新函数来添加一个角色addRole("SUPERUSER")//验证角色checkRole("ADMIN")//truecheckRole("Savo")//falsecheckRole("SUPERUSER")//trueL-里氏代入原理示例下面是一个工程师的示例。初级工程师其实是可以被高级工程师代替的。(没问题==)classEngineer{constructor(coder){this.coder=coderthis.writeCode=function(){console.log("Coding")//工程师可以写代码}}//初级工程师Simple(coder){this.writeCode(coder)}//高级工程师Pro(coder){this.writeCode(coder)console.log("DesignArchitecture")//高级工程师也要设计架构~}}consta=newEngineer("Savokiss")a.Simple()//Output://Codinga.Pro()//Output://Coding//DesignArchitecture...I-InterfaceSegregationPrinciple示例不推荐//在任何情况下验证classUser{constructor(username,password){this.initUser(username,password)}initUser(username,password){this.username=usernamethis.password=passwordthis.validateUser()}validateUser(){console.log("Validating...")//添加验证逻辑}}constuser=newUser("Savokiss","123456")console.log(user)//Validating...//User{//validateUser:[Function:validateUser],//username:'Savokiss',//password:'123456'//}recommended//将validation作为可选接口classUser{constructor(username,password,validate){this.initUser(username,password,validate)if(validate){this.validateUser()}else{console.log("Novalidationlogicrequired")}}initUser(username,password,validate){this.username=usernamethis.password=passwordthis.validate=validate}validateUser(){console.log("Validating...")}}//需要验证的用户console.log(newUser("Savokiss","123456",true))//正在验证...//用户{//validateUser:[Function:validateUser],//username:'Francesco',//password:'123456',//validate:true//}//不需要验证的用户console.log(newUser("Guest","guest",false))//不需要验证逻辑//User{//validateUser:[Function:validateUser],//username:'guest',//password:'guest',//validate:false//}D-不推荐依赖倒置原理示例//http请求依赖setState函数,依赖一个细节http.get("http://address/api/examples",(res)=>{this.setState({key1:res.value1,key2:res.value2,key3:res.value3})})recommended//httprequestconsthttpRequest=(url,state)=>{http.get(你的l,(res)=>state.setValues(res))}//在另一个函数中设置状态conststate={setValues:(res)=>{this.setState({key1:res.value1,key2:res.value2,key3:res.value3})}}//请求时,注入状态作为抽象httpRequest("http://address/api/examples",state)总结SOLID原则的主要目标是让任何软件都可以应该更容易改变,也更容易理解。SOLID原则也让你的代码:更容易理解和更容易扩展,同时减少bug隔离、抽象??和实现,更容易替换,更容易测试。我希望这篇文章对你有所帮助。参考文章S.O.L.I.D.你身边的原则,在JavaScript中
