【问题标题】:How to best write a classes' methods to update the status of an object如何最好地编写类的方法来更新对象的状态
【发布时间】:2013-05-06 19:32:16
【问题描述】:

我有两种类型的对象,分别称为 Object1 和 Object2。每当我对这些对象进行 CRUD 更改时,我都会将更改记录在一个特殊的“状态”表中。我正在写出用于处理每种类型对象的类,并且已经开始处理状态。现在我有一个函数可以将状态数据与对象类型一起传递给它,然后它会进行必要的数据库插入,但是我想以某种方式将其写入类中,并且不确定最佳实践。

我是否应该为状态创建第三个对象,我是否应该在每个对象中创建复制和粘贴方法来执行相同的操作但使用不同的硬编码措辞?我可以将这两个类都扩展为第三个类以赋予它们两个状态方法吗?

考虑这个问题的最佳方法是我有一个 Car 和 Truck 对象。需要创建一个 Garage 方法,但我是让它成为 car 和 truck 对象的方法,还是它自己的对象,还是什么?

【问题讨论】:

    标签: php oop object


    【解决方案1】:

    IMOH(可能我错了,我确定我是),这是一个很好的方法:

    abstract class Base{
        protected $type = null;
        public function setStatus($status){
            $sql = "UPDATE SET `status` = '$status' FROM `table` WHERE `type` = '{$this->type}'";
        }
    }
    class One extends Base{
        protected $type = "type1";
    }
    class Two extends Base{
        protected $type = "type2";
    }
    
    $one = new One();
    $one->setStatus('pending');
    $two = new Two();
    $two->setStatus('died');
    

    突然间出现了一种狂野的静态方式

    abstract class Base {
        protected static $type = null;
        public static function setStatus($status){
             $sql = sprintf("UPDATE SET `status` = '$status' FROM `table` WHERE `type` = '%s'",static::$type);
        }
    }
    
    class One extends Base{
        protected static $type = "one";
    }
    
    class Two extends Base{
        protected static $type = "two";
    }
    
    One::setStatus("idle");
    Two::setStatus("dieing");
    

    【讨论】:

    • 保持业务逻辑和数据访问层分离。我做的是一个静态类,但我猜对很多人来说有很多样式。
    • 静态方式也是一个不错的实现,我认为现在的 OOP 被滥用和误解了,我见过很多程序员使用 OOP,就像它是一个有很多功能。
    • 没有。我的意思是说您可以将静态类用于数据访问层。这只是我做的事情,因为我之前是这样写的。
    猜你喜欢
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 2017-04-27
    • 2021-10-18
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多