Текущее время: Ср, фев 19 2025, 02:11

Часовой пояс: 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
Сообщения: 4864
Откуда: Москва
Пол: Мужской
Вопрос вкуса, но меня раздражают абаперы, которые всё пишут в локальных классах внутри текста программы.
Особенно когда в программе всего несколько сотен срок, а он там паттерн на паттерне накрутил по умным книжкам.

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

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

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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