Здравствуйте, Kalastiuz, Вы писали:
K>Существует некоторый класс User в котором описан метод IsValidUser(login, password). В реализации метода необходимо подключаться к БД и опеределять существует ли пользователь с параметрами логин и пароль.
K>Необходимо реализовать класс так, чтобы его можно было повторно использовать и в других приложениях. Но в других приложениях может измениться имя таблицы и/или имена полей в таблице.
K>Возникли затруднения с самой его реализацией и на ум проходят два выхода, между которыми не могу сделать выбор.
K>1. В других приложениях описывать какой-то дочерний класс от User и в новом классе переопределять метод IsValidUser, но тогда толку от реализации логики в базовом классе, если его все равно придется переписать.
K>2. В каком-то конфиг-классе или в настройках приложения или в настройках "первого запуска приложения" (не столь важно) указывать имя таблицы пользователей и имена полей login и password. И в реализации метода использовать именно эти значения.
K>Класс User взят в качестве примера, в библиотеке может быть большое количество классов реализованных по такому-же принципу. Даже в этом же классе, например методы: IsExist(login), IsActive(user_id) и т.п.
Почему методы IsValidUser, IsExist и IsActive что-то принимают? Они статические? Или класс User на самом деле не то чем кажется?
public class User {
public User(IUserProvider provider, int id) {
this.id = id;
this.provider = provider;
}
public boolean isValid(String password) {
return provider.isValid(id, password);
}
public boolean isActive() {
return provider.isActive(id);
}
}
public class MyDatabaseUserProvider implements IUserProvider {
public DatabaseUserProvider(Properties properties) {
this.usersTable = properties.getString("usersTable");
this.nameColumn = properties.getString("nameColumn");
this.passwordColumn = properties.getString("passwordColumn");
}
}