Jump to content


Photo

Проект. Слой.

project layer

  • Please log in to reply
9 replies to this topic

#1 dearhome

dearhome

    Advanced Member

  • Members
  • PipPipPip
  • 61 posts
  • Organisation:Home

Posted 03 April 2017 - 14:54

Добрый день.

 

Прошу разъяснить методику работы со слоями в проектах на платформе Radixware:

1. какое назначение слоев в проектах?

2. как правильно создавать новые слои параллельно существующим?
3. как настроить взаимодействие между модулями, которые находятся в разных слоях.

 

Уточните, пожалуйста, статьи в QIKI где можно прочитать.

 

С уважением, dearhome.


  • EdwardGennesi, FrankKig, MichaelHauth and 3 others like this

#2 dlastochkin

dlastochkin

    Member

  • Administrators
  • 26 posts
  • Organisation:Compass Plus

Posted 03 April 2017 - 16:54

Добрый день.

1. Любой продукт на платформе RadixWare представляет собой направленный граф слоев. Каждый слой - законченный продукт, который может являтся платформой для разработки других продуктов (вышележащих слоев). Разработка продукта на RadixWare сводится к разработке собственного слоя или иерархии слоев. URI самого нижнего из разрабатываемых слоев должен совпадать со значением BaseDevelopementUri. Нижележащие слои приходят в составе дистрибутива. Приведу пример иерархии слоев:

  • org.radixware - платформа RadixWare. В иерархии слоев всегда является корнем, реализует базовую функциональность платформы (ORM, система прав, workflow и т.д.).
    • org.radixware.radinsk - система автоматизации космодрома Radinsk. Реализует функциональность автоматического запуска и контроля за спутниками.
      • org.radixware.radinsk.<client name> - модификации для клиента <client name>
      • org.radixware.radinsk.<...> - модификации для других клиентов
    • <...> - другие продукты на базе RadixWare

Таким образом, нижележащие слои являются, по сути, библиотеками, которые используются в создаваемом продукте. Почитать про слои можно здесь.

 

2. При создании слоя, обязательно нужно указать его базовый слой и URI. Созданный слой должен либо иметь BaseDevelopementUri, либо иметь этот слой в своей иерархии (иначе, слой не получится разрабатывать). Про редактор слоев можно почитать здесь.

 

3. Из слоя есть доступ к опубликованным дефинициям всех нижележащих слоев. Модуль, содержащий дефиницию, должен быть добавлен в качестве зависимого (подробнее: http://wiki.radixwar...s#Module_Editor). Дефиниция считается опубликованной, если у нее есть выставлен модификатор published. В нижележащих слоях, дефиниции вышележащих слоев недоступны.

 


  • EdwardGennesi, MichaelHauth and misha.19702 like this

#3 dearhome

dearhome

    Advanced Member

  • Members
  • PipPipPip
  • 61 posts
  • Organisation:Home

Posted 03 April 2017 - 18:07

Я запутался со слоями окончательно. В Manager настроены три слоя: main, org.radixware и development, см. скрин во вложении.

Пытаюсь создать новый слой по аналогии с уже имеющимся devLayer с указанием аналогичных данных, кроме наименования (полей Name и Title) - получаю еще одну веточку под trunk, но уже имеющийся слой самостоятельно переименовывается и становится с таким же именем как и новый.

Возвращаю все обратно. Делаю иной слой и указываю URI - "development", а BaseLayer - Radix (org.radixware) или devLayer (main). Получаю веточку в trunk, автоматического самостоятельного переименовывания не происходит, но и сделать в новом слое я ничего не могу: команда создания нового DDS-модуля в контекстном меню недоступна, работу с пунктами меню Structure недоступны.

В результате создания нескольких вариантов слоев в дереве trunk у меня нет ничего, зато при создании очередного слоя в поле BaseLayer у меня получился целый список, см. скрин во вложении.

 

Скажите, пожалуйста, как исправить этот список (почистить его от мусора)?

Уточните, пожалуйста, как мне необходимо настроить Manager и Designer для корректного создания новых слоев параллельно с devLayer? Материалы WIKI содержать крайне мало полезной информации для таких нулевых как я, не могу допетрать как сделать правильно на основании изложенного в статье материала.

 

С уважением, dearhome.

Attached Files


  • MichaelHauth likes this

#4 dsafonov

dsafonov

    Newbie

  • Members
  • Pip
  • 7 posts

Posted 04 April 2017 - 10:55

Добрый день!

 

Давайте попробуем размотать клубок с конца.

Конечный продукт, разработанный на платформе RadixWare  и разворачиваемый у клиента, представляет собой "пирог" из слоев.

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

В целом слой можно рассматривать как логически сгруппированное множество бизнес-объектов, которые вместе призваны решать какой-то набор конечных задач.

 

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

Таким образом, образуется иерархия слоев. В самом низу этой иерархии всегда находится слой org.radixware (собственно, платформа).

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

 

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

Допустим, Вы решили разработать продукт DearProduct.

Вы берете RadixWare Manager, создаете репозиторий, и загружаете в специальную ветку репозитория дистрибутив платформы.

 

Загрузка дистрибутива в общем случае означает, что вы получили какую-то иерархию уже готовых слоев. 

Дальше у вас есть варианты - разворачивать этот дистрибутив как готовый продукт (собственно, так работают конечные клиенты),

либо вести на базе данного дистрибутива какую-то свою разработку (т.е. разрабатывать собственные слои поверх слоев из дистрибутива).

 

Сразу оговоримся, что не смотря на то, что дистрибутив может содержать несколько слоев, ровно один из них является "верхним", и этот слой

в некотором смысле идентифицирует дистрибутив ("верхний" слой прямо или косвенно зависит от всех остальных слоев дистрибутива, при этом от него в дистрибутиве

не зависит никто).

 

System Products In Use в RadixWare Manager имеет реальный смысл для варианта, когда Вы - конечный клиент. В этой настройке вы указываете URI верхних слоев, которые хотите разворачивать. 

В типичном случае, когда вы получаете один продукт от одного вендора, это ровно один URI верхнего слоя полученного вами дистрибутива. (это 99% случаев. в теории, возможно разворачивать комбинацию дистрибутивов (продуктов) от разных вендоров, но это экзотика и мы ее опустим).

 

А если Вы не конечный клиент, а разработчик, Вам необходимо выбрать для себя URI слоя, который вы будете разрабатывать. Это Ваш Base Development URI. 

В случае разработки рекомендуется в качестве System Products In Use указать Base Development URI. Но это не строгое требование, скорее "для красоты".

Пусть Ваш Base Development URI будет com.dearproduct.

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

У такой схемы есть свой Use-Case, но о нем позднее.

 

Дальше вы при помощи правого клига по дистрибутиву платформы отправляете его в разработку. По сути, это действие скопирует слой платформы в вашу папку trunk - т.е. каталог, в которм

вы должны вести разработку. Дальше вы можете сделать чекаут этого каталога, открыть дизайнер, начать разрабатывать свои слои. Базовые слои у вас будут отображаться в режиме Read Only. 

 

Дальше когда-нибудь Вы сделаете релиз, далее по релизу сформируете дистрибутив (он будет содержать уже два слоя - org.radixware и com.dearproduct, верхний - com.dearproduct),

и этот дистрибутив отдадите своим клиентам. 

 

 

 

Предлагаю изучить описанную модель разработки как базу, далее будем двигаться исходя из Ваших вопросов.



#5 dearhome

dearhome

    Advanced Member

  • Members
  • PipPipPip
  • 61 posts
  • Organisation:Home

Posted 04 April 2017 - 12:46

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

1. в Radixware Manager у меня есть два слоя "org.radixware" и "main" и ряд вопросов:

1.1 влияет ли последовательность расположения слоев и не что?

1.2. какой из этих двух слоев мне необходимо указать в поле "Base Development URI" для выполнения разработки собственных приложений?

1.3. если я добавлю третий слой "development.layer" необходимо ли мне помещать его первым в списке и указывать в "Base Development URI" для проведения разработки в Designer?

1.4. каким образом Designer "знает" о настроенных слоях в Manager? необходимо ли мне выполнять какие=либо манипуляции с веткой trunk (checkout) после добавления нового слоя в Repository? если операцию checkout выполнять необходимо, не произойдет ли затирание созданных мною приложений изначальным содержимым ветки trunk, на сколько безопасно выполнять эту операцию при разработке больших проектов?

1.5. на что влияет список слоев в Manager? могу ли я оставить список слоев из двух наименований "org.radixware" и "main" и уже в Designer-е создавать слои для trunk и разрабатывать приложения?

2. в Radixware Designer в ветке trunk присутсвуют сейчас два слоя: нижний "Radix" и слой повыше "devLayer" основанный на слое main из Manager:

2.1. слой main был создан до checkout ветки trunk, стало быть я могу выполнять разработку на основании это слоя, что собственно и было сделано (main указан в поле URI, org.radixware - в поле Base layer) - при создании нового слоя в ветке trunk с такими же параметрами, кроме имени, выполняется самостоятельно переименовывание старого слоя  и имена двух слоев совпадают, это верно?

2.2. если создавать новый слой в ветке trunk на основании слоя development.layer, который создан в Manager после выполнения checkout, то слоя получается не активным: я не могу выполнить Capture Structure, не могу добавить DDS/ADS-модуль.

 

Прошу не прогневится за мои, возможно, глупые вопросы, но я не могу связать в единую картину взаимосвязь между Manager и Designer, как настройки одного влияют на другой, как они связаны между собой.

В WIKI много описательного материала, но нет пошаговой технологической карты, последовательного описания Step-by-step с подробным описанием взаимосвязей и зависимостей для самых нулевых в работе с платформой, вроде меня.

 

С уважением, Dearhome.



#6 dlastochkin

dlastochkin

    Member

  • Administrators
  • 26 posts
  • Organisation:Compass Plus

Posted 04 April 2017 - 16:21

Добрый день.

1.1. Последовательнось расположения слоев в RW Manager ни на что не влияет.

 

1.2. В поле "Base Development URI" нужно указать main (т.е. Вы указываете, что будете разрабатывать слой с таким URI).

 

1.3. Добавление слоев в список "System Products In Use" имеет реальный смысл для варианта, когда Вы - конечный клиент. Вам, как разработчику, этого делать не нужно. На разработку в RW Designer этот список никак не влияет.

 

1.4. Слои, которые настраиваются в RW Manager, на разработку в RW Designer никак не влияют. Влияние на разработку в оказывает только поле "Base Development URI"  и только в тот момент, когда Вы делаете Send To Development в RW Manager (http://radixware.org...ng_started.html, Step 4.3. ).

 

1.5. Можете. Более того, именно это - правильный путь.

 

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

  1. В фаловой системе, в папке trunk, удалить все папки, кроме org.radixware и той, название которой совпадает с URI слоя, который вы разрабатывали.
  2. Открыть trunk/<yourLayerUri>/layer.xml и убедится, что аттрибут Uri элемента Layer совпадает с Вашим.
  3. Перезапустить RW Designer.

В итоге, в RW Designer Вы должны увидеть два слоя, один из которых - RadixWare, а второй - тот, в котором Вы вели разработки. Если URI Вашего слоя совпадает с Base Development URI, он будет доступен для редактирования.

По поводу переименования: дело в том, что уникальным идентификатором слоя является URI, а не Name. Именно поэтому, при создании нового слоя, который отличается от существующего только именем, вы и видите в RW Designer два слоя с совпадающими именами. Если Designer перезапустить, слой останется один.

 

2.2. Для того, чтобы слой можно было модифицировать, иерархия его родителей должна сходится к слою, URI которого совпадает с Base Development URI. Т.е., в Вашем случае, новый слой должен иметь слой с Base Development URI в качестве базового.

 

По поводу различия и взаимосвязи RW Designer и RW Manager: вся разработка (в том числе создание слоев) производится в RW Designer. Предназначение RW Manager - автоматизация поддержки жизненного цикла продукта, в том числе сборку и развертывание релизов (подробнее об этом можно почитать здесь). Поясню: для разработки продукта на платформе RadixWare необходим репозиторий svn. Этот репозиторий содержит не только ветку разработки продукта, но так-же и другие разделы, в числе которых релизы и дистрибутивы. RW Manager служит для управления этим репозиторием, а структура репозитория отображена в дереве Manager-а. RW Designer работает только с веткой разработки данного репозитория.



#7 dearhome

dearhome

    Advanced Member

  • Members
  • PipPipPip
  • 61 posts
  • Organisation:Home

Posted 05 April 2017 - 12:28

Спасибо за Ваш развернутый ответ, но осмелюсь возразить.

Если порядок расположения слоев в RW Manager не влияет ни на что, зачем тогда вводить в заблуждение и добавлять кнопочки для красоты по перестановке слоев местами?

Прошу дочитать мое повествование до конца и поправить меня если я допущу неточность.

В ожидании ответа я экспериментировал с возможностями системы по созданию нескольких слоев в проекте и вот к чему пришел:

1. в поле Base Development URI указан слой org.radixware - я создаю новый слой в Designer-e и указываю в качестве URI - org.radixware; в поле Base layers из выпадающего списка выбираю родительский слой "Radix (org.radixware)" - после нажатия ОК новый слой не появляется в дереве слоев в Designer-е;

2. создать слой, в котором URI - main, а Base layer - Radix (org.radixware), я также не могу - происходит переименование уже существующего слоя (вы подтвердили это в своем ответе, т.к. URI является уникальной составляющей);

3. в RW Manager-е создаю дополнительный слой "development.layer", делаю checkout каталога trunk и в RW Designer-е создаю слой "newDevLayer" со следующими параметрами: URI - development.layer, Base layers - main (если я укажу слой "Radix (org.radixware)", то работать со слоем "newDevLayer" я не могу - он заблокирован, пункты контекстного меню заблокированы);

4. повторяю операцию еще раз для проверки правильности свои действий: в RW Manager-е создаю дополнительный слой "link.layer", делаю checkout каталога trunk и в RW Designer-е создаю слой "linkLayer" со следующими параметрами: URI - link.layer, Base layers - main (возможно даже main, org.radixware).

 

Вот в таком варианте у меня все работает: слои в Designer-е создаются, они являются дочерними слоя main (если я все правильно понимаю), я могу создавать DDS & ADS объекты и доводить их до корректного отображения в Explorer.

 

Прошу подтвердить правильность моих действий или указать на неточности?!

 

Но теперь встает еще один вопрос. Вопрос области видимости объектов между слоями. Все два созданных мною слоя ("newDevLayer" и "linkLayer") в качестве Base layers имеют слой main. При разработке DDS-объекта в слое"linkLayer" мне необходимо сделать связку между таблицами разных слоев. Я могу сделать ссылки на таблицы из слоя main для дальнейшей связки. Но я не могу достучаться к таблицам из слоя "newDevLayer". Вопрос мой состоит в том, как организовывать связи между таблицами DDS-объектов из разных слоев в рамках одного проекта?

 

Если Вам будут необходимы мои файлы layer.xml из разных слоев - напишите, пожалуйста.

 

С уважением, Dearhome.



#8 dearhome

dearhome

    Advanced Member

  • Members
  • PipPipPip
  • 61 posts
  • Organisation:Home

Posted 05 April 2017 - 14:01

(дополнение к видимости слоев в Explorer)

 

Создав слои main & development.layer я указал их через запятую в server.cfg и explorer.cfg в тэге "topLayerUri". После чего запустил сервер и проводник и в форме выбора "Выберите корневой каталог" вижу четыре записи: Разработка пользовательских дефиниций, RadixWare и два моих слоя. В каждый из них я могу заходить и что-то делать с таблицами.

Но когда в server.cfg и explorer.cfg я добавляю третий слой link.layer, в то же самое поле через запятую, то в Проводнике в форме выбора корневого каталога я вижу уже три слоя: Разработка пользовательских дефиниций, RadixWare и Main.

Прошу уточнить причину происходящего и уточнить как правильно сделать загрузку server & explorer при большом количестве слоев?

 

P.S. У меня получилось использовать объекты DDS-модуля из слоя newDevLayer после добавления этого слоя в поле "Base layers" (main, org.radixware, development.layer) и добавления DDS-модуля из newDevLayer в область "Dependencies used definitions". Этот вопрос снимается.

 

С уважением, Dearhome.



#9 dlastochkin

dlastochkin

    Member

  • Administrators
  • 26 posts
  • Organisation:Compass Plus

Posted 05 April 2017 - 14:33

Добрый день.
Вероятно, возможность изменять порядок следования слоев  в RW Manager - историческое наследие. В настоящее время порядок следования слоев в System Products In Use не несет смысловой нагрузки.
 
По поводу создания слоя, URI которого - org.radixware: такой слой действительно нельзя создать. В продукте на основе RadixWare всегда будет слой Radix, URI которого как раз org.radixware. Так как URI слоя должен быть уникальным, создать новый слой с таким URI нельзя.
 
Для создания слоя не нужно перед этим добавлять его в RW Manager и делать Checkout. Достаточно просто создать его в RW Designer, указав при создании уникальный URI и базовый слой.
 
В платформе действительно поддерживается возможность запускать несколько верхних слоев. Однако, это имеет реальный смысл только в том случае, когда эти слои разрабатываются разными вендорами. В Вашем случае размно иметь один верхний слой и указать при запуске только его. Объекты всех базовых слоев будут загружены автоматически. 
 
Так же хотелось бы узнать, какую цель Вы преследуете, создавая несколько слоев? Если она заключается в декомпозиции продукта, то способ ее достижения выбран несовсем верно. Создавать несколько слоев следует в том случае, когда создается несколько слегка отличающихся вариантов одного и того же продукта. В этом случае создается один слой, в котором реализуются базовые функции продукта, и несколько слоев, базирующихся на данном слое и представляющих собой вариации продука. При этом конечному клиенту поставляется одна из вариаций. Если у Вас единый продукт, разработку рациональнее вести в одном слое, а для декомпозиции использовать модули.


#10 dearhome

dearhome

    Advanced Member

  • Members
  • PipPipPip
  • 61 posts
  • Organisation:Home

Posted 05 April 2017 - 17:25

Большое спасибо за Ваш ответ.

Работа со слоями рассматривалась как возможность разработки ПО двумя отделами независимо друг от друга. Однако, с двух подразделений должна поступать отчетность руководству.







Also tagged with one or more of these keywords: project, layer

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users