Разработка на Oracle ADF (как программировать):
Если поделитесь своими знаниями, я дополню и / или изменю, возьму к себе на вооружение, распечатаю и расклею
1. Страницы привязывать к бину. Все, что касается конкретной страницы, должно располагаться в бине. 1 к 1. Если используются фрагменты с повторяющимися компонентами, пока не скажу.)
Далее, если где-то “извне” нужно вызвать метод относящийся к этой странице, делается это с помощью
MyBeanName myBeanName = (MyBeanName) JSFUtils.getManagedBeanValue(CONSTANTS_BEANS.MY_BEAN_NAME);
myBeanName.doSomething();
Где в качестве CONSTANTS_BEANS.MY_BEAN_NAME выступает обычная строкова константа вида:
public static final String MY_BEAN_NAME = "MyBeanName";
Область видимости бина PageFlowScope. Если недостаточно этой видимости, можно попробовать использовать SessionScope.
2. Повторяющиеся методы, которые не привязаны к конкретному приложению, выносить в отдельные библиотеки. Можно делиться результатами с нами.
Повторяющиеся методы, привязанные к реализации, выносить в библиотеки проекта.
3. Начинать работу с taskfow, а по мере необходимости работы с ними (активация taskflow), иначе, если стартуют сразу все taskflow, приложение очень долго стартует.
После окончания работы с traskflow, нужно делать ему пассивацию. Иначе, невыгруженные taskflow продолжат находиться в памяти и выполнять всевозможные операции. Например, выполнение ненужных execute для ViewObject. Для этого на taskflow создается Return, который вызывается, например при переключении с одного taskflwo на другое.
Т.е. для каждого taskflow должны быть созданы Return. Особенно в приложении, в котором куча taskflow, переплетенных между собой.
4. Названия VO, идентификаторов для компонентов и т.д. выносить в отдельный файл с константами и далее уже работать с ними. Легче переименовывать, рефакторить и т.д.
Ну то есть не писать getViewObject(“MySuperViewObject”); А делать это так getViewObject(CONSTANTS_VO.MY_SUPER_VIEW_OBJECT);
А потом, если он перестал быть SUPER рефактором его переименовать, например, в MY_SHITTY_VIEW_OBJECT
5. Использовть для managed bean Session и PageFlowScope. Глюков меньше. (Хотя спорно, конечно). Если бин глобальный то Session. Если нет, то PageFlowScope.
6. Разбивать Application Module. Т.е. не пихать все подряд в один Application Module.
7. Не нужно все managed бины прописывать в adfc-config.xml. Нужно их прописывать в тех task flow, к которым они относятся.
8. Выносить логически несвязанные TaskFlow в отдельные подпроекты (я правда пока и сам не умею, но нужно так делать!)
9. Если используются на главной куча region, привязывать их к глобальному бину и при необходимости работать уже с ними.
<af:region value="#{bindings.myTaskflow.regionModel}" id="myRegion"
binding="#{MySessionBean.myRegion}"/>
10. Рекомендую создать стартовый бин и пихать в него все полезное.
@PostConstruct
public void init(){
doSomething1();
doSomething2();
doSomething3();
}
11. Я стал делать навигацию. Т.е. в каджый конкретный момент, я должен понимать, какая страница открыта. Для этого в сессию пишу, какая страница активна в текущий момент. Желательно, сделать и какая страница была активна ранее. Впрочем это из-за большого количества фрагментов которые переплетены между собой довольно таки сильно.