Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: select для производного класса  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 748
doublefint
kolesov
Наследование хранимых - часть хорошей архитектуры... если Каше, конечно ;)

"Favor object composition over class inheritance” the Gang of Four
"Subclasses are dependent on the implementation and entire hierarchy of the parent class: the tightest form of coupling available in OO design"


Шаблонное мышление ведет к шаблонным решениям - это даже чем-то хорошо. У "банды" неплохо получилось организовать жизнь массы средней руки проектировщиков и программистов "без задоринки". Задумываться не обязательно. Ну и средний уровень болота уверенно стабилен ;) Религия ведь тоже массу людей с сомнительными зачастую перспективами эффективно превращает в прекрасную нормированную паству (или стадо - тут как посмотреть) - всем от этого только польза! Там правда, банда двенадцати поработала ;)

Однако же реалии нашей с вами платформы давно показали, что про шаблоны нужно помнить, но нельзя ими бездумно мыслить (простите каламбур) - и вот тогда можно сделать что-то выше среднего уровня.

Про грузооборот было, на мой (скромный) взгляд, некогда очень хорошо придумано:

груз -------* строка грузового документа *------- грузовой документ

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

Вся информация о грузе собирается одним запросом, контроль связей очень простой и надежный, не нужно особо задумываться при модификациях или изменениях бизнес-требований. Экономится не то, чтобы много времени, а ПРОРВА ВРЕМЕНИ. Удешевляется разработка и, главное, поддержка. И это только один пример.
9 окт 18, 02:49    [21698802]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
kolesov
... И это только один пример ...
Именно. Т.е. частный случай. Как только показалось, что нашли универсальное решение для всех возможных сценариев ( "наследование наше всё" ) - готовьтесь. А развешивать ярлыки на основании своего частного случая ...
kolesov
... Задумываться не обязательно ...
kolesov
... не нужно особо задумываться ...
Классический kolesov :)
kolesov
От груза наследовались контейнеры, насыпные-навалочные, автомобили, нефтепродукты и проч.
А потом прилетает постановка сделать приложение, работающее только, и только, например, с автомобилями.
9 окт 18, 11:11    [21699005]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 748
doublefint,

Вот скучаю с Вами - сыплете чужими цитатами и своей демагогией. Я показал хорошее решение - многим пригодилось. Вы ЧТО показали?
9 окт 18, 13:55    [21699267]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
kolesov
... Вы ЧТО показали? ...
Надеюсь, что предупредил - решение имеет свои существенные недостатки. Думать надо всегда. Смешали всё в одну кучу ( хорошая архитектура, ага :) - готовьтесь разгребать. Кстати, чем можете помочь автору темы? :)
Интересный прием использования наследования можно посмотреть у самой ISC, когда базовый класс содержит параметры, по которым генерируется код наследников. Примеров хранимого наследования, навскидку, не припомню - если кто знает, подскажите.
kolesov
сыплете чужими цитатами
Ну, имея опыт общения с вами, вынужден. Для вас ведь никто не является авторитетом, не так ли? :) Если создатели ООП говорят быть осторожнее с наследованием, к кому же прислушаться? :)
kolesov
и своей демагогией
Ну что вы, в этом вы признанный лидер :) "Концентрация на частности", "ad hominem" - перечитайте свои сообщения в этой теме, можно только учиться :)
9 окт 18, 16:42    [21699481]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 748
doublefint,

Приношу извинения, видимо про визг вы приняли на свой счет - а мне вовсе не хотелось переходить на личности - просто фигура речи такая получилась. Согласен, довольно грубо. Еще раз простите. И предлагаю различать дискуссию от обсуждения и осуждения собеседников, ок?
10 окт 18, 01:49    [21699950]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
logist
Member

Откуда: InterSystems
Сообщений: 244
doublefint
римеров хранимого наследования, навскидку, не припомню - если кто знает, подскажите.


