![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
polosatij |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 22.2.2004 Где: Stuttgart<-> ;Karlsruhe, Germany Репутация: 3 Всего: 8 |
![]() ![]() возьмём два "компонента": account и payment, надеюсь понятно, чем занимается каждый из них ![]() ![]() ![]() ![]() ![]() |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Вообще уникальный "core" в распределенной системе - слабое место. Полностью его устранить сложно, но логично его максимально облегчить для ускорения рестарта в случае аварии, чтобы не подвешивать всю систему. Что касается базы, то да, компоненты открывают собственные соединения с базой. Поскольку ресурсы относительно независимые, то компоненты работают с разными таблицами (можно было бы и базу разделить на части). Если же есть конкурентный доступ к одной таблице из разных компонентов, то блокирование таблицы при необходимости осуществляется самой базой. У нас база данных далеко не основной источник данных, поэтому оптимизацией особо не занимались. |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Если я правильно понял, то конечно "дублирование" неизбежно. В том смысле, что если сделать два независимых приложения "account" и "payment", то обоим требуется описание обьекта account. Но, возможно, для "payment" нужен не полный обьект account, а только его некоторые свойства. Оба приложения загружают нужные обьекты account из одной таблицы. Если приложение "payment" делает успешную транзакцию, то надо освежить копии обьектов на клиенте и в серверном кеше (если таковой есть). Тот, кто инициирует изменение, т.е. транзакцию (это клиент наверное), тому и удобнее инициировать обновление копий. Это сообщение отредактировал(а) COVD - 25.8.2009, 17:54 |
|||
|
||||
fixxer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: 4 Всего: 27 |
Я вот только в упор не понял почему account и payment являются компонентами. ![]() -------------------- ![]() |
|||
|
||||
Старовъръ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.5.2008 Репутация: 1 Всего: 10 |
Хм.. я думал модуль == компонент.
-------------------- |
|||
|
||||
polosatij |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 22.2.2004 Где: Stuttgart<-> ;Karlsruhe, Germany Репутация: 3 Всего: 8 |
ок, тогда что же компонент в твоём понятии? дело в том, что можно тут ещё несколько "модулей" назвать и приложение готово. тогда всё приложение - это монолитный один компонент. что-то он слишком большой получается. я с этим не согласен ![]() вот, и я об этом. хр*нова получается.. "я не согласен. а может быть мы поищем другие варианты?" (с) Гришковец ![]() ----- тогда я за то, чтоб поговорить, что же такое компонент и как добиться "меньшей" работы при "лучшем" построении ![]() |
|||
|
||||
COVD |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
тогда ищите ![]()
компонент приложения - это плагин (Эклипс) или модуль (Нетбинс) компонент системы (распределенного приложения) - приложение . Это сообщение отредактировал(а) COVD - 26.8.2009, 12:33 |
||||
|
|||||
polosatij |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 22.2.2004 Где: Stuttgart<-> ;Karlsruhe, Germany Репутация: 3 Всего: 8 |
всё.. похоже тема захлебнулась в безвыходности..
![]() пс: я так и не понял, что же такое компонент, как его так магически строить ![]() |
|||
|
||||
fixxer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: 4 Всего: 27 |
Нет уж, давай порисуем (с) Я не могу дать точного определения компонента, но могу сформулировать ряд, на мой взгляд, ключевых признаков.
-------------------- ![]() |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
Не надо путать компонент и слой/уровень/layer.
Портлет может быть компонентом на уровне представления в портале. Слой - это функциональное назначение всех компонентов, которые в нем находятся. Это все равно, что рассуждать чай более горячий, чем сладкий. Компонент позволяет просто решать некоторую задачу. Он имеет некоторую функциональность. Слой позволяет разбить систему на разные зоны ответственности, гед работают компоненты для решения конкретных задач этого слоя. Один слой занимается сохранением данных используя определенные компоненты. Другой слой - бизнес-логика. И он использует другие компоненты. |
|||
|
||||
fixxer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: 4 Всего: 27 |
AntonSaburov, так как я понял, проблема в том что при нарезке по слоям (layer), когда мы вносим новую функциональность нам приходится проводить изменения в каждом из слоев. А хотелось бы, чтобы новый функционал приходил единым "куском". Ежели нарезать поперек, по функционалу, то, во-первых, в каждом "куске" мы повторяем структуру всех слоев, во-вторых, "куски" начинают обрастать перекрестными зависимостями друг с другом. Как уже ранее предлагалось, можно скомбинировать "нарезку". Низкий уровень порезать по-layer'но сформировав некие base-компоненты. А высокоуровневые резать по функционалу.
-------------------- ![]() |
|||
|
||||
polosatij |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 22.2.2004 Где: Stuttgart<-> ;Karlsruhe, Germany Репутация: 3 Всего: 8 |
всё, что сказано, мне понятно.. но нет конкретики, а есть, если то это, а вот если так то то.. у нас приложение, например, делется на следующие модули:
вся структура построена на мавене: - parent // parent мавен - base // некая часть, модуль, что не вошёл ни в один другой модуль не обязан лежать в "корне" дерева - category // "компонент" для работы с категориями - entity // entity - dao // слой DAO - manager // слой manager-ов - html // js, images, css, html для верстальщика - spring // настройка спринга, контроллеры и т.д. - install // инсталяция приложения и т.п. вещей - selenium // тесты на основе selenium - view // собирает view для верстальщика - web // собирает полностью приложение с запусом различных профилей имеем различные приложения. как видно, из такой структуры невозможно ничего выдернуть. каждая новая "страница" размазывается по практически по всем модулям. потом она обрастает перекрёсными ссылками и "навеки" в системе. а какую структуру приложения избрали вы? ![]() ![]() |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Продолжу свои рассуждения ![]() Из цитаты ![]() Если разделяемое приложение - клиент, то для него имеет смысл только второй вариант. Клиентское приложение работает на одном компьютере. Развертывание распределенной системы на одном компьютере не дает преимуществ. Скорее, недостатки. Если разделяемое приложение - сервер, то формально для него годятся оба варианта. Однако первый вариант (распределенная архитектура) на мой взгляд предпочтительнее. И вот почему. Серверное приложение работает в условиях, когда нормальным является наличие несколько компьютеров, обьединенных в локальной сети. Поэтому распределенная архитектура здесь проявит все свои достоинства, особенно ценные для режима работы 7/24, типичном для серверов. С другой стороны, серверное приложение обычно создается и контролируется только владельцем. Трудно представить, что внешние команды по собственной инициативе создают компоненты для серверного приложения. Это является обычной практикой, например, для открытых IDE. И плагинно-модульная архитектура, на мой взгляд, разработана именно под такой сценарий. Плагинно-модульные платформы формализуют (а следовательно, автоматизируют) процесс подключения, т.е. поиск модулей и проверки соответствия версий, интерфейсов. Серверное приложение тоже может создаваться усилиями нескольких коллективов, но создаваемые ими компоненты в условиях сервера наверное практичнее развертывать как отдельные приложения. Универсальным средством интеграции приложений на сервере являются системы или шины сообщений (messaging). Они позволяют обьединять решения от независимых производителей без привязки к платформе. Не имеет смысла создавать плагины, когда есть перспектива необходимости масштабирования приложения - в случае успешного развития бизнеса нагрузка на сервер возрастает, покупаются дополнительные компьютеры. Распределенное приложение проще масштабировать чем монолитное. Поэтому прихожу к заключению, что разделение на компоненты для клиентского (standalone) приложения осуществляется переходом на плагинно-модульную архитектуру. Для серверного приложения предпочтительным является переход к распределенной архитектуре. |
|||
|
||||
fixxer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 14.9.2006 Где: Саратов, Россия Репутация: 4 Всего: 27 |
Не-не-не. Так мы за деревьями леса не увидим. Давай вернемся к нашим баранам (account и payment) и на их примере попробуем разобраться. Расскажи на их примере, какая будет архитектура. Поподробнее только, с классами и т.п. -------------------- ![]() |
|||
|
||||
polosatij |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 22.2.2004 Где: Stuttgart<-> ;Karlsruhe, Germany Репутация: 3 Всего: 8 |
COVD, это вот всё.. конечно, понятно сказано.. цитата из книги: "вот некий пример, как же хорошо наш пример попадает в нашу архитектуру!! кто бы мог подумать".
хорошо, когда отдельный компонент представляет, например, отдельный сервис - вызываем его, он что-то делает (не зависимо от других) и сё.. как быть с интернет страницами в одном приложении? допустим есть две интернетстраницы для одного приложения с одинаковым (!) дизайном (например), темплатами и т.д. каким образом тогда делить само приложение? получается, что само приложение делить надо именно в вызовах Controller-ов, что уже само по себе проблематично (например, нельзя перестартовать часть приложения).. и в контроллерах уже идёт вызов на некий сервис.. ![]() ![]() Добавлено через 2 минуты и 46 секунд
следуя архитектуре которая у нас есть сейчас, account и payment "размажется" по пакетам base, entity, dao, manager, html, spring, selenium |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |