Архитектура для приложений WinForms?

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

, С другой стороны, если Вы действительно хотите заменить единственную привязку, Вы могли бы использовать Modules.override(..):

public class ProductionModule implements Module {
    public void configure(Binder binder) {
        binder.bind(InterfaceA.class).to(ConcreteA.class);
        binder.bind(InterfaceB.class).to(ConcreteB.class);
        binder.bind(InterfaceC.class).to(ConcreteC.class);
    }
}
public class TestModule implements Module {
    public void configure(Binder binder) {
        binder.bind(InterfaceC.class).to(MockC.class);
    }
}
Guice.createInjector(Modules.override(new ProductionModule()).with(new TestModule()));

Посмотрите детали здесь .

, Но поскольку javadoc для Modules.overrides(..) рекомендует, необходимо разработать модули таким способом, которым Вы не должны переопределять привязку. В примере Вы дали, Вы могли выполнить это путем перемещения привязки InterfaceC к отдельному модулю.

13
задан Michael Stum 24 August 2009 в 20:36
поделиться

4 ответа

Не пренебрегайте MVVM - это также верно и для WinForms. По сути, если вы используете привязку данных, вам нужно принять решение о том, к чему будут привязаны ваши объекты. Часто, особенно для более сложного пользовательского интерфейса, вы не хотите напрямую привязываться к своим объектам домена, вы хотите создавать специализированные классы (иногда оболочки), к которым ваш пользовательский интерфейс может привязать, которые предоставляют все необходимое для представления (суть MVVM) и метод работает так же хорошо с Winforms.

Хорошую серию статей о подходе WinForms Model-View-Presenter можно найти в

The Build Your Own CAB Series Table of Contents

10
ответ дан 1 December 2019 в 22:07
поделиться

Просто начните писать модульные тесты для всего, что вы можете придумать. Поскольку некоторые части окажется трудным для модульного тестирования из-за тесной связи с WinForms, разделите их. Чистый. Вымойте. Повторите.

1
ответ дан 1 December 2019 в 22:07
поделиться

То, что я всегда буду делать (первый) должен иметь многоуровневое приложение

  • Уровень представления (ТОЛЬКО пользовательский интерфейс и логика привязки данных)
  • Уровень интерфейса к бизнес-уровню (определение контрактов для доступа к BL)
  • Реализация бизнес-уровня (фактическая логика, проверка данных и т. д.)
  • Уровень интерфейса к уровню доступа к данным (определение контрактов для доступа к DAL)
  • Реализация уровня доступа к данным

Это очень хорошо организует ваше приложение. Тогда я бы поискал какой-нибудь подход MVC. Я не так много работал с WinForms, больше с Asp.net и некоторыми клиентами Java Desktop (где я использовал MVC ). WinForms больше работает с подходом привязки данных .Net (DataSource, DataMember, .. .). Вам следует придерживаться этого подхода, а не пытаться заставить что-то другое. Я обнаружил, что это не совсем так.

Что всегда полезно, так это размещать логику пользовательского интерфейса в различных элементах управления (например, UserControls в Asp.net). Это облегчает повторное использование.

5
ответ дан 1 December 2019 в 22:07
поделиться

Наше эмпирическое правило - использовать MVC для большинства веб-сайтов из-за того, что сеть не имеет состояния. Если вы не пытаетесь предоставить очень богатый веб-интерфейс и привнести Silverlight, вам следует использовать MVVM. XAML идет рука об руку с MVVM и также может быть вашим разумным выбором клиента (или хорошим шаблоном MVCP).

Истинный MVC практически невозможно поддерживать в любых других обстоятельствах из-за того, что контроллеры должны обрабатывать весь ввод. В большинстве не веб-архитектуры есть элементы управления, которые предоставят вам это. Фактически, большинство говорят, что ASP.NET MVC в любом случае является гибридным MVC, но, по моему опыту, это очень хорошо.

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

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