Соответствуя требованиям завтрашнего дня большое Приложение UI - MFC с Пакетом функций 2008 года, или C# и Winforms?

Вам необходимо определить AbstractBinder и зарегистрировать его в приложении JAX-RS. Связывание определяет, как инъекция зависимости должна создавать ваши классы.

public class MyApplicationBinder extends AbstractBinder {
    @Override
    protected void configure() {
        bind(MyService.class).to(MyService.class);
    }
}

Когда @Inject обнаружен в параметре или поле типа MyService.class, он создается с использованием класса MyService. Чтобы использовать это связующее, его необходимо зарегистрировать в приложении JAX-RS. В web.xml определите приложение JAX-RS следующим образом:

<servlet>
  <servlet-name>MyApplication</servlet-name>
  <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
  <init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>com.mypackage.MyApplication</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>MyApplication</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

Внесите класс MyApplication (указанный выше в init-param).

public class MyApplication extends ResourceConfig {
    public MyApplication() {
        register(new MyApplicationBinder());
        packages(true, "com.mypackage.rest");
    }
}

В конструкторе класса, указанном в конструкторе класса, записывается вставка, определяющая вложение зависимостей, а также приложение, в котором вы можете найти ресурсы REST (в вашем случае MyResource) с помощью вызова метода packages().

10
задан Ryan Fox 17 August 2008 в 02:00
поделиться

6 ответов

Я - разработчик на приложении, которое имеет тонну кода MFC прежней версии, и у нас есть все Ваши те же проблемы. Большой драйвер для нашей стратегии должен был устранить столько риска и неуверенности, сколько мы могли, который означал избегать, чтобы Большие Переписали. Поскольку все мы знаем, сбои TBR большую часть времени. Таким образом, мы выбрали поэтапный подход, который позволяет нам сохранять модули, которые не будут изменяться в текущем выпуске, пишущий управляемые новые возможности, andporting функции, которые получают улучшения к управляемому.

Можно сделать это несколько путей:

  1. Разместите содержание WPF на своих представлениях MFC (см. здесь),

  2. Для MDI-приложений MFC создайте новую платформу WinForms и разместите свои представления MDI MFC (см. здесь),

  3. Разместите пользовательские элементы управления WinForms в Диалоговых окнах MFC и Представлениях (см. здесь),

Проблема с принятием WPF (опция 1) состоит в том, что это потребует, чтобы Вы переписали весь свой UI сразу, иначе это будет выглядеть довольно шизофреничным.

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

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

Visual C++ 2 008 интересных взглядов Пакета функций, я не играл с ним все же. Кажется, что это могло бы помочь с Вашей проблемой устаревшего взгляда. Если "лента" также издала бы неприятный звук для Ваших пользователей, Вы могли бы посмотреть на сторонний MFC, и/или WinForms управляют поставщиками.

Моя полная рекомендация состоит в том, что interop + возрастающее изменение определенно предпочтителен для развертки изменений.


После чтения Вашего продолжения я могу определенно подтвердить, что повышения эффективности платформы значительно перевешивают инвестиции в изучение его. Никто в нашей команде не использовал C# в начале этого усилия, и теперь все мы предпочитаем его.

8
ответ дан 3 December 2019 в 22:40
поделиться

В зависимости от приложения и готовности Ваших клиентов установить.NET (не все они), я определенно переместился бы в WinForms или WPF. Interop с кодом C++ чрезвычайно упрощен путем рефакторинга кода неUI в библиотеки классов с помощью C++ / CLI (как Вы отметили в своем выборе тегов).

Единственная проблема с WPF - то, что может быть трудно поддержать текущий стиль. Перемещение в WinForms может быть сделано при поддержании текущего вида GUI. WPF использует такую другую модель, которая, чтобы попытаться сохранить текущий макет, вероятно, была бы бесполезна и определенно не будет в духе WPF. WPF также, по-видимому, имеет низкую производительность на машинах перед Vista, когда больше чем один процесс WPF работает.

Мое предложение состоит в том, чтобы узнать то, что используют Ваши клиенты. Если бы большинство переместилось в Vista, и Ваша команда готова вставить большую работу GUI, я сказал бы, пропускают WinForms и перемещаются в WPF. Иначе, определенно взгляд серьезно на WinForms. В любом случае библиотека классов в C++ / CLI является ответом на Ваши проблемы interop.

2
ответ дан 3 December 2019 в 22:40
поделиться

Вы не предоставляете много подробной информации о том, что делает Ваш унаследованный код или как это структурировано. Если у Вас есть определенные критерии производительности, Вы могли бы хотеть поддержать часть своей кодовой базы в C++. У Вас будет более легкое время, делая interop с Вашим старым кодом, если он будет выставлен правильным способом - можно ли звонить в существующую кодовую базу от C# сегодня? Могло бы стоить думать о проекте разобраться в этой структуре.

На точке WPF Вы могли утверждать, что WinForms может быть более соответствующим. Перемещение в WinForms является большим шагом для Вас и Вашей команды. Возможно, они могут быть более довольны перемещением к WinForms? Это лучше документируется, больше опыта на рынке, и полезное, если все еще необходимо поддерживать окна 2 000 клиентов.

Вы могли бы интересоваться Расширением Приложений MFC с Платформой.NET

Что-то еще для рассмотрения является C++ / CLI, но у меня нет опыта с ним.

2
ответ дан 3 December 2019 в 22:40
поделиться

Поблагодарите всех любезно за свои ответы, это заверяет, чтобы видеть, что обычно согласие следует за моим ходом мыслей. Я нахожусь в удачной ситуации, что наше программное обеспечение также работает на нашем собственном специальном оборудовании (для широковещательной промышленности) - таким образом, выбор ОС является действительно нашим и навязан нашим клиентам. В настоящее время мы выполняем XP/2000, но я вижу требование скоро переместиться до Vista.

Однако мы также должны обеспечить очень точный контроль над производительностью GPU, которую я предполагаю, автоматически исключает WPF и аппаратное ускорение? Я должен был высказать то мнение в своем исходном сообщении - извините. Возможно, возможно использовать два GPU..., но это - другой вопрос в целом...

У команды нет значительного опыта C#, и я не эксперт сам, но я думаю, что полные долгосрочные преимущества управляемой среды, вероятно, перевешивают время, которое потребуется для набирания скорость.

Похож на Winforms, и C# имеют его на данный момент.

2
ответ дан 3 December 2019 в 22:40
поделиться

Я соглашаюсь с чувством WPF. Tag/XML базировался, UI, будет казаться, будет более портативным, чем WinForms.

Я предполагаю также, что необходимо рассмотреть команду, если нет большого количества текущих навыков C#, то это - фактор, но продвижение рынка для разработчиков MFC уменьшается, и C# растет.

Возможно, некоторый постепенный подход был бы возможен? Я был связан с перекодированием унаследованных приложений к C# вполне немного, и это всегда берет намного дольше, чем Вы оценили бы, особенно если Вы сохраняете некоторый унаследованный код, или Ваша команда не то, что сведущая в C#.

0
ответ дан 3 December 2019 в 22:40
поделиться

Если бы необходимо было посмотреть на перемещение в C# и поэтому.NET, то я рассмотрел бы Windows Presentation Foundation, а не WinForms. WPF является будущим умных клиентов в.NET и навыками, которые Вы берете, Вы сможете снова использовать, если Вы захотите подать размещенные браузером заявки Silverlight.

1
ответ дан 3 December 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: