Re[8]: Проектирование модели данных
От: Mazay Россия  
Дата: 25.07.07 10:43
Оценка:
Здравствуйте, Mazay, Вы писали:

Виноват. Должно быть.

M>
M>  ........
M>class C
M>{
M>    SuitableForC * a;
M>    void use() { /* никак не используем */ }
M>};
M> .........
M>


А если лениво описывать интерфейсы можно так:
class Generic_A
{
       void foo() {/* код */}
       void bar() {/* код */}
       void car() {/* код */}
};

class SuitableForB: public Generic_A
{
       //вообще может быть пустым.
}


class SuitableForС: public Generic_A
{
       //вообще может быть пустым.
}

class Derived_A1 : public SuitableForB { ... };
class Derived_A2 : public SuitableForB, SuitableForC { ... }; //тут как-то хитро надо "ромбик" разводить, но это решаемо.
class Derived_A3 : public SuitableForB, SuitableForC { ... };
class Derived_A4 : public Generic_A { ... };

class B
{
    SuitableForB * a;
    void use() { a->foo(); a->bar(); a->сar();}
};

class C
{
    SuitableForC * a;
    void use() { a->foo(); a->bar(); a->сar();}
};
Главное гармония ...
Re[9]: Проектирование модели данных
От: dorofeevilya Россия  
Дата: 25.07.07 10:50
Оценка:
За пример спасибо. Здесь все понятно! Как сам не догадался?! А вот насчет неразделения класса не понимаю, почему наследование в данном случае плохо и как тогда работать с единственным общим классом Материал.
Re[10]: Проектирование модели данных
От: Mazay Россия  
Дата: 25.07.07 11:54
Оценка:
Здравствуйте, dorofeevilya, Вы писали:

D>За пример спасибо. Здесь все понятно! Как сам не догадался?! А вот насчет неразделения класса не понимаю, почему наследование в данном случае плохо и как тогда работать с единственным общим классом Материал.


Ну это я "с высоты собственного опыта" говорю. То есть я полагаю, что в дальнейшем надобности в таком разделении не возникнет. Конечно, тебе виднее, ты домен знаешь лучше. Но скажи, какие методы будут в этих подклассах тогда? Я просто не представляю, что можно делать с Материалом кроме как копировать/сравнивать. Если это всего лишь хранилище специфичных данных, то ради этого не стоит жертвовать рантаймиовой настраимовостью. Лучше какой-нибудь проперти-мэп присобачить. 100% потом проще будет и манипулировать этим и на UI с этим работать.
Главное гармония ...
Re[11]: Проектирование модели данных
От: dorofeevilya Россия  
Дата: 25.07.07 12:12
Оценка:
Спасибо!
Re[11]: Проектирование модели данных
От: IT Россия linq2db.com
Дата: 25.07.07 13:09
Оценка:
Здравствуйте, Mazay, Вы писали:

M>100% потом проще будет и манипулировать этим и на UI с этим работать.


Особенно, если задача дорастёт до применения нормальной БД.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[7]: Проектирование модели данных
От: Кирилл Лебедев Россия http://askofen.blogspot.com/
Дата: 25.07.07 13:43
Оценка:
Здравствуйте, dorofeevilya, Вы писали:

D>Насчет 7160000 соединений мне кажется, что это не отдельные классы, а экземпляры одного из двух классов (class ОргВещество и class НеоргВещество), также как и, допустим, бетоны марки B20 и B25 — два экземпляра class Бетон : Материал, а не два отдельных класса.

Видите ли, с точки зрения проектируемой программы нам не важно, какое это вещество — органическое или неорганическое. Нам важно другое — является ли это вещество материалом, из которого можно сделать конструкцию. И, очевидно, если ответ на последний вопрос "нет", то мы это вещество просто не рассматриваем.

Поэтому и имеем лишь один класс — Материал, а если быть точным, то — Материал для Конструкций.

D>А зачем тогда кодировать модель данных вообще, если все содержится в некой базе данных? Или я неправильно Вас понял?

И я не понимаю: "Зачем?" Если модель данных ничего не делает, то и не нужна такая модель. Мне кажется, что при проектировании правильнее ограничиваться минимальным количеством сущностей. Если у Вас класс не имеет каких-либо обязанностей, смело удалите его. Если несколько классов имеют одинаковые обязанности, то объедините их в один класс, а все лишние — выкините.

Т.е. пишите и оставляйте в программе только те классы, которые у Вас что-то делают.
С уважением,
Кирилл Лебедев
Software Design blog — http://askofen.blogspot.ru/
Re[8]: Проектирование модели данных
От: dorofeevilya Россия  
Дата: 25.07.07 15:07
Оценка:
Здравствуйте, Кирилл Лебедев, Вы писали:

КЛ>Здравствуйте, dorofeevilya, Вы писали:


D>>Насчет 7160000 соединений мне кажется, что это не отдельные классы, а экземпляры одного из двух классов (class ОргВещество и class НеоргВещество), также как и, допустим, бетоны марки B20 и B25 — два экземпляра class Бетон : Материал, а не два отдельных класса.

КЛ>Видите ли, с точки зрения проектируемой программы нам не важно, какое это вещество — органическое или неорганическое. Нам важно другое — является ли это вещество материалом, из которого можно сделать конструкцию. И, очевидно, если ответ на последний вопрос "нет", то мы это вещество просто не рассматриваем.

КЛ>Поэтому и имеем лишь один класс — Материал, а если быть точным, то — Материал для Конструкций.


D>>А зачем тогда кодировать модель данных вообще, если все содержится в некой базе данных? Или я неправильно Вас понял?

КЛ>И я не понимаю: "Зачем?" Если модель данных ничего не делает, то и не нужна такая модель. Мне кажется, что при проектировании правильнее ограничиваться минимальным количеством сущностей. Если у Вас класс не имеет каких-либо обязанностей, смело удалите его. Если несколько классов имеют одинаковые обязанности, то объедините их в один класс, а все лишние — выкините.

КЛ>Т.е. пишите и оставляйте в программе только те классы, которые у Вас что-то делают.


В принципе, я уже начинаю понимать о чем Вы говорите. Действительно, по сути производные классы материалов являются всего лишь хранилищами данных (физических характеристик) какого-либо типа материала. Но как выглядит реализация всего этого дела, я еще не могу понять. Может быть я не очень понятно задачу описал...
Re[9]: Проектирование модели данных
От: Mazay Россия  
Дата: 26.07.07 03:05
Оценка:
Здравствуйте, dorofeevilya, Вы писали:

D>В принципе, я уже начинаю понимать о чем Вы говорите. Действительно, по сути производные классы материалов являются всего лишь хранилищами данных (физических характеристик) какого-либо типа материала. Но как выглядит реализация всего этого дела, я еще не могу понять. Может быть я не очень понятно задачу описал...


В БД это будет:


А в коде тут вообще куча вариантов. Но в основе будет что-то типа map<Parameter, ParameterValue> .
Главное гармония ...
Re: Проектирование модели данных
От: Dufrenite Дания  
Дата: 02.08.07 10:59
Оценка:
А если так:


class B
{
    Generic_A* a;

public:
    B(Derived_A1* a1);
    B(Derived_A2* a2);
    B(Derived_A3* a3);
};

class C
{
    Generic_A* a;

public:
    C(Derived_A2* a2);
    C(Derived_A3* a3);
};
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.