Подключи и играй архитектура - PullRequest
0 голосов
/ 16 января 2012

У меня проблема с созданием архитектуры модульного анализа для приложения C #.

Цель:

Это в основном похоже на динамический калькулятор Plug and Play. Начните с одного входа (A), создайте несколько операций в GUI

например, A² (квадрат) -> B (умножить) A -> C (разделить на) B -> D

Нажав одну кнопку выполнения в GUI с одним входом A, как добраться до D?

В графическом интерфейсе один список с необходимыми входными данными в виде двойных значений и другое окно списка загрузит тип определенного интерфейса, используя отражение, скажем, квадрат, умножение и т. д. Затем пользователь создаст новый процесс, подключив существующие процессы и, скажем, входные данные. с A в качестве входа -> квадрат -> дает B в качестве выхода -> используя A, B в качестве ввода -> умножить -> дает C в качестве вывода -> используя C / A -> дает вывод D Во время создания конкретного процесса их вывод будет загружен динамически с помощью конструктора.

Пример задачи:

public interface IProcess
{ 
 double ExecuteProcess()
}

Базовый класс процесса:

public abstract class Process
{
  public double Output {get; set;}
}

Пример класса процесса:

public class Square : Process, IProcess
{
   public double Input {get; set;}
   public double ExecuteProcess()
}

Вопрос

Надеюсь, я правильно объяснил свою проблему. Я искал пример шаблона, но не смог найти тот, который решит эту проблему. Кто-нибудь может подсказать, как подойти к этой проблеме?

1 Ответ

1 голос
/ 16 января 2012

Рассмотрим MEF , в этой связанной теме MSDN даже есть прогулка, хотя похоже, что она похожа на вашу проблему.

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

...