Size: a a a

Software Design/Architecture/Zen

2021 January 29

I

Ioann_V in Software Design/Architecture/Zen
Но проблема в том, что если делать базовый класс, то мы теряем знание о конкретном рисуемом объекте и его методах, специфичных.
источник

I

Ioann_V in Software Design/Architecture/Zen
Но у базового класса рендера я сделал методы - установить любой рисуемый обхект, и получить любой рисуемый обхект. Где любой == полиморфизм.
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
как соотносятся "мячик" и "круг"? игру чтоли делаешь:
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
если ты хочешь, чтобы в один объект передавался другой объект лишь в базовом виде, значит этот объект не должен знать от том, какие наследники (реализации) есть у этого базового класса. либо надо передать конкретный класс
источник

I

Ioann_V in Software Design/Architecture/Zen
Алексей Гевондян
как соотносятся "мячик" и "круг"? игру чтоли делаешь:
Да. Мячик внутри себя содержит рендер объект.
источник

I

Ioann_V in Software Design/Architecture/Zen
Ioann_V
Смотри:

Поймешь код?

#include <cstdint>
#include <memory>

class render_data_base_t
{

};

class render_data_rectangle_t : public render_data_base_t
{
public:
   void set_w( uint32_t w )
   {

   }

   void set_w( uint32_t w )
   {

   }
};

class render_data_circle_t    : public render_data_base_t
{
public:
   void set_r( uint32_t )
   {

   }
};

class interface_get_render_data_t
{
public:
   virtual render_data_base_t* get_render_data()                       = 0;
};

class interface_set_render_data_t
{
public:
   virtual void                set_render_data( render_data_base_t* )  = 0;
};

class render_object_base_t : public interface_get_render_data_t,
                            public interface_set_render_data_t
{
   std::unique_ptr<render_data_base_t>    m_render_data;
public:
   virtual render_data_base_t* get_render_data()                       override
   {

   }

   virtual void                set_render_data( render_data_base_t* )  override
   {

   }
};


А теперь вопрос такой, хочу я где-то, получать мои рендер данные и гарантированно известно, что там это всегда render_data_circle_t - дочерний класс, и вот хочется мне у него менять радиус, а я получаюбазовый класс. Кажется, что самое место двойной диспетчеризации и Visitor паттерну, у которого, правда что, для прямоугольника - будет пустой метод, а вот для круга - нужное поведение. И вот это -смущает. Вдумавшись, я вижу тут ошибку проектирования иерархии, и вот, уже кажется что нужен не только render_object_base_t, который полиморфно принимает что угодно, но и render_circle_object_base_t. Вот как сделать? Мне важно как правильно, а не как гибко или быстро и т.п
вот тут, в коде, есть render_object_base_t
источник

I

Ioann_V in Software Design/Architecture/Zen
Это собственно то, от чего я хотел бы унаследовать Мяч, но такой подход - не работает, так как в render_object_base_t хранится полиморфный рендер объект. Выходит, я должен сделать отдельный базовйый класс рендер круг объекта, который хранит внутри себя только рендер круга?
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
тебе нужно выписать сущности, и определить
1) какими свойствами они обладают
2) какие действия с ними можно произвести
просто список классов, никак не связанных. если найдется что-то общее - уже подумать, что с этим делать.
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
пока у тебя все сложно и вообще хз что ты хочешь сделать. не понятная система какая-то.
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
выглядит как желание драить преждевременно..
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
то, что мячик содержит рендер объект логически обозначает, что мячик может быть квадратным. если не может - у тебя ошибка проектирования.
источник

I

Ioann_V in Software Design/Architecture/Zen
Алексей Гевондян
то, что мячик содержит рендер объект логически обозначает, что мячик может быть квадратным. если не может - у тебя ошибка проектирования.
Вот. Я тоже так считаю. Но я как раз хочу, не чтобы мячик содержал, а что бы он наследовался от того, кто содержит. Ну чтобы уменьшить кододубликаты.
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
если надо рендерить мячик - ну унаследуй его от круга (хотя это так себе подход), лучше заинъектить круг
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
именно круг, а не "рендерабл"
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
вообще лучше не связывать эти вещи - это разные концепты, круг это круг, мяч это мяч. мяч играет бизнес-роль, а круг - инфраструктурную (условно)
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
в общем вернись на исходную, и выпиши характеристики и действия объектов. свойства и методы т.е., не думай вообще о наследовании.
источник

@

@LongMinasteriet in Software Design/Architecture/Zen
Бойцы,  дело серьёзное. Застрял в ванне собственных сомнений. нужны идеи или совет опытных вождей.
Знаю синтаксис c# , знаю немного Ms SQl,  Linq.
Какой проэкт реализовать (  конкретный пример ) что бы использовать свои навыки и  в резюме потом записать. Моя цель это backed разработка.
Суть в том что не могу понять куда двигаться и за что браться. Потому прошу помощи у тех кто уже прошёл этот этап и знает куда надо воевать, что бы не стоять на месте. Буду очень признателен.
источник

A

Arky in Software Design/Architecture/Zen
@LongMinasteriet
Бойцы,  дело серьёзное. Застрял в ванне собственных сомнений. нужны идеи или совет опытных вождей.
Знаю синтаксис c# , знаю немного Ms SQl,  Linq.
Какой проэкт реализовать (  конкретный пример ) что бы использовать свои навыки и  в резюме потом записать. Моя цель это backed разработка.
Суть в том что не могу понять куда двигаться и за что браться. Потому прошу помощи у тех кто уже прошёл этот этап и знает куда надо воевать, что бы не стоять на месте. Буду очень признателен.
написать чатик)
источник

В

Виктор in Software Design/Architecture/Zen
@LongMinasteriet
Бойцы,  дело серьёзное. Застрял в ванне собственных сомнений. нужны идеи или совет опытных вождей.
Знаю синтаксис c# , знаю немного Ms SQl,  Linq.
Какой проэкт реализовать (  конкретный пример ) что бы использовать свои навыки и  в резюме потом записать. Моя цель это backed разработка.
Суть в том что не могу понять куда двигаться и за что браться. Потому прошу помощи у тех кто уже прошёл этот этап и знает куда надо воевать, что бы не стоять на месте. Буду очень признателен.
Инструмент, которым ты сам будешь пользоваться. Ничего так не вдохновляет, как уверенность в том, что у тебя будет заинтересованный пользователь)
источник

Д

Дмитрий in Software Design/Architecture/Zen
калькулятор сначала.
источник