다음은 데이터 매핑 패턴 (단순화 된)에 대한 클래스 구조의 예입니다. save 및 find 메소드는 기술적으로 구체적인 클래스에서 구현되지만 아직 아무 것도하지 않습니다. 이것을 피하기위한 대안은 무엇입니까? 내가 현재 사용하고있는 하나의 옵션은 인터페이스를 구현하는 추상 DataMapperAbstract 클래스이며, 모든 메소드에 대한 예외를 throw 한 다음 모든 구체적인 데이터 매퍼는 사용하는 함수 만 구현하면됩니다. 단지 나쁜 냄새가납니다. 개인적으로, 각 메서드 (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.');
}
}
를이 방법은 * 아직 * 구현되지 있다면, 그때는 괜찮습니다. 일시적으로 누락 된 기능입니다. 결국, 당신은 그것을 추가 할 것입니다. 그렇지 않다면 나는 그것이 꽤 큰 결함이라고 말하고 싶습니다. 클래스 사용자가 기능이 지원되는지 여부를 감지 할 수있는 방법이 없으므로 다른 방법이 없습니다. 나는 여분의 인터페이스를 만들거나 "canSave"/ "canDelete"메서드를 추가합니다. – luiscubal
@luiscubal 좋은 아이디어 ..'false' 값을 가진'canSave \ canDelete'에 대한 추상적 인 클래스를 제공하는 것이 훨씬 낫습니다. –