|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
Насколько я понимаю программа должна иметь модульный вид (т.е. разбита на независимые компоненты, которые можно легко заменять и независимо использовать в других местах). Каждый модуль должен иметь фасад, который прячет сложную внутреннюю реализацию и предлагает набор предоставляемых модулем функций (т.е. у модуля надо делать интерфейс в виде фасада). С другой стороны, из- за инверсии зависимостей надо сделать так, чтобы низкоуровневые модули зависили от высокоуровневой бизнес- логики, что достигается за счет создание интерфейса у модуля бизнес- логики и требования, чтобы низкоуровневые модули ему соответствовали (тогда можно отдельно разрабатывать бизнес- логику, опираясь только на заявленные интерфейсы). Это требование я реализую абстрактными классами, которые задают требуемый функционал, от которых наследую классы низкоуровневых модулей. Вопросы: 1. При такой реализации я не могу отдельно использовать низкоуровневые модули, ведь они наследуются от абстрактных классов, заявленных в модуле бизнес- логики. 2. В итоге получается, что у меня вспомогательные классы с обеих сторон взаимодействия: у низкоуровневых реализованы фасады, а у высокоуровневых- абстрактные классы. Какое- то нагромождение получается накладных расходов. Раскритикуйте мои идеи самым жестким образом! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 09:54 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
SeriyVolk, Надо делать наоборот. Когда низкоуровневому модулю Н требуется доступ к высокоуровневому модулю В, то Н (а не В) объявляет интерфейс (абстрактный класс) И, который реализуется модулем В, и пользователь модуля Н, передает ему экземпляр реализующий И. Если другому низкоуровневому модулю Н2 тоже требуется доступ к В, то он объявляет свой собственный интерфейс И2, который также реализуется В. В общем случае это разные несовместимые интерфейсы, поэтому часто реализации - это легковесные обертки над В. Таким образом нет циклической зависимости между Н и В. Только В знает про Н, а не наоборот. И Н можно использовать независимо от В, просто передав в него произвольную реализацию И (например в юнит тестах это может быть просто заглушка). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 11:32 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
SeriyVolkНасколько я понимаю программа должна иметь модульный вид Вообще-то не должна. Да, это облегчает тестирование и рефакторинг, но без них вполне можно обойтись. SeriyVolkиз- за инверсии зависимостей надо сделать так, чтобы низкоуровневые модули зависили от высокоуровневой бизнес- логики Опять же не надо. Если модуль зависит от бизнес-логики, значит это модуль бизнес-логики, а не низкоуровневый. SeriyVolkу низкоуровневых реализованы фасады, а у высокоуровневых- абстрактные классы "Чо?" Вот отсюда поподробнее: чем "фасады" отличаются от "абстрактных классов"? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 12:29 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
А код будет? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 13:32 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
SeriyVolk, >Насколько я понимаю программа должна иметь модульный вид = сколько готов платить за это? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 14:17 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky SeriyVolk, Надо делать наоборот. Когда низкоуровневому модулю Н требуется доступ к высокоуровневому модулю В... С чего это вдруг низкоуровневый модуль (например, чтения текстовых файлов) требует доступа к высокоуровневому (например, алгоритм нейронной сети, которая ищет зависимости в полученных из файла данных)? В остальном согласен: кому нужна та или иная функциональность тот реализует абстрактный класс с заявленной функциональностью (и работает с ним), а его "модуль- имплементация" соотвествует этой абстракции. Таким образом высокоуровневый модуль не зависит от конкретной низкоуровневой реализации, а они оба зависят от абстракции. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 14:18 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
>SeriyVolk, сегодня, 09:54 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1329637&msg=22208394][22208394] >Насколько я понимаю программа должна иметь модульный вид... < Может быть имеет смысл рассмотреть конкретное, не сложное приложение? Например, работу со справочниками информационной системы или что то подобное. Здесь видимо модуль работает с конкретным справочником (таблицей). Справочников несколько. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 14:27 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
SeriyVolk, 1. программа может состоять из модулей 2. каждый модуль это интерфейс и реализация, можно абстрактный класс и реализация 3. реализация модуля может использовать другие модули, но зависеть от их интерфейсов 4. модули бизнес логики на самом верху (или если луковая то ближе к центру) 5. инфраструктурные модули в самом низу (или если луковая то ближе к краю или на краю) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 14:46 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
SeriyVolk Насколько я понимаю программа должна иметь модульный вид (т.е. разбита на независимые компоненты, которые можно легко заменять и независимо использовать в других местах). Каждый модуль должен иметь фасад, который прячет сложную внутреннюю реализацию и предлагает набор предоставляемых модулем функций (т.е. у модуля надо делать интерфейс в виде фасада). Такого требования вобщем-то не существует. Поэтому слово "должна" я-бы смягчил. Скорее модульность логически вытекает из закона Деметры для крупных проектов. Модульность это не прихоть. Это вынужденная необходимость. Повезёт-ли вам использовать такие проекты или быть их разработчиком - я не знаю. Но заранее сочувствую. В них обычно нет единого эксперта которые знает все. Особо крупные системы для ентерпрайза (бизнес и финансы) пишут по 15-20 лет и в них сменяется поколение разработчиков и newcomers просто в принципе не могут знать эту систему целиком. Обычно скрам-команда делает поддержку и доработку какого-то куска этой системы. И эта команда знает функционал своего куска и видит интерфейсы используемых модулей. И на этом точка. Знать всё или следить за изменением всей системы в динамике просто невозможно. На это не хватит человеческого мозга. Коммиты идут каждый день потоком. И дай бох просто осознать свой модуль. А если смотреть на модульность например в системных консольных утилитах linux, то там скорее всего такая модульность будет не ярко выражена и доказать ее наличие будет сложно. В разных ЯП и разных средах в термин модуль вкладывали разный смысл. Например в Oracle PL/SQL модуль (package) инстанциировался. У него был конструктор или процедура которая что-то делает при инциализации. В Pascal - нечто подобное. Тоесть модуль можно рассматривать как компонент или как объект с состоянием. В других системах модуль может быть просто логическим объединением функций. Или например в технологии OSGI модуль наполнен смыслом инфо-безопасности. Тоесть на уровне платформы вы могли использовать только регламентированные методы интерфейса или протокола модуля и никоим образом не могли вызвать внутренний код. Эти модули также несли задачи непрерывной интеграции и версионности. Среда позволяла одновременно держать в памяти два модуля разных версий (полезно во время миграции) и таким образом для пользователя апргрейд версии был прозрачен и безобрывен. К сожалению в последнее время для современных разработчиков модульность - гипертрофирована. Начинающие делают декомпозицию на модули для своих задач там где она вообще не нужна. Таким образом появляется много карго-культа и нарушений KISS/Yagni. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 14:47 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
mayton, Все верно. Пусть развернет слово Должна и помедитирует над этим.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 15:55 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mayton, Все верно. Пусть развернет слово Должна и помедитирует над этим.)) Короче, архитектура не нужна :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 16:12 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
SeriyVolk PetroNotC Sharp mayton, Все верно. Пусть развернет слово Должна и помедитирует над этим.)) Короче, архитектура не нужна :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 16:13 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
SeriyVolkархитектура не нужна :) Архитектура - средство, а не цель. Поэтому и применяется по месту и необходимости. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 16:15 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
>mayton, сегодня, 14:47 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1329637&msg=22208471][22208471] >Повезёт-ли вам использовать такие проекты или быть их разработчиком - я не знаю. Но заранее сочувствую. < Не понимаю. Пример - существует хранилище приложений информационной системы. Информационная модель хранилища на слайде. Разве работа с каждой сущностью (таблицей) не может быть представлена в виде модуля? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 21:18 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
ВМоисеев Разве работа с каждой сущностью (таблицей) не может быть представлена в виде модуля? Может. Но я-бы начал с задачи-минимум. Представте работу с сущностью в виде объекта. А потом если возможностей не хватит и у вас реально (!) появятся эти ужасные архитектурные проблемы о которых так любят говорить архитекторы - перепишите на модули. Но начните с простого. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 21:40 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
SeriyVolk PetroNotC Sharp mayton, Все верно. Пусть развернет слово Должна и помедитирует над этим.)) Короче, архитектура не нужна :) Нужна, но не надо все делать только ради неё. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 21:46 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
>mayton, сегодня, 21:40 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1329637&msg=22208586][22208586] >...Но начните с простого. < Почему? На слайде а-ля SPA решение. Роли модулей выполняют UserControl-s. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 22:55 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
Что такое User controls в терминах форума C++? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 23:00 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
Модульность желаема, где она возможна, так же как и слойная архитектура и много чего еще. На курсах и в учебниках наверное продолжают учить правило "strong cohesion & loose coupling" в применении модулей, что при желании можно превратить в религию и довести до абсурда. Потом появилось agile programming, где архитектура не в приоритете, и надо плавно и понемногу переделать хижину дяди тома в небоскреб, не выселяя жильцов. В менеджменте еще остались поклонники TDD, который тоже можно применить так, что никто результат не захочет. Конкретно по вашему вопросу, у меня такое мнение: > надо сделать так, чтобы низкоуровневые модули зависили от выполняли требования высокоуровневой бизнес- логики > Это требование я реализую абстрактными классами, которые задают требуемый функционал Это один из способов написать тех задание, но это заставляет нижние модули подняться на уровень абстракции верхних (плохо), или верхним попытаться описать свои задачи на языке нижних (лучше, но тогда не надо наследование, дайте ТЗ по API). Как вы сами уже заметили, ваше решение нарушает принцип loose coupling, который я считаю довольно ценным. Вместо абстрактных классов, вы можете описать API, которое по логике соответствует уровню нижнего слоя, который вы можете использовать для вашей надстройки, и которое может быть полезно для других? Т.е. не "посчитай мне квартальный отчет продаж по азии", а "просуммируй столбцы А-Г заданной таблицы". ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 23:17 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
>mayton, сегодня, 23:00 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1329637&msg=22208600][22208600] >Что такое User controls в терминах форума C++? < Форма. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 23:35 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
Я пожалуй введу модераторское правило закрывать топики C++, которые не имеют исходника в своей основе. Все что не имеет исходника будет перенесено в вопрос-ответ или в программирование. Или просто закрыто. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 23:55 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
SeriyVolkРаскритикуйте мои идеи самым жестким образом! Найдите книгу: Гради Буч, Объектно-ориентированный анализ и проектирование с примерами приложений. Внимательное чтение ответит на кучу Ваших вопросов. Модератор: Тема перенесена из форума "C++". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2020, 11:12 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
mirudom SeriyVolkРаскритикуйте мои идеи самым жестким образом! Гради Буч, Объектно-ориентированный анализ и проектирование с примерами приложений. Внимательное чтение ответит на кучу Ваших вопросов. Если вы прочитали эту книгу (раз ее советуете), то почему бы не воспользоваться полученными знаниями и не дать ответы на конкретные вопросы заданные в топике? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2020, 14:50 |
|
Помогите с пониманием архитектуры
|
|||
---|---|---|---|
#18+
SeriyVolk, вы посягнул на традиции. Чем отличаются американский, еврейский и русский форумы. На американском задаешь вопрос - получаешь ответ На еврейском задаешь вопрос - тебя спрашивают в ответ На русском задаешь вопрос и тебе на 30 страницах обсуждения объясняют какой ты му**к. Отсюда: https://pikabu.ru/story/osobennosti_natsionalnyikh_forumov_5767109 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2020, 15:19 |
|
|
start [/forum/topic.php?fid=16&fpage=4&tid=1339725]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 189ms |
0 / 0 |