Есть один вопрос. Вот стоит задача, написать программу по управлению разными объектами ( User, Company, Bank ) и так далее. Эти объекты лежат в Бд, программа должна с ней общаться. В процессе разработки вот что заинтересовало. Я писал так: Код (Text): typedef struct user { int *id; char *login; char *password; char *First_Name; }user; user * user_findById() { user *res = malloc (sizeof (user)); ... //Общаемся с SQL.. return res; }; И так куча функций; Но! У каждого объекта есть поле Id. Каждый объект можно исктать по ID, удалять, зная Id и модифицировать. Более того, есть таблица "Company", но Bank, Office - это тоже "Company" Тогда я решил попробовать создать обобщённую структуру, управляющую остальными: Код (Text): typedef struct Company_Common { Company *(*createNew)(int Company_Type); // где-то описано Bank *(*createBank)(Bank_Account *initial_account); //и так далее с функциями БД }CommonObject; Но это тоже очень дофига. Вопрос: Как мне сделать Некую конструкцию, которая объединяла бы свойства и банка, и офиса и прочих вариантов? Я так понял, надо мутить что-то с вложенной структурой вроде struct a{ int id; struct a *parent; } но как тогда устанавливать значения полей у parent, я запутался.
сделайте так, чтобы все "элементы" наследовались от одного класса и манипулируйте ими как указателями на класс родителя...
blacktelecom Что так? Мы не против, просто интересно зачем понадобилось использовать малоподходящий язык.
blacktelecom Нет наследования - воспользуйся агрегацией. Код (Text): struct company_info { // адрес и название }; struct bank_info { company_info company; // свойства, характерные для банка }; struct office_info { company_info company; // свойства, характерные для офиса };
_Den_ Это мысль, однако. Попробую расписать процедуры сохранения объектов в базу на этой основе. А CompanyBuildel тогда будет строить объекты на базе CompanyInfo, а для всех этих объектов тупо определим общие функции (create, find, update),
А ещё вопрос: Так делают? some1.h: #define SOME1_H #define MY_CONSTANT "My value" some2.h #define SOME2_H #define MY_CONSTANT "next val" app.c #include "some1.h" #include "some2.h" somevoid (char *); #undef SOME2_H #ifdef SOME_H somevoid ( MY_CONSTANT); #endif В общем, использование препроцессора для работы с одной и той же константой при разных обстоятельствах. Это я для того делаю, что пробую связать код и данные в одно целое, то есть пусть у объекта есть формат описания, где не только структура с полями, но и таблица в бд, и Sequences и ERP ( one2one, one2many...) Я хочу чтоб в зависимости от ситуации генерился SQL запрос