csa
Guest
и как все это хозяйство будет работать?
Можно поподробнее пожалуйста если не трудно будте так добры маааааааааленький примерчик для конкретного случая. Как можно представить сущность классом и что у него внутри буит?я пользуюсь некоторыми классами, инкапсулирующими понятия cущность, связь 1:M, связь M:M,
на вскидку не скажешь, где на эти копья поглядеть можно?Автор оригинала: fisher
связка ооп и рсубд вообще вещь занятная, но копий тут сломано уже столько, что мама не горюй.
вообще яркий пример брожения мозгов - само наличие на рынке рсубд,ор(объектнро-реляц)субд и оо(объектно-ориент)субд.Автор оригинала: csa
на вскидку не скажешь, где на эти копья поглядеть можно?
Я имел ввиду как можно было бы реализовать данный подход в нашем примере. То есть включить класс 1:М для продукт-вендор связи. Интересно на что он будет похож.Автор оригинала: fisher
2camka:
код не дам, сыроват и заточен под оракл к тому же.
имя таблицы, имя первичного ключа, хэш имен-типов полей, хэш имен-значений полей (для конкретного primary key).
ну и методы типа, select, unsert, update, delete.
а для конкретного объекта структура таблицы - как параметр коструктора класса. ничего принципиального, в-общем.
вот потому то и спрашиваю. Есть ли какое стандартное решение проблемы. Видимо нету. А насчет вендоров дак там атрибутов и десяток может быть.Автор оригинала: vitus
ООП придумали чтоб облегчить жизнь программиста, а не для того чтобы она (жизнь) превратилась в сущий кошмар, используйте его для описания словаря предметной области и не парьтесь
стандартных решений у проблемы не бывает, - тогда она сразу не проблемаАвтор оригинала: camka
вот потому то и спрашиваю. Есть ли какое стандартное решение проблемы. Видимо нету. А насчет вендоров дак там атрибутов и десяток может быть.
Да. Честно говоря я для себя как раз этот вариант и выделил. Довольно интересная реализация с кэшем. Спасиба.Автор оригинала: csa
2camka:
а чем тебе мой подход не нравится? делаешь всего один sql-запрос и его результатами инициализируешь объекты
думаю, для твоего исходного примера этого будет достаточно
while ($product = $iterator->nextProduct()){
echo $product->getName();
$vendor = $product->getVendor();
echo $vendor->getName();
}
я юзаю 'dia' - для рисования UML-диаграмм,Мож кто пользует некую автоматизацию процесса? Ну типа визарда который сам пишет класс для тебя. Или мож кто какое заклинание знает?
да я не про кэшАвтор оригинала: camka
Да. Честно говоря я для себя как раз этот вариант и выделил. Довольно интересная реализация с кэшем. Спасиба.
ну как check-методы ввести в такую иерархию, наверное, и так понятноВот еще такой вопрос:
Я обычно создаю классы для основных таблиц БД. И у всех у них есть методы
Init - вылавливаем все атрибуты по АйДи
Add- Добавляем в БД предварительно проверив передаваемые атрибуты на правильность методами Checkxxx где ххх это передаваемые в Add параметры. То есть для каждого параметра своя процедура проверки.
я использую такую идею (не свою):[...]
Ну вот в общем то вопрос в том что как то не особо здорово писать эти методы для каждого класса причем все они похожи но наследование как то не удается так как есть некоторые различия и специфические особенности. Хочется наследовать их откуда то свыше. Но почему то неудается.
либо мне ничего непонятно по причине общей моей ограниченности, либо что-то тут мне не нравится - приведи интерфейсы упомянутых классов пожалуйста.Автор оригинала: zhuk
Вот пример как это у меня реализовано
class basic extends ??? {
}
class lab extends basic {
...}
class lab_from_id extends lab {
...}
class ProductList extends DataFace{
var $connect; //экземпляр класса, обеспечивающего связь с бд
var $cursor; //курсор со списком
//не инициализировать в конструкторах
var $product = new Product();
var $vendor = new Vendor();
function ProductList($connect, $where_clause)// конструктор
{
$this->connect = $connect;
$this->cursor = $this->connect->OpenQuery(
"select * from product, vendor where $where_clause") ;
// ну или чтонибудь более красивое,
// в зависимости от требований к отборам и от самой бд ...
}
function Next()
{
if($row=$this->cursor->Fetch())
// cursor->Fetch() возврашает ассоциативный
//массив полей запроса
{
// можно расписать по полям,
// но наверное лучше не здесь а в самих вендорах и продуктах
$this->vendor->set($row);
$this->product->set($row);
return 1;
}
return 0;
}
function ShowAll()
{
while($this->Next())
{
$result .= "<всякий хтмл или вызов определённых методов для формирования вывода>";
}
return $result;
}
}
// приведены только используемые в примере методы и поля
// для пущего понимания методы и поля типизированы как в
// Java
class Cursor{
public String[] Fetch(); // не совсем как в жабе, но это ведь для пхп : )
}
class Connect{
public void Connect(String $connstring, Object[] $otherParametersNeeded);
public Cursor OpenQuery(String $sqlString);
}
class Vendor extends DataFace{
public void set(String[] $fields);
// реализовать можно как у zhuk
}
class Product extends DataFace{
public void set(String[] $fields);
// реализовать можно как у zhuk
}
class DataFace{
// этот класс реализует всевозможную функциональность . необходимую всем классам, являющимся интерфейсами к объектам в бд
}
Почему то мне казалось что так поступать нельзя. Инициализация атрибутов являющихся объектами классов должно выполнятся в конструкторе.Автор оригинала: vitus
PHP://не инициализировать в конструкторах var $product = new Product(); var $vendor = new Vendor();