Ну надо заметить, что в коде от ISC хранимых классов вообще не очень много.
10 окт 18, 03:35    [21699966]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
kolesov
... просто фигура речи такая получилась...
Ой, я вас умоляю, это же ваш фирменный стиль общения - kolesov™ Не пройдет и двух минут... :)
kolesov
... и предлагаю различать ...
Еще раз предлагаю вернуться к теме, автор которой, похоже, воспользовался "хорошим решением". В соседней теме он уже предлагает ISC переделать хранение как раз под этот случай. Так что же ему теперь делать? Расскажите, "многим пригодилось" - рано или поздно, многим тоже понадобится как это из этого выпутываться.
10 окт 18, 11:56    [21700268]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 748
Как много Вы обо мне знаете? Я вот Вас не дифференцирую из компании, но теперь постараюсь запомнить, где не стоит тратить время ;)
doublefint
Расскажите, "многим пригодилось" - рано или поздно, многим тоже понадобится как это из этого выпутываться.

Вот только там, где это работает уже больше десятка лет и разгребать-то уже некому - программистов каше не осталось. А оно всё работает, наверное, назло злопыхателям!?
10 окт 18, 12:04    [21700277]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
kolesov
где не стоит тратить время ;)
Вы это уже обещали :) Хм, чуть больше двух минут :)
kolesov
работает, наверное, назло злопыхателям!?
:)
Еще раз, пожалуйста, помогите автору темы. Итак, смешали контейнеры, нефть, автомобили и пр. Работает десятилетиями - данных много. Как теперь работать только с автомобилями. Конкретный вопрос - ваши советы. Очень вероятно, что мы просто не знаем, что известно вам.
10 окт 18, 12:43    [21700340]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
logist
в коде от ISC хранимых классов вообще не очень много.
Но и не мало - см. таблицу Subclasses. Ensemble - по сути, большой пример, написанный ISC, на ее же технологиях.
10 окт 18, 12:49    [21700353]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 748
doublefint
Работает десятилетиями - данных много. Как теперь работать только с автомобилями. Конкретный вопрос - ваши советы. Очень вероятно, что мы просто не знаем, что известно вам.

А так и работать. Так и работали - грузопоток меняется - ушла нефть, больше не создаешь новых грузов этого класса. Хочешь только авто? Не трогай контейнеры - не твоё. Появились банные веники с особым набором характеристик и бизнес-операций(поведения) - грузишь девов разработать новый класс грузов. Причем вся остальная логика и документооборот для веников уже готовы. Проблема в чем?
10 окт 18, 13:04    [21700374]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
kolesov
Хочешь только авто? ... Проблема в чем?
alatalo
Но ведь тогда, без дополнительных индексов по типу, все это имеет сомнительную пременимость поскольку будет серьезно подтормаживать при большом колве записей
10 окт 18, 13:12    [21700389]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 748
doublefint,
Ну Extent же индекс! Писали выше.
10 окт 18, 13:25    [21700413]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 748
doublefint,
Причем каше, даже если забыть про экстент, все равно проседает не на тех запросах, что "ах все данные в одной глобали" - тут проблемы только в топиках этого форума встречал, но не на практике.
На практике есть класс, в который забыли добавить экстент-индекс, вспомнили лет через 5-ть... а выборки ааатлично шли все это время ;)
10 окт 18, 13:29    [21700425]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 748
doublefint,
Переформулирую в виде максимы: Если есть причины подозревать (бояться и трепетать), что некие данные должны лежать в одной глобали - необходимо отдаться судьбе и их туда таки сложить!
10 окт 18, 13:49    [21700462]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
kolesov
Переформулирую в виде максимы
Переформулируйте в виде простых списков - есть решение, есть достоинства, есть недостатки
kolesov
некие данные должны лежать в одной глобали
Это просто не наш уровень - классы наше всё. Сформулируйте предпосылки, признаки, условия, при которых стоит использовать хранимое наследование.
alatalo
... без дополнительных индексов по типу ...
kolesov
Ну Extent же индекс!
10 окт 18, 14:42    [21700564]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 748
doublefint,

"- Мама, а как не забеременеть не предохраняясь?"
12 окт 18, 10:23    [21702237]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
kolesov, согласен, автор хочет странного.

Но и планировать архитектуру из, даже не требования, а просто из идеи "все должно лежать в одной глобали" ( откуда такой посыл? почему? какого? ) - не менее странно.
Начнём формулировать?

