Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60170
Artem.1st> Я неправильно выразился. Задача даже не
Artem.1st> масштабная, а неограниченная размерами.
Artem.1st> Ее бесполезно дробить, это будет рутиной.

Возьмётесь за гуж неограниченных размеров - не сдюжите.
Так что таки беритесь за гужики поменьше (в т.ч. дробите
большие на меньшие). А иначе впустую потратите время на
разработку "методик контроля программного функционала".

Posted via ActualForum NNTP Server 1.5

14 авг 19, 15:32    [21949363]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48155

Artem.1st
мои исследования уткнулись в то, что во многих прикладных задачах Элемент должен знать о
Контейнере. Например, в реляционных структурах зависимые сущности ссылаются по ключу на
главную сущность.

Реляционные структуры хранения не имеют ничего общего с контейнерами: главная сущность не
является контейнером и не следит за зависимыми от неё сущностями.

Artem.1st
А вот это реальный код из Classes.pas

Да, VCL весьма часто представляет собой наглядный пример плохой архитектуры и "как делать
не надо".

Posted via ActualForum NNTP Server 1.5

14 авг 19, 15:38    [21949367]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1969
Dimitry Sibiryakov
Artem.1st
как эти классы реализовать без дружественности?

Легко: Item не должен ничего знать о контейнере в котором он лежит. Это и называется
инкапсуляцией.

В целом верно.

Только TCollection - это изобретение Делфи 3-4 из 1995-1997 года.
Сейчас используется TList<TMyItem>
Где TMyItem не знает ни чего, членом какой коллекции он является - TList или TDictonary.

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

Задача о яблоках, которой обычно объясняют НЕ освобождения интерфейсов, где они ссылаются друг на друга:
На корзине написан список яблок, которые в ней лежат.
А на каждом яблоке написано - в какой корзине они лежат.
14 авг 19, 15:55    [21949385]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1969
Artem.1st,

В целом попробуй открыть класс или модуль на 100 строк, и на 10,000 строк.
Где тебе будет легче, так и делай.

В классах более чем из 300 строк уже сложно разбираться, что они там делают и где ошибка.
14 авг 19, 16:00    [21949390]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
Dimitry Sibiryakov
Item не должен ничего знать о контейнере в котором он лежит.

Пример бытовой задачи: Ученики(элементы) учатся в Школе(контейнер).
С архитектурной точки зрения, неужели ученик Вася Иванов не должен знать, в какой Школе он учится?
И чтоб узнать, где учится Вася, надо у кого спросить: у Школы или у Васи?

Как тут устанавливаются архитектурные зависимости?
14 авг 19, 18:10    [21949532]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Gator
Member

Откуда: Москва
Сообщений: 14924
Вырожденный пример.
Допустим, Вася учится в 3х школах. Общеобразовательной, спортивной и музыхальной.
Т.е. 1 хмырь в трёх бочках. Кого спрашивать?
14 авг 19, 18:22    [21949543]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
Кого спрашивать?

Это и есть вопрос архитектуры.
Чтоб узнать, где учится Вася, надо у кого спросить: у Школы(чтоб она запустила поиск) или у Васи(чтоб он ответил сразу)?
14 авг 19, 18:28    [21949548]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48155

Artem.1st
С архитектурной точки зрения, неужели ученик Вася Иванов не должен знать, в какой Школе он
учится?

Да, не должен. Ибо школы могут быть разные. Вася не имеет права влиять на школу. Вася не
должен быть доступен никаким другим путём кроме как через школу.

Нарушение двух последних правил ведёт к геморрою при отладке внезапно и непредсказуемо
вылезающих глюков, а оно никому не надо.

Artem.1st
чтоб узнать, где учится Вася, надо у кого спросить: у Школы или у Васи?

Это совершенно бессмысленное с архитектурной точки зрения действо. Если ты получил ссылку
на Васю как ученика школы, ты уже знаешь где он учится. Если же Васю можно получить другим
путём, то зависимость надо выворачивать наизнанку и школа внезапно перестаёт быть контейнером.

