powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите с пониманием архитектуры
25 сообщений из 27, страница 1 из 2
Помогите с пониманием архитектуры
    #40005085
SeriyVolk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понимаю программа должна иметь модульный вид (т.е. разбита на независимые компоненты, которые можно легко заменять и независимо использовать в других местах). Каждый модуль должен иметь фасад, который прячет сложную внутреннюю реализацию и предлагает набор предоставляемых модулем функций (т.е. у модуля надо делать интерфейс в виде фасада).

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

Вопросы:
1. При такой реализации я не могу отдельно использовать низкоуровневые модули, ведь они наследуются от абстрактных классов, заявленных в модуле бизнес- логики.
2. В итоге получается, что у меня вспомогательные классы с обеих сторон взаимодействия: у низкоуровневых реализованы фасады, а у высокоуровневых- абстрактные классы. Какое- то нагромождение получается накладных расходов.

Раскритикуйте мои идеи самым жестким образом!
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005100
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyVolk,

Надо делать наоборот.
Когда низкоуровневому модулю Н требуется доступ к высокоуровневому модулю В, то Н (а не В) объявляет интерфейс (абстрактный класс) И, который реализуется модулем В, и пользователь модуля Н, передает ему экземпляр реализующий И.
Если другому низкоуровневому модулю Н2 тоже требуется доступ к В, то он объявляет свой собственный интерфейс И2, который также реализуется В. В общем случае это разные несовместимые интерфейсы, поэтому часто реализации - это легковесные обертки над В.

Таким образом нет циклической зависимости между Н и В. Только В знает про Н, а не наоборот. И Н можно использовать независимо от В, просто передав в него произвольную реализацию И (например в юнит тестах это может быть просто заглушка).
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005104
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyVolkНасколько я понимаю программа должна иметь модульный вид

Вообще-то не должна. Да, это облегчает тестирование и рефакторинг, но без них вполне можно
обойтись.

SeriyVolkиз- за инверсии зависимостей надо сделать так, чтобы низкоуровневые модули зависили от
высокоуровневой бизнес- логики

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

SeriyVolkу низкоуровневых реализованы фасады, а у высокоуровневых- абстрактные классы
"Чо?" Вот отсюда поподробнее: чем "фасады" отличаются от "абстрактных классов"?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005110
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А код будет?
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005117
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyVolk,

>Насколько я понимаю программа должна иметь модульный вид
= сколько готов платить за это?
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005118
SeriyVolk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky
SeriyVolk,

Надо делать наоборот.
Когда низкоуровневому модулю Н требуется доступ к высокоуровневому модулю В...


С чего это вдруг низкоуровневый модуль (например, чтения текстовых файлов) требует доступа к высокоуровневому (например, алгоритм нейронной сети, которая ищет зависимости в полученных из файла данных)? В остальном согласен: кому нужна та или иная функциональность тот реализует абстрактный класс с заявленной функциональностью (и работает с ним), а его "модуль- имплементация" соотвествует этой абстракции. Таким образом высокоуровневый модуль не зависит от конкретной низкоуровневой реализации, а они оба зависят от абстракции.
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005119
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>SeriyVolk, сегодня, 09:54 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1329637&msg=22208394][22208394]
>Насколько я понимаю программа должна иметь модульный вид...
<
Может быть имеет смысл рассмотреть конкретное, не сложное приложение?
Например, работу со справочниками информационной системы или что то подобное.
Здесь видимо модуль работает с конкретным справочником (таблицей). Справочников несколько.
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005121
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyVolk,

1. программа может состоять из модулей
2. каждый модуль это интерфейс и реализация, можно абстрактный класс и реализация
3. реализация модуля может использовать другие модули, но зависеть от их интерфейсов
4. модули бизнес логики на самом верху (или если луковая то ближе к центру)
5. инфраструктурные модули в самом низу (или если луковая то ближе к краю или на краю)
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005122
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyVolk
Насколько я понимаю программа должна иметь модульный вид (т.е. разбита на независимые компоненты, которые можно легко заменять и независимо использовать в других местах). Каждый модуль должен иметь фасад, который прячет сложную внутреннюю реализацию и предлагает набор предоставляемых модулем функций (т.е. у модуля надо делать интерфейс в виде фасада).

Такого требования вобщем-то не существует. Поэтому слово "должна" я-бы смягчил. Скорее модульность
логически вытекает из закона Деметры для крупных проектов. Модульность это не прихоть. Это вынужденная
необходимость.

Повезёт-ли вам использовать такие проекты или быть их разработчиком - я не знаю. Но заранее сочувствую.
В них обычно нет единого эксперта которые знает все. Особо крупные системы для ентерпрайза (бизнес и финансы)
пишут по 15-20 лет и в них сменяется поколение разработчиков и newcomers просто в принципе не могут знать
эту систему целиком. Обычно скрам-команда делает поддержку и доработку какого-то куска этой системы.
И эта команда знает функционал своего куска и видит интерфейсы используемых модулей. И на этом точка.
Знать всё или следить за изменением всей системы в динамике просто невозможно. На это не хватит человеческого
мозга. Коммиты идут каждый день потоком. И дай бох просто осознать свой модуль.

А если смотреть на модульность например в системных консольных утилитах linux, то там скорее всего такая
модульность будет не ярко выражена и доказать ее наличие будет сложно.

В разных ЯП и разных средах в термин модуль вкладывали разный смысл. Например в Oracle PL/SQL
модуль (package) инстанциировался. У него был конструктор или процедура которая что-то делает при инциализации.
В Pascal - нечто подобное. Тоесть модуль можно рассматривать как компонент или как объект с состоянием.

