案例分析角色分析:包括主持人、选民功能分析:仅主持人能授权给每个选民1票,即每个参与投票的选民拥有1票投票权。选民可以选择将票数委托给其它选民,当然,收委托的选民仍然可以将票数继续委托给其它选民,即存在a—>b–>c–>d,但是,一旦将票数委托给其它选民后,自己将不再有投票的权利选民和主持人可以选择任意的提案项目进行投票代码实例pragmasolidity^0.6.1;contractballot{//选民结构structVoter{uintweight;//可以投票的数量boolisVoted;//是否已投addressdelegate;//授权给他人uintindex;//选择的提案编号}
SOLID设计原则包含以下5种原则:单一职责原则(SingleResponsibilityPrinciple,SRP)开闭原则(OpenClosedPrinciple,OCP)里式替换原则(LiskovSubstitutionPrinciple,LSP)接口隔离原则(InterfaceSegregationPrinciple,ISP)依赖反转原则(DependencyInversionPrinciple,DIP)单一职责原则理解单一职责原则的描述是,一个类或者模块只负责完成一个职责(或功能)。当然,单一职责原则不止是可以针对于模块或类,对于很多粒度都有效果,如函数、类、接口、模块等等,模块通常
SOLID设计原则包含以下5种原则:单一职责原则(SingleResponsibilityPrinciple,SRP)开闭原则(OpenClosedPrinciple,OCP)里式替换原则(LiskovSubstitutionPrinciple,LSP)接口隔离原则(InterfaceSegregationPrinciple,ISP)依赖反转原则(DependencyInversionPrinciple,DIP)单一职责原则理解单一职责原则的描述是,一个类或者模块只负责完成一个职责(或功能)。当然,单一职责原则不止是可以针对于模块或类,对于很多粒度都有效果,如函数、类、接口、模块等等,模块通常
背景在我们日常工作中,代码写着写着就出现下列的一些臭味。但是还好我们有SOLID这把‘尺子’,可以拿着它不断去衡量我们写的代码,除去代码臭味。这就是我们要学习SOLID原则的原因所在。设计的臭味僵化性具有联动性,动一处,会牵连到其他地方脆弱性不敢改动,动一处,全局瘫痪顽固性不易改动粘滞性耦合性太高不必要的复杂性代码设计过于复杂不必要的重复提高复用性,减少重复晦涩性代码设计不易理解SRP-单一职责原则一个类只做一件事情。当然一件事情,不是说类中只有一个方法。而是类中的方法都是属于同一种职责。不能因为第二职责的原因去改动这个类。一个很好的例子:在我们封装request库时,我们需要实现以下4个方法
背景在我们日常工作中,代码写着写着就出现下列的一些臭味。但是还好我们有SOLID这把‘尺子’,可以拿着它不断去衡量我们写的代码,除去代码臭味。这就是我们要学习SOLID原则的原因所在。设计的臭味僵化性具有联动性,动一处,会牵连到其他地方脆弱性不敢改动,动一处,全局瘫痪顽固性不易改动粘滞性耦合性太高不必要的复杂性代码设计过于复杂不必要的重复提高复用性,减少重复晦涩性代码设计不易理解SRP-单一职责原则一个类只做一件事情。当然一件事情,不是说类中只有一个方法。而是类中的方法都是属于同一种职责。不能因为第二职责的原因去改动这个类。一个很好的例子:在我们封装request库时,我们需要实现以下4个方法
介绍 SOLID原则是由5个设计原则组成的,分别为:(S)单一职责原则、(O)开闭原则、(L)里式替换原则、(I)接口隔离原则和(D)依赖反转原则;单一职责原则 SRP 单一职责原则的英文是SingleResponsibilityPrinciple,缩写为SRP; 它的意思是一个类或者模块只负责完成一个职责,也就是说不要设计大而全的类,要设计粒度小、功能单一的类; 换个角度讲,就是一个类如果包含两个或两个以上业务不相干的功能,那它就不满足单一职责原则,比如一个类包含了用户的操作和订单操作; 如何判断一个类是否单一呢?其实还是要根据实际情况来分析,例如:我们可以先写个大概的类来满足现有
介绍 SOLID原则是由5个设计原则组成的,分别为:(S)单一职责原则、(O)开闭原则、(L)里式替换原则、(I)接口隔离原则和(D)依赖反转原则;单一职责原则 SRP 单一职责原则的英文是SingleResponsibilityPrinciple,缩写为SRP; 它的意思是一个类或者模块只负责完成一个职责,也就是说不要设计大而全的类,要设计粒度小、功能单一的类; 换个角度讲,就是一个类如果包含两个或两个以上业务不相干的功能,那它就不满足单一职责原则,比如一个类包含了用户的操作和订单操作; 如何判断一个类是否单一呢?其实还是要根据实际情况来分析,例如:我们可以先写个大概的类来满足现有
pragmasolidity>=0.7.0Voter)publicvoters;//地址对投票节点的信息的映射Proposal[]publicproposals;//一维数组存储被投票节点信息//构造方法、构造函数//solidity和其他语言不一样,构造函数仅在部署合约时调用一次,后续调用合约不调用其构造函数//且一个合约只能有一个构造函数,不能进行构造函数重载constructor(bytes32[]proposalNames)public{chairperson=msg.sender;//将第一次调用该合约的节点设置为管理员voters[chairperson].weight=1;//将
pragmasolidity>=0.7.0Voter)publicvoters;//地址对投票节点的信息的映射Proposal[]publicproposals;//一维数组存储被投票节点信息//构造方法、构造函数//solidity和其他语言不一样,构造函数仅在部署合约时调用一次,后续调用合约不调用其构造函数//且一个合约只能有一个构造函数,不能进行构造函数重载constructor(bytes32[]proposalNames)public{chairperson=msg.sender;//将第一次调用该合约的节点设置为管理员voters[chairperson].weight=1;//将
在solidity语言中引用类型修饰符(引用类型为存储空间不固定的数值类型)memory、calldata与storage,它们只能修饰引用类型变量,比如字符串、数组、字节等...memory适用于方法传参、返参或在方法体内使用,使用完就会清除掉,释放内存calldata仅适用于方法传参,修饰该变量的值不能修改storage仅适用于方法体内,而且它的指针必须指向链上数据。使用完,链上数据将保存最新状态 常量修饰符constant编译前已经确定,编译后不能再修改常量的值constant它不是状态变量,所以它不储存在插槽(Slot)里面,获取该常量的方法修饰必须是Pure,而不是Viewimmut