看了设计模式之美,记录一次看书心得

Posted mr.杰瑞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了看了设计模式之美,记录一次看书心得相关的知识,希望对你有一定的参考价值。

未优化的代码:

class IdGenerator {
  public static function insertLog(){
      return '记录日志';
  }
  public static function generate() {
    $id = "";
    try {
      $hostName = '127.0.0.1';
      $count = 0;
      while ($count < 8) {
          $randomAscii = rand(1,122);
        if ($randomAscii >= 48 && $randomAscii <= 57) {
            $randomChars[$count] = (string)chr($randomAscii);
            $count++;
        } else if ($randomAscii >= 65 && $randomAscii <= 90) {
            $randomChars[$count] = (string)chr($randomAscii);
            $count++;
        } else if ($randomAscii >= 97 && $randomAscii <= 122) {
            $randomChars[$count] = (string)chr($randomAscii);
            $count++;
        }
      }
      $id = printf("%s-%d-%s", $hostName,
              time(), implode("",$randomChars));
    } catch (\\Exception $e) {
        self::insertLog();
        throw $e;
    }
    return $id;
  }
}
$id = (new IdGenerator)::generate();
var_dump($id);
  • 目录设置是否合理、模块划分是否清晰、代码结构是否满足“高内聚、松耦合”? 是否遵循经典的设计原则和设计思想(SOLID、DRY、KISS、YAGNI、LOD等)? 设计模式是否应用得当?是否有过度设计?
  • 代码是否容易扩展?如果要添加新功能,是否容易实现?
  • 代码是否可以复用?是否可以复用已有的项目代码或类库?是否有重复造轮子?
  • 代码是否容易测试?单元测试是否全面覆盖了各种正常和异常的情况?
  • 代码是否易读?是否符合编码规范(比如命名和注释是否恰当、代码风格是否一致等)

优化后

<?php
interface IdGenerator
{
    public function generate();
}

interface LogTraceIdGenerator extends IdGenerator
{
    public function insertLog();
}

class RandomIdGenerator implements LogTraceIdGenerator
{
    /**
     * 日志
     */
    public function insertLog()
    {
        // TODO: Implement insertLog() method.
    }

    /**
     * @return int
     * @throws Exception
     */
    public function generate()
    {
        $substrOfHostName = $this->getLastfieldOfHostName();
        $currentTimeMillis = time();
        $randomString = $this->generateRandomAlphameric(8);
        $id = printf("%s-%d-%s", $substrOfHostName, $currentTimeMillis, $randomString);
        return $id;
    }

    /**
     * @return String
     */
    private function getLastfieldOfHostName()
    {
        $substrOfHostName = null;
        try {
            $hostName = '127.0.0.1';
            $substrOfHostName = $this->getLastSubstrSplittedByDot($hostName);
        } catch (\\Exception $e) {
            $this->insertLog();
            throw $e;
        }
        return $substrOfHostName;
    }

    /**
     * @param String $hostName
     * @return String
     */
    protected function getLastSubstrSplittedByDot(String $hostName)
    {
        //todo 这里是获取服务器地址逻辑
        return $hostName;
    }

    /**
     * 获取随机字符
     * @param int $length
     * @return string
     */
    protected function generateRandomAlphameric(int $length)
    {
        while ($count < $length) {
            $maxAscii = 'z';
            $randomAscii = rand(0, ord($maxAscii));
            $isDigit= $randomAscii >= '0' && $randomAscii <= '9';
            $isUppercase= $randomAscii >= 'A' && $randomAscii <= 'Z';
            $isLowercase= $randomAscii >= 'a' && $randomAscii <= 'z';
            if ($isDigit|| $isUppercase || $isLowercase) {
                $randomChars[$count] = (string) ($randomAscii);
                ++$count;
            }
        }
        return implode('', $randomChars);
    }
}

以上是关于看了设计模式之美,记录一次看书心得的主要内容,如果未能解决你的问题,请参考以下文章

看了设计模式之美,记录一次看书心得

看了设计模式之美,记录一次看书心得

c++面向对象程序设计心得

2021-10-24第一次ACM校赛_记录

学习心得

读《编程之美——微软技术面试心得》有感