В других системах модуль может быть просто логическим объединением функций. Или например в технологии
OSGI модуль наполнен смыслом инфо-безопасности. Тоесть на уровне платформы вы могли использовать только
регламентированные методы интерфейса или протокола модуля и никоим образом не могли вызвать внутренний код.
Эти модули также несли задачи непрерывной интеграции и версионности. Среда позволяла одновременно держать
в памяти два модуля разных версий (полезно во время миграции) и таким образом для пользователя апргрейд
версии был прозрачен и безобрывен.

К сожалению в последнее время для современных разработчиков модульность - гипертрофирована. Начинающие
делают декомпозицию на модули для своих задач там где она вообще не нужна. Таким образом появляется
много карго-культа и нарушений KISS/Yagni.
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005125
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Все верно. Пусть развернет слово Должна и помедитирует над этим.))
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005128
SeriyVolk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
mayton,
Все верно. Пусть развернет слово Должна и помедитирует над этим.))


Короче, архитектура не нужна :)
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005129
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyVolk
PetroNotC Sharp
mayton,
Все верно. Пусть развернет слово Должна и помедитирует над этим.))


Короче, архитектура не нужна :)
это ёмкое понятие
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005130
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyVolkархитектура не нужна :)

Архитектура - средство, а не цель. Поэтому и применяется по месту и необходимости.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005191
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>mayton, сегодня, 14:47 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1329637&msg=22208471][22208471]
>Повезёт-ли вам использовать такие проекты или быть их разработчиком - я не знаю. Но заранее сочувствую.
<
Не понимаю.
Пример - существует хранилище приложений информационной системы.
Информационная модель хранилища на слайде.
Разве работа с каждой сущностью (таблицей) не может быть представлена в виде модуля?
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005196
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев

Разве работа с каждой сущностью (таблицей) не может быть представлена в виде модуля?

Может. Но я-бы начал с задачи-минимум. Представте работу с сущностью в виде объекта.

А потом если возможностей не хватит и у вас реально (!) появятся эти ужасные архитектурные
проблемы о которых так любят говорить архитекторы - перепишите на модули.

Но начните с простого.
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005198
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyVolk
PetroNotC Sharp
mayton,
Все верно. Пусть развернет слово Должна и помедитирует над этим.))


Короче, архитектура не нужна :)

Нужна, но не надо все делать только ради неё.
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005207
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>mayton, сегодня, 21:40 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1329637&msg=22208586][22208586]
>...Но начните с простого.
<
Почему?
На слайде а-ля SPA решение. Роли модулей выполняют UserControl-s.
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005208
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое User controls в терминах форума C++?
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005210
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Модульность желаема, где она возможна, так же как и слойная архитектура и много чего еще.

На курсах и в учебниках наверное продолжают учить правило "strong cohesion & loose coupling" в применении модулей, что при желании можно превратить в религию и довести до абсурда.

Потом появилось agile programming, где архитектура не в приоритете, и надо плавно и понемногу переделать хижину дяди тома в небоскреб, не выселяя жильцов.

В менеджменте еще остались поклонники TDD, который тоже можно применить так, что никто результат не захочет.


Конкретно по вашему вопросу, у меня такое мнение:
> надо сделать так, чтобы низкоуровневые модули зависили от выполняли требования высокоуровневой бизнес- логики

> Это требование я реализую абстрактными классами, которые задают требуемый функционал
Это один из способов написать тех задание, но это заставляет нижние модули подняться на уровень абстракции верхних (плохо), или верхним попытаться описать свои задачи на языке нижних (лучше, но тогда не надо наследование, дайте ТЗ по API).

Как вы сами уже заметили, ваше решение нарушает принцип loose coupling, который я считаю довольно ценным.
Вместо абстрактных классов, вы можете описать API, которое по логике соответствует уровню нижнего слоя, который вы можете использовать для вашей надстройки, и которое может быть полезно для других?

Т.е. не "посчитай мне квартальный отчет продаж по азии", а "просуммируй столбцы А-Г заданной таблицы".
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005212
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>mayton, сегодня, 23:00 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1329637&msg=22208600][22208600]
>Что такое User controls в терминах форума C++?
<
Форма.
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005215
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пожалуй введу модераторское правило закрывать топики C++, которые не имеют исходника в своей основе.

Все что не имеет исходника будет перенесено в вопрос-ответ или в программирование. Или просто закрыто.
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005245
mirudom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyVolkРаскритикуйте мои идеи самым жестким образом! Найдите книгу:
Гради Буч,
Объектно-ориентированный анализ и проектирование с примерами приложений.
Внимательное чтение ответит на кучу Ваших вопросов.

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005268
SeriyVolk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mirudom
SeriyVolkРаскритикуйте мои идеи самым жестким образом!
Найдите книгу:
Гради Буч,
Объектно-ориентированный анализ и проектирование с примерами приложений.
Внимательное чтение ответит на кучу Ваших вопросов.


Если вы прочитали эту книгу (раз ее советуете), то почему бы не воспользоваться полученными знаниями и не дать ответы на конкретные вопросы заданные в топике?
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005273
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeriyVolk, вы посягнул на традиции.

Чем отличаются американский, еврейский и русский форумы.
На американском задаешь вопрос - получаешь ответ
На еврейском задаешь вопрос - тебя спрашивают в ответ
На русском задаешь вопрос и тебе на 30 страницах обсуждения объясняют какой ты му**к.


Отсюда: https://pikabu.ru/story/osobennosti_natsionalnyikh_forumov_5767109
...
Рейтинг: 0 / 0
Помогите с пониманием архитектуры
    #40005431
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyVolk
дать ответы на конкретные вопросы заданные в топике?

В данном топике не задано ни одного конкретного вопроса. Только стоны "не могу" и "не получается".
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Помогите с пониманием архитектуры
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]