Наследование хранимых классов

Достоинства:
- Единый интерфейс для наследников
- Удобная выборка из всех наследников

Недостатки:
- Потенциальная возможность блокировки всей глобали при работе ( CRUD ) с экземплярами определенного наследника
- Необходимость объявлять Extent индекс для выборки из конкретного наследника ( похоже, для автора это проблема )

Понимаю, что с этими несущественными недостатки, вы на практике не сталкивались. Но у других могут быть другие обстоятельства, не так ли?
12 окт 18, 10:55    [21702265]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 748
doublefint
kolesov, согласен, автор хочет странного.

Да нет же - у нас в "стране" секса нет!
12 окт 18, 14:36    [21702574]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 748
doublefint
kolesov, согласен, автор хочет странного.

Но и планировать архитектуру из, даже не требования, а просто из идеи "все должно лежать в одной глобали" ( откуда такой посыл? почему? какого? ) - не менее странно.
Начнём формулировать?

Наследование хранимых классов

Достоинства:
- Единый интерфейс для наследников
- Удобная выборка из всех наследников

Недостатки:
- Потенциальная возможность блокировки всей глобали при работе ( CRUD ) с экземплярами определенного наследника
- Необходимость объявлять Extent индекс для выборки из конкретного наследника ( похоже, для автора это проблема )

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

Вы все смешали, не знаю, почему.
Я не говорил, что все в одной глобали должно... но иногда - да.

Из достоинств еще:
- Общее поведение, часто реализованное ОДИН раз
- Единая структура связей, когда новый член "семьи" уже знает, кто тетка, и за что ему влетит от бати.
- Индивидуальные наборы данных, вместо "общей" таблицы на 800 столбцов (сам видел!) - опять же защита от некорректных транзакций, когда мужику вписывают, какой у него триместр (нечаянно, конечно, но тоже видел и ржал - это кстати плюс говнопроектирования - доставляет улыбнуться)
... это точно не все, повспоминаю еще - стоит отдельной темы

Про недостатки - второй смешной, а по КРУД у меня как всегда свой большой бзик: круд - он ТОЛЬКО для разработчиков, а для бизнес-логики только объекты. У меня одна маруся так схлопотала, когда добавила триггер в систему, что мама не горюй. Но блокировки, sql-доступ и объекты это тоже отдельная тема. Не лочились мои каше-базы НИ РАЗУ за 20 лет. А там сотни миллионов записей на глобал было. Давно не заглядывал, но думаю, что под 2 лярда в кое-каких "табличках" есть.

Ладно, жена наслушалась арбениной живьем и тащит в кабак - не могу отказать )))
12 окт 18, 14:56    [21702603]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
kolesov
Я не говорил, что все в одной глобали должно... но иногда - да.
kolesov
... данные должны лежать в одной глобали - необходимо отдаться судьбе и их туда таки сложить!
Что именно я смешал? Общение через форум имеет свои особенности, возможно я что-то не уловил.
kolesov
Из достоинств еще:
- Общее поведение, часто реализованное ОДИН раз
Мы же говорим про наследование хранимых классов? Поведение появляется тогда, когда данные считаны в память с диска, так? Т.е. предпологал, что речь пойдет про свойства, индексы, связи
kolesov
- Единая структура связей ...
Виноват, пропустил. Какой именно вид связей вы используете - relationship, foreignkey, ссылочные свойства?
kolesov
- Индивидуальные наборы данных, вместо "общей" таблицы на 800 столбцов ...
У нас первым пунктом достоинств - простая выборка всех наследников. Приведёте пример общих полей для контейнеров, нефти, автомобилей кроме id, name? Не могу согласиться с такой формулировкой - у отдельной таблицы вполне себе индивидуальный интерфейс
kolesov
Про недостатки - второй смешной
Кто знает, может автор забыл, и теперь у него сотни-тысячи наследников базового в супернагруженной системе, может места не хватает на дополнительные индексы, может планы запросов как-то поплывут в жизненно-важной бизнес-логике, может еще что-нибудь :)
kolesov
а по КРУД у меня ... У меня ... мои ... НИ РАЗУ за 20 лет.
Принимается. 20 лет огромный опыт. Охватывает ли он все возможные сценарии? Хотелось бы сосредоточится на более определенных вещах, в недостижимом идеале ( servit стал реже сюда заглядывать :) со ссылками на документацию, тесты, примеры кода.

