AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.10.2004, 16:31   #1  
Smith is offline
Smith
Участник
 
76 / 10 (1) +
Регистрация: 02.09.2004
? Как лучше сделать?
Всех приветствую!

Сейчас у меня такая задача: сделать несколько импортов/экспортов данных между аксаптой и другими системами (к примеру экспортировать такие-то данные из аксапты в бэст). Решил я делать все эти задания в методах своего класса, наследника от RunBaseBatch. Все вроде замечательно, но таких методов несколько, т.е. перекрывая метод Run я не могу указать, что именно сейчас должно выполняться, соответсвенно класс я запустить не могу и не могу сделать для него MenuItem, чтобы пользователь запускал свои задачи.
В идеале я бы хотел присвоить отдельный метод отдельному MenuItem'у, описав в начале каждого метода экземпляр своего класса и после диалога запустив обработку, но такое сделать вроде бы нельзя (?). Так что получается, что для каждого импорта/экспорта мне создавать новый класс? Или сделать один, а методы дергать практически одинаковыми Job'ами, различающимися только указанием методов? ..хотя можно с тем же успехом и разные классы создать имхо..

Как бы Вы сделали?
Старый 11.10.2004, 16:59   #2  
Lexey is offline
Lexey
Участник
 
59 / 13 (1) ++
Регистрация: 16.05.2002
1)делаешь иерархию классов. в Run() пишешь
PHP код:
...
doMyJob();
... 
метод doMyJob() - proteced, реализован в наследниках. Можно и run() перекрывать, но это не есть хорошо - наверняка найдется общий код.

2) в main() пишешь

PHP код:
MyClass     holder;
;

holder MyClass::construct(????);     
... 
это так называемый ФАБРИЧНЫЙ МЕТОД, который знает как создавать правильных наследников в зависимости от параметра(читай GOF)

3) остается определится с тем , что будет параметром. Посмотри как работает иерархия классов разноски заказов как пример.
Старый 12.10.2004, 09:46   #3  
Smith is offline
Smith
Участник
 
76 / 10 (1) +
Регистрация: 02.09.2004
Есть еще варианты?
Старый 12.10.2004, 12:20   #4  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Может быть, я совершенно неправильно понял задачу, но, по-моему, достаточно сделать так:

1. Создать один класс SomeClass с N разными методами.
2. Создать перечисление SomeEnum с N элементами, соответствующими требуемым методам экспорта.
3. Создать N MenuItem-ов, в каждом из них заполнить свойства EnumTypeParameter = SomeEnum и EnumParameter = ...
4. В классе SomeClass создать статический метод main() приблизительно так:
PHP код:
static void main(Args _args)
{
 
SomeClass sc = new SomeClass();
 switch(
_args().parmEnum())
 {
  case 
SomeEnum::first:
            
sc.method_1();
            break;
  case 
SomeEnum::second:
            
sc.method_2();
            break;
  ....   
 }

Хотя, с точки зрения Best Practices, наверное, правильнее все-таки создавать иерархию классов, как уже здесь советовали.
Старый 12.10.2004, 12:47   #5  
Lexey is offline
Lexey
Участник
 
59 / 13 (1) ++
Регистрация: 16.05.2002
Если учесть, что технически ООП - это много-много свитчей, видимых только компилятору, то можно и так. Вопрос в том, что удобней - ковыряться в куче наследников или куче свитчей, каждый на пару-тройку страничек текста.
Старый 12.10.2004, 13:16   #6  
Smith is offline
Smith
Участник
 
76 / 10 (1) +
Регистрация: 02.09.2004
Спасибо за ответы!
Сделал по 2-му варианту, он для меня сейчас в самый раз (кстати откуда там свитчи на 2 листа? в них только название метода), просто 1-й вариант мне пока не по зубам еще, со временем наберусь опыта
В общем, спасибо!
Старый 12.10.2004, 13:33   #7  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
http://c2.com/cgi/wiki?StrategyPattern
+
http://c2.com/cgi/wiki?FactoryMethodPattern

еще вариант

KERNDOC://Classes/DictClass/callObject

но это для людей у которых нет ничего святого
Старый 12.10.2004, 13:57   #8  
Lexey is offline
Lexey
Участник
 
59 / 13 (1) ++
Регистрация: 16.05.2002
Re: Спасибо за ответы!
Цитата:
Изначально опубликовано Smith
кстати откуда там свитчи на 2 листа?
Вот-вот. А через меcяц бурной деятельности что там образуется?
Именно поэтму и считается, что ООП-решения лучше расширяемы. Сваливаем потенциальный источник багов на плечи компилятора... и ловим уже его собственные баги
Теги
menuitem, switch, как правильно, наследование, ооп, рефакторинг, стиль программирования

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
LedgerJournalTable как лучше сделать новую форму kitty DAX: Программирование 2 20.02.2008 12:36
подскажите. как лучше сделать kitty DAX: Программирование 4 02.11.2007 11:14
Как лучше сделать в сводном планировании ymv2000 DAX: Функционал 7 08.04.2007 08:40
Как же лучше сделать? PavelZ DAX: Программирование 2 29.03.2005 19:39
Количественный контроль, как лучше сделать? ATimTim DAX: Программирование 8 16.06.2004 11:02
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:46.