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

未优化的代码:

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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mr.杰瑞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值