Re: Проектирование класса на примере User
От: komaz Россия  
Дата: 13.07.09 10:23
Оценка:
Здравствуйте, 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");
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.