И таки да, существует возможность архитектуры с кольцевыми связями, только они уже не
относятся к классу "контейнер", а, скорее, "наблюдатель". Там школа держит ссылку на Васю
и подписана на его события, а у Васи есть список наблюдателей, подписанных на его события.
При этом Васе всё равно какого класса эти наблюдатели, он их тупо оповещает о своей
смерти, например.

Posted via ActualForum NNTP Server 1.5

14 авг 19, 18:29    [21949550]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
Dimitry Sibiryakov
Если ты получил ссылку на Васю как ученика школы, ты уже знаешь где он учится.

Спасибо за ответ.
14 авг 19, 18:34    [21949556]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48155

Dimitry Sibiryakov
они уже не относятся к классу "контейнер", а, скорее, "наблюдатель".

В VCL это реализовано как Notification/FreeNotification, но из-за отсутствия
множественного наследования смотрится неэлегантно.

Posted via ActualForum NNTP Server 1.5

14 авг 19, 18:36    [21949558]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5107
Dimitry Sibiryakov,

а в Qt равноценное смотрится элегантно?
14 авг 19, 19:09    [21949571]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60170
Artem.1st> Как тут устанавливаются архитектурные зависимости?

В "школе" есть список "классов" (и еще куча других списков), в каждом
из оных - список "учеников". В чем собсно вопрос/проблема/сложность?

Artem.1st> Чтоб узнать, где учится Вася, надо у кого спросить:
Artem.1st> у Школы(чтоб она запустила поиск) или у Васи(чтоб он ответил сразу)?

Можно оба варианта, конечно, но второй лучше.
Если Вы про ссылки - тут вопрос лишь в том, нужна
ли Васе "ссылка" на "школу" или достаточно ссылки
на "класс" (откуда уже можно получить "школу").

Posted via ActualForum NNTP Server 1.5

14 авг 19, 19:14    [21949574]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60170
DS> Вася не должен быть доступен никаким другим путём кроме как через школу.

Ну шо за глупости. Когда Вася первый раз приходит в не-школьную
библиотеку (понимаю, что пример архаичный) - там про его школу
не знают и чит.билет выписывают (или обходятся без него), в кот.
могут указать (или не указывать) школу.

> Если же Васю можно получить другим
> путём, то зависимость надо выворачивать
> наизнанку и школа внезапно перестаёт быть контейнером.

C таким подходом нужно уточнять термины до начала разговора.
В приведенном примере (абстрактно, речь не про конкретное ПО)
школа в принципе не может быть контейнером, потому что у неё
нет "собственнических" связей с учениками.

Posted via ActualForum NNTP Server 1.5

14 авг 19, 19:20    [21949578]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58492
Блог
Artem.1st
Пример бытовой задачи: Ученики(элементы) учатся в Школе(контейнер).

Возможно, найдётся задача, для которой это подходящий дизайн, но в общем случае это скорее пример того, как не нужно делать. Контрольный вопрос: что случается с учениками, когда школу закрывают? Они умирают или просто повисают в воздухе?
14 авг 19, 19:24    [21949581]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60170
softwarer> Они умирают или просто повисают в воздухе?

В этом примере - их стирают ластиком.


P.S. А сама "задача неограниченных размеров" была
где-то озвучена? Это очередной АСУД или что?

Posted via ActualForum NNTP Server 1.5

14 авг 19, 19:28    [21949584]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48155

Гаджимурадов Рустам
C таким подходом нужно уточнять термины до начала разговора.
Так они и были уточнены задолго до того как ты влез. Аффтар явно заявил "школа это
контейнер учеников".

Posted via ActualForum NNTP Server 1.5

14 авг 19, 20:46    [21949624]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Василий 2
Member

Откуда:
Сообщений: 703
У меня частенько присутствуют мемберы класса, которые не должны быть видны юзеру, но нужные для доступа из классов того же модуля. Наворачивать какие-то искусственные паттерны или делать открытым то, что не нужно, считаю излишним
15 авг 19, 10:30    [21949847]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60170
DS> Аффтар явно заявил "школа это контейнер учеников".

Термин - это не что такое школа, а что такое контейнер.
Ну или пользовать чужие готовые - GoF-ские или чьи-то
еще (у GoF паттерна "контейнер" вообще нет, например).

Posted via ActualForum NNTP Server 1.5

15 авг 19, 14:48    [21950152]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Гаджимурадов Рустам
Member

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

Posted via ActualForum NNTP Server 1.5

15 авг 19, 14:55    [21950160]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Artem.1st
Member

Откуда:
Сообщений: 109
softwarer
Artem.1st
Пример бытовой задачи: Ученики(элементы) учатся в Школе(контейнер).

Контрольный вопрос: что случается с учениками, когда школу закрывают? Они умирают или просто повисают в воздухе?

Как и в реальной жизни, связь между Школой и Учениками - это Агрегация(не Композиция). Т.е. ученики могут переходить в другую Школу.
Чтоб тема не уходила в сторону, напомню вопрос: Должен ли Элемент знать о Контейнере?
А до этого был вопрос: Можно ли обойтись без дружественных классов?
15 авг 19, 22:00    [21950535]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58492
Блог
Artem.1st
Чтоб тема не уходила в сторону, напомню вопрос: Должен ли Элемент знать о Контейнере?

Может, но не должен. Пример: я делаю окно вида "слева список справочников системы, справа открываются данные выбранного справочника". Данные справочника сделаны фреймами. В этом случае я могу положить фреймы на TabControl - и элементы будут знать о контейнере. А могу положить их в Dictionary<String, TDicFrame> - и тогда они не будут знать о контейнере и нафиг не нужно, чтобы знали.

Artem.1st
А до этого был вопрос: Можно ли обойтись без дружественных классов?

Конечно. Хотя бы потому, что можно обойтись вообще без классов.

Дружественные классы - это просто удобный способ сажать ошибки проектирования и делать низкокачественный продукт под гордым лозунгом "Я самый умный, а пользователь не должен".
15 авг 19, 22:11    [21950545]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
roschinspb
Member

Откуда: С-Пб
Сообщений: 1632
Мимопроходящий
14.08.2019 12:49, softwarer пишет:
> Это отрицательная фича, которую было бы очень здорово выпилить нафиг.

дык, ввели же наконец-то strict private.

лучше поздно чем вообще (С)
От ведь же ж... А я то думал нахрена надо было индексацию строк переделывать, кому это мешало, кому не лень мегатонны говнокода перелопачивать. Есть оказываются счастливые люди у которых других проблем нет. Завидую просто!
16 авг 19, 16:33    [21951212]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 711
softwarer
Контрольный вопрос: что случается с учениками, когда школу закрывают? Они умирают или просто повисают в воздухе?

Школа вызывает у учеников метод "Школа ваша закрылась". По этому методу школы у ученика обнуляется. Я не представляю как можно решить такую задачу если не соблюдены оба два условия - школа знает про учеников, ученики знают про школу.
16 авг 19, 19:10    [21951387]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1558
Victor Cookin
softwarer
Контрольный вопрос: что случается с учениками, когда школу закрывают? Они умирают или просто повисают в воздухе?

Школа вызывает у учеников метод "Школа ваша закрылась". По этому методу школы у ученика обнуляется. Я не представляю как можно решить такую задачу если не соблюдены оба два условия - школа знает про учеников, ученики знают про школу.

Школы не должна вызывать у учеников ничего. Школа генерирует событие, что она закрывается. На события школы подписаны ученики, сотрудники и т.д. Получая событие что она закрывается, ученики/сотрудники что-то делают...

Никаких циклических ссылок не нужно..
16 авг 19, 20:16    [21951413]     Ответить | Цитировать Сообщить модератору
 Re: Какова роль "Модуля" в архитектуре программы?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 58492
Блог
Victor Cookin
Школа вызывает у учеников метод "Школа ваша закрылась". По этому методу школы у ученика обнуляется. Я не представляю как можно решить такую задачу если не соблюдены оба два условия - школа знает про учеников, ученики знают про школу.

Плохо, что не представляете. Ну просто для примера: РОНО дёргает оповещение "школа 123 закрылась". Подписчики реагируют на оповещение каждый как считают нужным: ученики дёргают оповещение "ищу новую школу", учителя увольняются, газета пишет заметку...
16 авг 19, 20:36    [21951418]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Delphi Ответить