未实现的抽象方法是否存在设计缺陷?

时间:2012-09-08 16:41:52

标签: php oop

以下是数据映射模式(简化)的类结构示例。请注意,save和find方法在技术上是在具体类中实现的,但是还没有做任何事情。有什么替代方法可以避免这种情况?我目前使用的一个选项是实现接口的抽象DataMapperAbstract类,为每个方法抛出异常,然后所有具体的数据映射器只需实现它们使用的功能 - 它只是闻起来很糟糕。就个人而言,我曾想过为每个方法创建一个单独的接口(DataMapper_FindInterface,DataMapper_SaveInterface,DataMapper_DeleteInterface等),但它看起来有点臭。

    interface DataMapperInterface
    {
            public function find($params);
            public function save($object);
            public function delete($object);
    }

    class DataMapper_User implements DataMapperInterface
    {                               
            public function find($params)
            {                       
                    //Execute code to retrieve data from data source
                    return someDataRetrievalMethod($params);
            }

            public function save($object)
            {
                    throw new Exception('Method not yet implemented.');
            }

            public function delete($object)
            {
                    throw new Exception('Method not yet implemented.');
            }
    }

1 个答案:

答案 0 :(得分:1)

只要你不在具有al方法实现的类中,就使类抽象化。

抽象类无法实例化,并且必须有另一个类通过实现扩展抽象类。

所以到目前为止你的代码看起来像这样:

    interface DataMapperInterface
    {
            public function find($params);
            public function save($object);
            public function delete($object);
    }

    abstract class DataMapper_User implements DataMapperInterface
    {                               
            public function find($params)
            {                       
                    //Execute code to retrieve data from data source
                    return someDataRetrievalMethod($params);
            }

    }