Организация логики проекта

MasterSID

Новичок
Организация логики проекта

Возник такой вот вопрос:
допустим у нас в проекте есть определенный тип данных, например информация о пользователе. В базе данных эта запись имеет примерно 10 полей. И есть класс для этого типа данных с методами: добавить, удалить, обновить, получить всех.

Теперь допустим, что мы решили обновить или добавить новго пользователя. Как я понимаю, если писать грамотно, то по идее метод класса должен принимать в качестве параматров значения этих полей, проверять их на пригодность, производить соответствующую обработку информации в базе данных и возвращать результат своей работы.

Теперь представим, что эти данные введены из простой web-формы. Т.е. мы имеем дело с переменными типа $_POST['var'], которые тоже нужно проверить, т.к. если в качестве параметра методу класса пойдет $_POST['var'] и ключа 'var' в этом массиве не будет, то мы получим ноутис, а это нехорошо. Получается проверку нужно делать до вызова метода класса. И в итоге, фактически одна и таже проверка будет произведена два раза - в методе класса и до ег овызова, только в первом случае объектом проверки будут переменные, полученные от пользователя, а во втором - параметры метода класса. Правильно ли это или я что-то путаю?
 

integral9

Новичок
А зачем передавать его в качестве параметра?
$_POST['var'] ведь и так будет внутри класса доступен?
Я обычно внутри функций класса обработку делаю.
 

MasterSID

Новичок
А грамотно ли это с точки зрения ОО подхода?

-~{}~ 30.08.05 08:44:

Ведь нарушается инкапсуляция и получается, что данный метод становится доступным только для добавления информации с web-формы, но не другими способами
 

integral9

Новичок
Ну если так говорить, то php и сам-то с точки зрения ООП фикция сплошная.
 

MasterSID

Новичок
ну посуди с точки зрения функциональности
получается ты привязан этим методом к форме
 

Andreika

"PHP for nubies" reader
MasterSID
можно пример плиз и что там не нравится %)
а то чего-то на слоностроительную мухоперерабатывающую фабрику похоже
 

integral9

Новичок
Автор оригинала: MasterSID
ну посуди с точки зрения функциональности
получается ты привязан этим методом к форме
Если речь идет о пользователях, то обычно их создание/изменение осуществляется через форму,
и делать абстрактные классы для web-приложений, на мой взгляд, все равно что катком копать грядку :)
 

MasterSID

Новичок
Andreika, пример чего?

integral9, а если речь идет не о пользователях? я их лишь в пример привел. А если речь идет, к примеру, о каких-то параметрах системы, которые могут меняться как с веб-формы, так и из скрипта? Тогда как?
 

Andreika

"PHP for nubies" reader
class {
function adduser (&$userinfo) {
.....
}
}

$it->adduser($_POST);
$it->adduser($myarr);


пример "проблемы".. пример неких проверок.. проверок на что? на существование $_POST['var'] ? на правильность данных в нем?
 

integral9

Новичок
Автор оригинала: MasterSID
Andreika, пример чего?

integral9, а если речь идет не о пользователях? я их лишь в пример привел. А если речь идет, к примеру, о каких-то параметрах системы, которые могут меняться как с веб-формы, так и из скрипта? Тогда как?
Да элементарно - необязательный параметр функции и все

function SetValue($_value=""){

if($_value){
$this->value = $_value;
return;
}

дальше пост проверяешь или гет или сессию

}
 

crocodile2u

http://vbolshov.org.ru
мы имеем дело с переменными типа $_POST['var'], которые тоже нужно проверить, т.к. если в качестве параметра методу класса пойдет $_POST['var'] и ключа 'var' в этом массиве не будет, то мы получим ноутис, а это нехорошо. Получается проверку нужно делать до вызова метода класса. И в итоге, фактически одна и таже проверка будет произведена два раза - в методе класса и до ег овызова
Проверять нужно один раз. Второй - притянут за уши. Где удобнее.оптимальнее делать эту проверку - можно/нужно решать для каждого конкретного случая.
У меня, например, ни одна форма не приведет к выполнению действия до того, как пришедшие из нее значения пройдут валидацию. Но это не значит, что в каком-то случае не будет удобно проверять данные непосредственно в обработчике формы.
 

MasterSID

Новичок
так вот в случае с абстрактным кодом выходит, что проверка должна проходить несколько раз, только первый раз будут проверяться введенные пользователем данные и их наличие, а потом параметры метода, в качестве которых эти данные будут переданы. В итоге получается, что одни и теже данные проверяются дважды. Так?

Интеграл, либо ты меня, либо я тебя не понял. Все данные мы храним в базе и работать с ней желательно как можно меньшим количеством запросов.
 

crocodile2u

http://vbolshov.org.ru
Нужно [по крайней мере стараться] делать так, чтобы лишние действия не производились. Если они производятся, тем более производятся систематически - ошибка где-то на уровне подхода к проектированию.
 

MasterSID

Новичок
хорошо, какой твой вариант абстрактного класса, где проверка проводится один раз

точнее проекта с абртрактным классом
 

crocodile2u

http://vbolshov.org.ru
У меня сначала идет проверка, какая форма отсабмитилась (их может быть несколько), затем для отсабмиченной формы идет фильтрация и валидация данных (необходимые поля, проверки рег. выражениями, проверка дат и т. д.). Если валидация прошла успешно, вызывается нужный метод нужного объекта, в качестве параметра - данные формы. Внутри этого метода валидации не производится - только проверки, которые следуют из логики приложения (допустим, для редактирования объекта - существование этого самого объекта).
При чем тут абстрактный класс. я вообще не понимаю.
 

MasterSID

Новичок
Абстрактный класс притом:
2 возможности добавить информацию в базу данных: из формы и из программы.
т.е. в классе есть метод
function add($name, $option){

}

чтобы этот метод работал всегда корректно, проверка валидности введенных данных долна вестись в нем или вызываться из него.
Но также нужно вести проверку данных введенных пользователем - на их наличие. И проверка на наличие данных присутсвует в проверке валидности перед добавлением в базу. Вот я о чем
 

crocodile2u

http://vbolshov.org.ru
MasterSID
Еще раз:
место, где ты валидируешь данные, определяется твоим приложением. Но дважды они проверяться не должны, согласен?
Стало быть: либо а) класс работает, так сказать, standalone - любые данные проверяются в нем, и больше ему ничего не нужно, либо же б) методы класса полагаются на внешнюю валидацию. Дублирование - это не есть хорошо.
 
Сверху