Текущее время: Пт, ноя 01 2024, 02:57

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Как пишете программы: form, local classes, global classes...
СообщениеДобавлено: Пт, окт 25 2019, 10:59 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, апр 12 2006, 14:36
Сообщения: 60
Привет, немного пятничная тема.
Вот допустим вам надо написать программу (report): селекционный экран, программа что-то там делает, выводит данные в ALV, как-то с ними взаимодействуют пользователи.
Где-то 5-10 тыс. строк. Какие-то части возможно будут использоваться в другом месте.
Abap 7.0, так что Eclipse использовать нельзя.
Как будете писать? Form, FM, SE24, локальный класс в отдельном инклюде...
Используете глобальные переменные? Как потом повторно используете отдельные части в других программах.


Последний раз редактировалось Димкин Пт, окт 25 2019, 13:05, всего редактировалось 2 раз(а).

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишете программы: form, local classes, global coasses..
СообщениеДобавлено: Пт, окт 25 2019, 11:31 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 05 2017, 23:56
Сообщения: 537
Если программа делает потенциально нужную в других местах выборку данных - выборку оборачиваю в ФМ,
а так формы и события ЛБД/экранов


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как пишете программы: form, local classes, global coasses..
СообщениеДобавлено: Пт, окт 25 2019, 12:34 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
А как понял что 5-10 тыс строк будет?

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишете программы: form, local classes, global classes...
СообщениеДобавлено: Пт, окт 25 2019, 12:56 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, апр 12 2006, 14:36
Сообщения: 60
Kengur написал(а):
А как понял что 5-10 тыс строк будет?

Я имел ввиду, что программа достаточно большая. Постановка на нее большая - 50 страниц в ворде.
Если программа 500 строк то заморачиваться с проектированием смысла нет - ее не сложно будет изменить и разобраться, что она делает.
Лучше ответь по вопросу, если ты абапер.

Раньше я писал все в формах:
Code:
start-of-selection.
  perform main.


После меня потянуло в ОО и я стал делать типа контроллера в локальном классе.
Code:
include zli_lcl_myclass.
start-of-selection.
  data: controller  type ref to lcl_myclass.
  create object controller.
  controller->init( it_r_rbukrs = s_bukrs[]
                      i_ryear         = s_gjahr
                      i_poper         = s_poper ).
  controller->run( ).
  controller->finish( ).


Но что-то мне этот подход тоже не очень нравится.

В se24 кажется ковыряться очень долго, хотя надо попробовать.
Вообще, конечно, SAP добавил ОО в ABAP достаточно коряво, мягко говоря. Даже удивляет что не кто на это не ругается. Определение метода в одном месте, реализация в другом.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишете программы: form, local classes, global classes...
СообщениеДобавлено: Пт, окт 25 2019, 13:16 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4856
Откуда: Москва
Пол: Мужской
Вопрос вкуса, но меня раздражают абаперы, которые всё пишут в локальных классах внутри текста программы.
Особенно когда в программе всего несколько сотен срок, а он там паттерн на паттерне накрутил по умным книжкам.

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

А вот обертка в ФМ для последующего повторного использования операций чтения данных и операций записи данных (т.е. отделение интерфейса от обмена данными с БД)- наоборот очень позитивная практика.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишете программы: form, local classes, global classes...
СообщениеДобавлено: Пт, окт 25 2019, 13:24 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Поддержу вышесказанное. ООП ради ООПа есть и процветает. Я сам если отчеты пишу то стараюсь пользоваться формами по максимуму. Сохранение данных наверно в фм и в апдейт таск, если большой объем. Если потом после тестирования все всех устраивает можно начинать логику затаскивать в констукции для последующего переиспользования, лучше все таки в классы. Сразу проектировать большой объем переиспользуемого кода имхо очень накладно, если нет четкой модели.

Ну и посмотрите тут
https://github.com/SAP/styleguides/blob ... eanABAP.md
и тут
https://github.com/ilyakaznacheev/abap-best-practice

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишете программы: form, local classes, global classes...
СообщениеДобавлено: Пт, окт 25 2019, 14:34 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, мар 16 2011, 23:26
Сообщения: 260
ООП нужно если програму разрабатывают много групп программистов , чтобы распределить ответственность за отдельные части программы. Иначе будет коллективная безответственность. Для 10 тыс. строк ООП не нужно.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как пишете программы: form, local classes, global classes...
СообщениеДобавлено: Пт, окт 25 2019, 14:44 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
Димкин написал(а):
Как будете писать? Form, FM, SE24, локальный класс в отдельном инклюде...
[Условия: разработка относительно большая, разрабатывается "с нуля", нет никаких ограничений со стороны архитектуры САП или особых требований при постановке задачи].
Предпочту локальные классы. Повторно используемый код - в локальных классах в отдельных инклудах. Библиотеку классов можно сделать и через глобальные классы, но только если разработка уж очень большая, или же если эти классы сразу же хорошо продуманы, и правиться почти не будут (что в реальности - редкость). ФМ-ы - только в случае повторно используемых экранов, при этом оборачивая их вызовы методами какого-то класса из библиотеки. Подпрограммы использовать не буду.
Димкин написал(а):
Используете глобальные переменные?
Глобальные переменные - зло. Использую только вынужденно - при работе с экранами.
Димкин написал(а):
Как потом повторно используете отдельные части в других программах.
Если инклуд - подключаю к нужной программе. Если глобальные объект - он доступен сразу.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишете программы: form, local classes, global classes...
СообщениеДобавлено: Вт, окт 29 2019, 07:55 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 09:38
Сообщения: 170
Я вот больше согласен с LAT.
Да городит ООП огород с фабриками и прочими абстаркциями в такой программе не нужно, но и использовать формы бы не стал.
Делал бы все на локальных классах, по сути особо ничего не поменяется с точки зрения архитектуры, но у методов есть некоторые плюсы:
1) опциональные параметры(если ими не злоупотреблять)
2) более короткий синтаксис
3) легче читается, если в программе много другого кода по работе с классами, например, BOL
Code:
    lo_entity ?= lo_bol_core->get_root_entity(
             iv_object_name = cl_ai_crm_utility=>c_objname_btorder
             iv_object_guid = <fs>-guid ).
    CHECK lo_entity IS BOUND.

    lo_entity = lo_entity->get_related_entity( cl_crm_ic_bp_constants=>gc_btorder_header ).
    CHECK lo_entity IS BOUND.

    lo_entity = lo_entity->get_related_entity( iv_relation_name = 'ZAEXT_BOL_RELAT000001' ).
    lo_entity->set_property( iv_attr_name = 'ZZAFLD0000AA' iv_value     = '' ).

