Как реализовать независимые от интерфейса приложения? - PullRequest
3 голосов
/ 30 ноября 2009

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

Например, я хотел бы написать свой исходный код для настольного приложения Winforms, которое я смогу подключить к веб-приложению asp.net или приложению WPF с очень незначительными изменениями. То есть Я смогу использовать один и тот же исходный код независимо от технологии пользовательского интерфейса, чтобы сделать его перспективным.

Я знаю, CSLA framework может это сделать.

Но если я не использую CSLA (для изучения нового фреймворка требуется некоторое время, и в настоящее время у меня не так много времени на него тратить), о каких моментах следует позаботиться, чтобы достичь такого рода способность в моем коде C #?

Можете привести пример? Я уже использую Business Objects и технику наложения в своих приложениях. Но даже в этом случае я видел, что для подключения моего кода к новым технологиям пользовательского интерфейса нужно много кода.

Пожалуйста, не предоставляйте мне поверхностный ответ.

Ответы [ 5 ]

10 голосов
/ 30 ноября 2009

Лучший способ сделать независимое от UI кодирование - это отделить логику от презентации. Посмотрите на шаблон MVC.

Это скорее проблема дисциплины в вашем дизайне, чем проблема фреймворка. Фреймворк не может не заставить вас правильно проектировать. Это может упростить вам задачу, если вы правильно спроектируете приложение, однако всегда есть способы обойти его.

4 голосов
/ 01 декабря 2009

Чтобы сделать ваш пользовательский интерфейс независимым, поместите логику, которая не зависит от пользовательского интерфейса, в отдельный слой или сборку. Отдельная логика от презентации. Это то, что следуют всем шаблонам, таким как MVC, MVP и MVVM. Это настолько фундаментальная часть структуры программного обеспечения, что она должна быть укоренилась на вас; если это не так, сделайте это так.

Отделение логики от презентации. Узнать его. Переживи это. Любить это.

Edit:

Можете привести пример? Я уже использую BO и технику наложения в своих приложениях. Но даже в этом случае я видел, что для подключения моего кода к новым технологиям пользовательского интерфейса требуется много кода.

Пожалуйста, не предоставляйте мне поверхностный ответ.

Я вижу, что вы редактировали. Позвольте мне уточнить:

Нет никакой возможности уйти от некоторой логики, которая зависит от пользовательского интерфейса. Интерфейсы не являются оболочкой; у них все еще есть логика и функциональность. Но эта функциональность должна быть ориентирована только на взаимодействие с пользователем. Отображение данных. Соберите данные. Придумайте графические трюки и анимацию, если ваши предпочтения лежат в этом направлении.

Остальное идет на бизнес-уровень, и , что может быть использован повторно. Если вы наложите слои должным образом, вы можете избежать переписывания основных функций каждый раз, когда вы пишете программу для новой инфраструктуры пользовательского интерфейса.

Но вам все равно придется переписать материал пользовательского интерфейса.

3 голосов
/ 01 декабря 2009

Если вы создаете многоуровневое приложение, ваша бизнес-логика, доступ к данным и т. Д. Уже должны быть разделены на классы, полностью независимые от вашего пользовательского интерфейса. Перераспределение этих библиотек для другой целевой платформы - рабочего стола или Интернета и т. Д. - должно быть простой ссылкой на существующие библиотеки из вашего нового приложения.

Это фундаментальное правило разработки программного обеспечения. Хотя шаблоны и структуры, такие как MVC и т. Д., Обеспечивают это более строго, в конечном счете, вы должны правильно разработать свое приложение. Задача такого рода не требует изучения новой технологии - только здравый смысл и небольшой опыт.

2 голосов
/ 01 декабря 2009

Ознакомьтесь с превосходной статьей Мартина Фаулера на эту тему.

Архитектура GUI, включая MVC, MVP, MVPC

0 голосов
/ 01 декабря 2009

Взгляните на объяснение MVVM (Model-View-ViewModel) в журнале MSDN. MVVM широко используется для разработки приложений WPF.

...