1

这是我的数据映射模式(简化)的类结构示例。请注意,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.');
            }
    }
4

1 回答 1

1

只要您不在实现所有方法的类中,就可以使类抽象。

抽象类不能被实例化,必须有另一个类通过实现来扩展抽象类。

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

    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);
            }

    }
于 2012-09-08T16:59:01.840 回答