欢迎大家访问博主的博客新家:IT博客达人网 (http://www.blogdaren.com)[耶]

怎么考虑把代码抽象化, 它到底比硬编码好在哪?

manon 2017-9-22 19:41 未分类 抢沙发 204人打酱油 打开侧边栏| 关闭侧边栏
把代码抽象化就好比发工资,大家发了工资后要做什么,肯定是不一样的,有的人要上缴老婆,有的人要还贷款,有的人要给父母家用,等等等等。

如果我们直接去定死了发了工资就干什么,那肯定不适用所有人的情况;而且一般情况下,我们也只需要知道工资发下来就行了,至于工资拿来干嘛,那根本不是别人关心的事。

转化成代码的话,那我们只要规定好每个工作人员都有个拿到工资的接口,至于接口里面具体要实现什么样的功能,每个人自己去定义。

硬编码:
<?
class Employee1 implements GetPaid
{
    public function comfortWife() {...}
    public function repayTheLoan() {...}
    public function domesticExpenses() {...}
}

class Employee2 implements GetPaid
{
    public function comfortWife() {}
    public function domesticExpenses() {}
}

class Employee3 implements GetPaid
{
    public function repayTheLoan() {}
}

$employee1 = new Employee1();
$employee1-> comfortWife();
$employee1-> repayTheLoan();
$employee1-> domesticExpenses();

$employee2 = new Employee2();
$employee2-> comfortWife();
$employee2-> domesticExpenses();

$employee3 = new Employee3();
$employee3-> repayTheLoan();
接口不统一,主流程还要去关心每个员工到底拿到工资去干嘛(公司管的真宽啊),万一要增、删、改功能,还要通知注流程去修改(不知道你们有没经常写申请走流程。。。不敢想),这样的员工,严重生活不能自理;这样的公司,就像一个庞然大物一样,什么都要管,做什么事都很麻烦,管理成本都是指数级的。

从现实的角度来看,不可能有这样的公司(那你们这些程序狗怎么能写出这么病丧的程序);从程序的角度来看,无法协同开发、模块化,程序维护、测试都非常困难。

抽象层:
<?
class Employee1 implements GetPaid
{
    public function getPaid()
    {
        comfortWife();
        repayTheLoan();
        domesticExpenses();
    }
}

class Employee2 implements GetPaid
{
    public function getPaid()
    {
        comfortWife();
        domesticExpenses();
    }
}

class Employee3 implements GetPaid
{
    public function getPaid()
    {
        repayTheLoan();
    }
}

$employeeList = [new Employee1,new Employee2,new Employee3,];
foreach($employeeList as $eachEmployee)
{
    $eachEmployee->getPaid();
}
我们发现主流程根本不需要关心每个人拿完工资干啥,只要发工资就是了, 每个员工自己该干嘛干嘛;想干的事想加就加,想减就减,想改就改,不会影响别人,主流程根本不用改。


正文部分到此结束

版权声明:除非注明,本文由( manon )原创,转载请保留文章出处

本文链接:怎么考虑把代码抽象化, 它到底比硬编码好在哪?

继续浏览:木有标签

从腾讯的“灰度机制”到产品的“灰度上线”,你了解多少?
Centos 配置eth0 提示:Device does not seem to be present,delaying initialization. [FAILED]

发表评论

看看右边的头像对不对?→_→