Различные реализации интерфейса

-=Koba=-
Дата: 01.06.2017 09:09:06
Иногда сталкиваюсь с данной проблемой и хочу узнать, как лучше ее решать

public interface ICommon {
	Client readClient(String firstName, String lastName);
}

public class OracleDao implements ICommon {
	@Override
	public Client readClient(String firstName, String lastName) {
	}
}

public class MySQLDao implements ICommon {
	@Override
	public Client readClient(String firstName, String lastName) {
	}
}

public class PGDao implements ICommon {
	@Override
	public Client readClient(String firstName, String lastName) {
	}
}


Так получилось, что например для начитки данных из Oracle понадобился еще 3 параметр, как правильно реализовать это
Добавить в интерфейс еще один метод?

public interface ICommon {
	Client readClient(String firstName, String lastName);
	Client readClient(String firstName, String lastName, String middleName);
}

public class OracleDao implements ICommon {
	@Override
	public Client readClient(String firstName, String lastName) {
	}
	@Override
	public Client readClient(String firstName, String lastName, String middleName) {
	}
}


public class MySQLDao implements ICommon {
	@Override
	public Client readClient(String firstName, String lastName) {
	}
	@Override
	public Client readClient(String firstName, String lastName, String middleName) {
		retrun readClient(firstName, lastName);
	}
}

public class PGDao implements ICommon {
	@Override
	public Client readClient(String firstName, String lastName) {
	}
	@Override
	public Client readClient(String firstName, String lastName, String middleName) {
		retrun readClient(firstName, lastName);
	}
}


Или изменять существующий?

public interface ICommon {
	Client readClient(String firstName, String lastName, String middleName);
}

public class OracleDao implements ICommon {
	@Override
	public Client readClient(String firstName, String lastName, String middleName) {
	}
}


public class MySQLDao implements ICommon {
	@Override
	public Client readClient(String firstName, String lastName, String middleName) {
	}
}

public class PGDao implements ICommon {
	@Override
	public Client readClient(String firstName, String lastName, String middleName) {
	}
}


То есть и тот и то я не считаю идеальным, для MySQLDao и PGDao появляется либо лишний метод, либо лишний параметр.
Может есть более элегантный вариант?
ermak.nn
Дата: 02.06.2017 09:10:25
А через абстрактный класс не лучше будет?
с методом
public Client readClient(String firstName, String lastName, String middleName) {
    return readClient(firstName, lastName);
}
MasterZiv
Дата: 05.06.2017 11:05:34
-=Koba=-,

Есть такая концепция -- версии интерфейсов... Если что, смотреть в COM/OLE.
-=Koba=-
Дата: 07.06.2017 20:57:33
MasterZiv
-=Koba=-,

Есть такая концепция -- версии интерфейсов... Если что, смотреть в COM/OLE.

А можно более подробнее, в каком направлении гуглить...(
For All
Дата: 27.06.2017 18:21:52
-=Koba=-
Так получилось, что например для начитки данных из Oracle понадобился еще 3 параметр, как правильно реализовать это
Добавить в интерфейс еще один метод?

Получается что либо для Oracle нужен свой отдельный интерфейс,
либо этот третий параметр - это поле класса который имплементит нужный интерфейс (но не аргумент в методе)
Нахлобуч
Дата: 28.06.2017 10:50:07
Вдарим паттернами по бездорожью. Parameter Object.