И вот это:
kolesov
не нужно особо задумываться при модификациях или изменениях бизнес-требований
Блок А.Н.
Нужно будет намного аккуратнее продумывать индексы и запросы ...


Достоинства:
- Единый интерфейс для наследников
- Удобная выборка из всех наследников
- Единая структура и контроль связей

Недостатки:
- Одна глобаль для хранения всех экземпляров-наследников - возможность блокировки всей глобали
- Extent индекс для выборки из конкретного наследника
12 окт 18, 16:46    [21702747]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 748
doublefint, а чего хотите-то? Отвечать лениво и долго. Вам помощь нужна? Если нет, то стоит прервать разговор - поболтать пальцами удалось вроде ) (гы - я щас за мандарин вместо мышЫ ухватился - "вчерашнее стоит столбом")
13 окт 18, 12:12    [21703221]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
doublefint
Member

Откуда: Беларусь, Минск
Сообщений: 928
kolesov, если присмотреться к списку достоинств, то действительно стоящим выглядит только единая структура - ( Документ <-> Строка -> Груз ). Общий список и единый интерфейс ( список полей ) можно получить и другими способами.
В недостатки можно добавить overhead на ООП - в структуре единой глобали использются ключи с именем класса ( для индивидуальных наборов данных), для каждого экземпляра сохраняется вся цепочка наследования.

Достоинства:
- Единая структура связей

Недостатки:
- Одна глобаль для хранения всех экземпляров-наследников - возможность блокировки всей глобали
- Extent индекс для выборки из конкретного наследника
- Overhead на ООП

Насколько я понял, в вашем приложении наследование используется для всех трех сущностей предметной области - Документы, Строки, Грузы?
14 окт 18, 07:40    [21703518]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
kolesov
Member

Откуда: Владивосток
Сообщений: 748
doublefint
Недостатки:
- Одна глобаль для хранения всех экземпляров-наследников - возможность блокировки всей глобали
- Extent индекс для выборки из конкретного наследника
- Overhead на ООП

- Блокировок, повторюсь, не встречал. Если у Вас что-то постоянно блокируется, пересмотрите подход. М.б. укоротить транзакции? Блокировки следует ожидать не столько исходя из структуры системы, а скорее из реалий бизнеса - типичная ситуация когда сотня операторов создает и правит одни и те же документы 24х7 - но тут проблема закрывается не столько структурой, сколько логикой - отдельным частным механизмом разруливания конфликтов доступа и блокировок. Остальное - измышления и лишний академизм. Тупее нужно, тупее. Задумываться меньше - тогда будет время на достижение результатов ;)
- Чем экстент-то не угодил? Точно лучше чем заново описывать структуру данных, при появлении новых сущностей типа "документ" или "груз"
- Вы имели в виду накладные расходы, так откажитесь от ООП и делайте все вообще на прямом доступе - я точно придраться не смогу ;)

И приложение не мое - я привел пример из далекого прошлого. На поздних грузовых проектах еще хитрее было разрулено - но с Вами неинтересно говорить - Вы при..в@етесь вместо конструктива. Извините, если это будет последний ответ в теме - правда, не люблю я ононизм.
15 окт 18, 05:09    [21703814]     Ответить | Цитировать Сообщить модератору
 Re: select для производного класса  [new]
logist
Member

Откуда: InterSystems
Сообщений: 244
kolesov,

Насколько я понял обсуждаем выбор между наследованием и композицией, т.е. практически

Class Car Extends Cargo {}

vs

Class Car Extends %Persistent {

Property Cargo As Cargo [Required];

}

Оба подхода имеют достоинства и недостатки, но на мой взгляд в Каше (Ансамбле/ИРИСе) отличаются незначительно.
15 окт 18, 06:17    [21703820]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить