|
|
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Artem.1st> Я неправильно выразился. Задача даже не Artem.1st> масштабная, а неограниченная размерами. Artem.1st> Ее бесполезно дробить, это будет рутиной. Возьмётесь за гуж неограниченных размеров - не сдюжите. Так что таки беритесь за гужики поменьше (в т.ч. дробите большие на меньшие). А иначе впустую потратите время на разработку "методик контроля программного функционала". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 15:32 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Artem.1stмои исследования уткнулись в то, что во многих прикладных задачах Элемент должен знать о Контейнере. Например, в реляционных структурах зависимые сущности ссылаются по ключу на главную сущность. Реляционные структуры хранения не имеют ничего общего с контейнерами: главная сущность не является контейнером и не следит за зависимыми от неё сущностями. Artem.1stА вот это реальный код из Classes.pas Да, VCL весьма часто представляет собой наглядный пример плохой архитектуры и "как делать не надо". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 15:38 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovArtem.1stкак эти классы реализовать без дружественности? Легко: Item не должен ничего знать о контейнере в котором он лежит. Это и называется инкапсуляцией. В целом верно. Только TCollection - это изобретение Делфи 3-4 из 1995-1997 года. Сейчас используется TList<TMyItem> Где TMyItem не знает ни чего, членом какой коллекции он является - TList или TDictonary. Циркулярные(рекурсивные) ссылки всё же иногда используются, но это - исключение, а не правило. Но для делфи программистов любое исключение становиться правилом. Задача о яблоках, которой обычно объясняют НЕ освобождения интерфейсов, где они ссылаются друг на друга: На корзине написан список яблок, которые в ней лежат. А на каждом яблоке написано - в какой корзине они лежат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 15:55 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Artem.1st, В целом попробуй открыть класс или модуль на 100 строк, и на 10,000 строк. Где тебе будет легче, так и делай. В классах более чем из 300 строк уже сложно разбираться, что они там делают и где ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 16:00 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovItem не должен ничего знать о контейнере в котором он лежит. Пример бытовой задачи: Ученики(элементы) учатся в Школе(контейнер). С архитектурной точки зрения, неужели ученик Вася Иванов не должен знать, в какой Школе он учится? И чтоб узнать, где учится Вася, надо у кого спросить: у Школы или у Васи? Как тут устанавливаются архитектурные зависимости? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 18:10 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Вырожденный пример. Допустим, Вася учится в 3х школах. Общеобразовательной, спортивной и музыхальной. Т.е. 1 хмырь в трёх бочках. Кого спрашивать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 18:22 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Кого спрашивать? Это и есть вопрос архитектуры. Чтоб узнать, где учится Вася, надо у кого спросить: у Школы(чтоб она запустила поиск) или у Васи(чтоб он ответил сразу)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 18:28 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Artem.1stС архитектурной точки зрения, неужели ученик Вася Иванов не должен знать, в какой Школе он учится? Да, не должен. Ибо школы могут быть разные. Вася не имеет права влиять на школу. Вася не должен быть доступен никаким другим путём кроме как через школу. Нарушение двух последних правил ведёт к геморрою при отладке внезапно и непредсказуемо вылезающих глюков, а оно никому не надо. Artem.1stчтоб узнать, где учится Вася, надо у кого спросить: у Школы или у Васи? Это совершенно бессмысленное с архитектурной точки зрения действо. Если ты получил ссылку на Васю как ученика школы, ты уже знаешь где он учится. Если же Васю можно получить другим путём, то зависимость надо выворачивать наизнанку и школа внезапно перестаёт быть контейнером. И таки да, существует возможность архитектуры с кольцевыми связями, только они уже не относятся к классу "контейнер", а, скорее, "наблюдатель". Там школа держит ссылку на Васю и подписана на его события, а у Васи есть список наблюдателей, подписанных на его события. При этом Васе всё равно какого класса эти наблюдатели, он их тупо оповещает о своей смерти, например. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 18:29 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЕсли ты получил ссылку на Васю как ученика школы, ты уже знаешь где он учится. Спасибо за ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 18:34 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovони уже не относятся к классу "контейнер", а, скорее, "наблюдатель". В VCL это реализовано как Notification/FreeNotification, но из-за отсутствия множественного наследования смотрится неэлегантно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 18:36 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, а в Qt равноценное смотрится элегантно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 19:09 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Artem.1st> Как тут устанавливаются архитектурные зависимости? В "школе" есть список "классов" (и еще куча других списков), в каждом из оных - список "учеников". В чем собсно вопрос/проблема/сложность? Artem.1st> Чтоб узнать, где учится Вася, надо у кого спросить: Artem.1st> у Школы(чтоб она запустила поиск) или у Васи(чтоб он ответил сразу)? Можно оба варианта, конечно, но второй лучше. Если Вы про ссылки - тут вопрос лишь в том, нужна ли Васе "ссылка" на "школу" или достаточно ссылки на "класс" (откуда уже можно получить "школу"). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 19:14 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
DS> Вася не должен быть доступен никаким другим путём кроме как через школу. Ну шо за глупости. Когда Вася первый раз приходит в не-школьную библиотеку (понимаю, что пример архаичный) - там про его школу не знают и чит.билет выписывают (или обходятся без него), в кот. могут указать (или не указывать) школу. > Если же Васю можно получить другим > путём, то зависимость надо выворачивать > наизнанку и школа внезапно перестаёт быть контейнером. C таким подходом нужно уточнять термины до начала разговора. В приведенном примере (абстрактно, речь не про конкретное ПО) школа в принципе не может быть контейнером, потому что у неё нет "собственнических" связей с учениками. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 19:20 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Artem.1stПример бытовой задачи: Ученики(элементы) учатся в Школе(контейнер). Возможно, найдётся задача, для которой это подходящий дизайн, но в общем случае это скорее пример того, как не нужно делать. Контрольный вопрос: что случается с учениками, когда школу закрывают? Они умирают или просто повисают в воздухе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 19:24 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
softwarer> Они умирают или просто повисают в воздухе? В этом примере - их стирают ластиком. P.S. А сама "задача неограниченных размеров" была где-то озвучена? Это очередной АСУД или что? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 19:28 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамC таким подходом нужно уточнять термины до начала разговора. Так они и были уточнены задолго до того как ты влез. Аффтар явно заявил "школа это контейнер учеников". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 20:46 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
У меня частенько присутствуют мемберы класса, которые не должны быть видны юзеру, но нужные для доступа из классов того же модуля. Наворачивать какие-то искусственные паттерны или делать открытым то, что не нужно, считаю излишним ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2019, 10:30 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
DS> Аффтар явно заявил "школа это контейнер учеников". Термин - это не что такое школа, а что такое контейнер. Ну или пользовать чужие готовые - GoF-ские или чьи-то еще (у GoF паттерна "контейнер" вообще нет, например). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2019, 14:48 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Даже если принять за терминологию, что контейнер - это коллекция/список, то в отрыве от конкретного примера/задачи обсуждать это смысла нет, ибо школа может как быть этим контейнером для учеников, так и не быть - например, у них будет свой "контейнер" (коллекция), ссылки на который будут из "школы". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2019, 14:55 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
softwarerArtem.1stПример бытовой задачи: Ученики(элементы) учатся в Школе(контейнер). Контрольный вопрос: что случается с учениками, когда школу закрывают? Они умирают или просто повисают в воздухе? Как и в реальной жизни, связь между Школой и Учениками - это Агрегация(не Композиция). Т.е. ученики могут переходить в другую Школу. Чтоб тема не уходила в сторону, напомню вопрос: Должен ли Элемент знать о Контейнере? А до этого был вопрос: Можно ли обойтись без дружественных классов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2019, 22:00 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Artem.1stЧтоб тема не уходила в сторону, напомню вопрос: Должен ли Элемент знать о Контейнере? Может , но не должен . Пример: я делаю окно вида "слева список справочников системы, справа открываются данные выбранного справочника". Данные справочника сделаны фреймами. В этом случае я могу положить фреймы на TabControl - и элементы будут знать о контейнере. А могу положить их в Dictionary<String, TDicFrame> - и тогда они не будут знать о контейнере и нафиг не нужно, чтобы знали. Artem.1stА до этого был вопрос: Можно ли обойтись без дружественных классов? Конечно. Хотя бы потому, что можно обойтись вообще без классов. Дружественные классы - это просто удобный способ сажать ошибки проектирования и делать низкокачественный продукт под гордым лозунгом "Я самый умный, а пользователь не должен". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2019, 22:11 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий14.08.2019 12:49, softwarer пишет: > Это отрицательная фича, которую было бы очень здорово выпилить нафиг. дык, ввели же наконец-то strict private. лучше поздно чем вообще (С) От ведь же ж... А я то думал нахрена надо было индексацию строк переделывать, кому это мешало, кому не лень мегатонны говнокода перелопачивать. Есть оказываются счастливые люди у которых других проблем нет. Завидую просто! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2019, 16:33 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
softwarerКонтрольный вопрос: что случается с учениками, когда школу закрывают? Они умирают или просто повисают в воздухе? Школа вызывает у учеников метод "Школа ваша закрылась". По этому методу школы у ученика обнуляется. Я не представляю как можно решить такую задачу если не соблюдены оба два условия - школа знает про учеников, ученики знают про школу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2019, 19:10 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Victor CookinsoftwarerКонтрольный вопрос: что случается с учениками, когда школу закрывают? Они умирают или просто повисают в воздухе? Школа вызывает у учеников метод "Школа ваша закрылась". По этому методу школы у ученика обнуляется. Я не представляю как можно решить такую задачу если не соблюдены оба два условия - школа знает про учеников, ученики знают про школу. Школы не должна вызывать у учеников ничего. Школа генерирует событие, что она закрывается. На события школы подписаны ученики, сотрудники и т.д. Получая событие что она закрывается, ученики/сотрудники что-то делают... Никаких циклических ссылок не нужно.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2019, 20:16 |
|
||
|
Какова роль "Модуля" в архитектуре программы?
|
|||
|---|---|---|---|
|
#18+
Victor CookinШкола вызывает у учеников метод "Школа ваша закрылась". По этому методу школы у ученика обнуляется. Я не представляю как можно решить такую задачу если не соблюдены оба два условия - школа знает про учеников, ученики знают про школу. Плохо, что не представляете. Ну просто для примера: РОНО дёргает оповещение "школа 123 закрылась". Подписчики реагируют на оповещение каждый как считают нужным: ученики дёргают оповещение "ищу новую школу", учителя увольняются, газета пишет заметку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2019, 20:36 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39849618&tid=2039118]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
53ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 367ms |

| 0 / 0 |
