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