Практическое обобщение (Рейтинг: +2)

Печать / RSS
[/color]

[color=#0000ff]Введение
Как часто вас преследует чувство дежавю в программировании? Многие программисты не догадываются насколько важно это чувство. Оно свидетельствует о том, что пришло время обобщать классы для повторного использования кода!
Толчком, побудившим меня к написанию этой статьи, стала сегодняшняя ночь, а именно то самое чувство.

Предыстория
Несколько недель назад мне понадобилось написать простенький модуль аутентификации клиента. Я не стал использовать сложные алгоритмы безопасности и включать множество полей, таких как IP или логин пользователя, просто в этом не было никакой необходимости. Все клиенты делились на: неавторизированных пользователей и администраторов - а значит, достаточно было
использовать только два поля: идентификатор и пароль. Когда администратор регистрируется, он передает в систему пароль, на что система отвечает ему идентификатором. В будущем администратору необходимо ввести идентификатор и пароль, что позволит ему войти в систему и получить необходимые полномочия.
Архитектура, как и логика модуля, проста до невозможности, и я даже представить не мог, что ее можно еще больше упростить.

Первые шаги
И так я взялся за дело. Сначала реализовал сущность, представляющую пользователя. Все очень просто и лаконично:

<?php
calss User extends LongObject{
protected $pass;

function getPass(){...}
function setPass($pass){...}
}

Родительский класс LongObject используется здесь потому, что все его дочерние классы могут быть сохранены в БД. Этот класс и содержит идентификатор OID.
Менеджер, содержащий логику аутентификации пользователя, был несколько сложнее, но по сравнению с другими менеджерами системы, он был тривиален. Приведу его
краткий интерфейс:

<?php
interface AuthManager{
/* Метод возвращает объект User, восстановленный из сессии.
То есть, если пользователь был уже аутентифицирован,
то метод вернет его состояние*/
function identify();
// Метод выполняется при отключении администратора от системы
function closeSession();
// Метод регистрирует нового администратора, возвращая ему идентификатор
function register();
/* Метод пытается аутентифицировать клиента по полученной
от него ключевой паре - идентификатору и паролю */
function authenticate($OID, $pass);
}

Все предельно просто. За пару часов я полностью реализовал модуль, написал под него тесты (в действительности на написание тестов ушло больше времени, чем на разработку и реализацию модуля D.gif ), документацию и интерфейс. Все работало прекрасно.

Автор: Артур (02.08.12 / 06:24)
Обобщение, абстракция, аутентификация
Рейтинг: +2
Просмотры: 981
Комментарии (10) »