Видеть вызовы perform внутри такого кода как-то странно.
4) возможность делать функциональные методы, что в свою очередь позволяет обойтись меньшим количеством переменных.
5) классы позволяют сгруппировать данные и логику работы с ними, уйдя при этом от глобальных данных, при этом позволяя достаточно эффективно кэшировать данные в атрибутах класса.

ФМ для организации обособленной логики которая включает в себя экраны, работу по RFC, экстракторы для BW(что и так понятно...) и т.д


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как пишете программы: form, local classes, global classes...
СообщениеДобавлено: Вт, окт 29 2019, 10:52 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, апр 12 2006, 14:36
Сообщения: 60
Всем спасибо за ответы.
А почему локальные классы а не глобальные? В чем отличие? (Я начал в локальных, только потому что мне так писать быстрее и так весь код в исходниках - как в других языках, без вкладок и окошек se24).
Как организовать локальные классы? (Я по аналогии с java - 1 класс = 1 инклюд)
Цитата:
через глобальные классы, но только если ... правиться почти не будут

И какая разница будут правиться глобальные классы или локальные?
И что такое функциональный метод? (Когда только importing и returning value?)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишете программы: form, local classes, global classes...
СообщениеДобавлено: Вт, окт 29 2019, 12:29 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пт, янв 18 2008, 10:34
Сообщения: 716
Откуда: Moscow
Пол: Мужской
в вопросе, что лучше процедурный или ООП стиль я выбираю ООП (помимо общеизвестных плюсов, появилась возможность inline определений и вызовов (с 7.4)). Но это конечно на вкус и цвет. Есть программы, которые написаны красиво в независимости от выбранного стиля, а есть такие "шедевры"...

_________________
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как пишете программы: form, local classes, global classes...
СообщениеДобавлено: Вт, окт 29 2019, 13:09 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 09:38
Сообщения: 170
Димкин написал(а):
А почему локальные классы а не глобальные? В чем отличие? (Я начал в локальных, только потому что мне так писать быстрее и так весь код в исходниках - как в других языках, без вкладок и окошек se24).

С точки зрения использования в одной программе - условно никакого.
Глобальные классы доступны во всех программах(поэтому - глобальные), т.е. вы можете переиспользовать их в других программах.
Цитата:
Как организовать локальные классы? (Я по аналогии с java - 1 класс = 1 инклюд)

Тут как вам проще, законов нет.
Цитата:
И какая разница будут правиться глобальные классы или локальные?

При правке локального будет меняться только логика текущей программы(т.к. в других программах вы не можете их использовать). При правке глобального - логика всех программ, использующих данный класс.
Ну это же банальная разница в области видимости.
Да, конечно же можно подрубить инклюд с локальным классом ко многим программам, но не надо так...
Цитата:
И что такое функциональный метод? (Когда только importing и returning value?)

Ну по сути да, pure function.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как пишете программы: form, local classes, global classes...
СообщениеДобавлено: Вт, окт 29 2019, 13:25 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Saperx написал(а):
Да, конечно же можно подрубить инклюд с локальным классом ко многим программам, но не надо так...

чем грозит?

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишете программы: form, local classes, global classes...
СообщениеДобавлено: Вт, окт 29 2019, 14:29 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, апр 12 2006, 14:36
Сообщения: 60
Kengur написал(а):
Saperx написал(а):
Да, конечно же можно подрубить инклюд с локальным классом ко многим программам, но не надо так...

чем грозит?

Да, почему не надо? Как использовать куски кода в других местах? Выделять в ФМ или в глобальный класс?
Тогда даже процедуры выглядят лучше, если конечно не используют глобальные переменные внутри, т.к. их можно использовать повторно.
Code:
      perform myform in program zmyprog using par1   changing  par2.

С инклюдами может быть неприятность, когда один инклюд включается дважды.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как пишете программы: form, local classes, global classes...
СообщениеДобавлено: Вт, окт 29 2019, 15:32 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 05 2017, 23:56
Сообщения: 537
инклуд с классом включать только в голову, и не будет проблем


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB