как разделить и следовать модулю mindsent в вашем приложении? - PullRequest
0 голосов
/ 08 августа 2009

Мне было интересно, почему так мало примеров и материалов для чтения о том, как программировать модули.

Практически каждый крупный проект, который вы начинаете, теряется в середине такого большого количества кода, даже если он находится в отдельной папке. (Ну, я делаю)

Я хотел бы понять и, возможно, увидеть краткий пример или ссылку на проект, ориентированный на модули.

Модуль, это отдельная часть системы. Который вы всегда можете прикрепить больше модулей к основному модулю.

приложение Foo-core.jar (.dll) приложение Foo-BI приложение Foo-отчеты

Ядро, будет иметь базовую модель предметной области с необходимыми библиотекой, пользовательским интерфейсом, контроллерами и представлениями.

Но как Core узнает, доступен ли BI для использования? а им звонить надо?

Я ясно дал понять?

Пожалуйста, если бы вы могли, я хотел бы привести пример.

Ответы [ 2 ]

1 голос
/ 08 августа 2009

Различают фактические фрагменты кода (классы) и модули, в которых они поставляются. В простом случае вы запускаете приложение и просто говорите: «вы найдете нужные вам классы в этих местах», где список представляет собой список модулей. Мы используем PATH (для DLL) и / или CLASSPATH (для классов Java). Приложению обычно не нужно знать, из какой DLL или JAR пришел класс. [А как насчет возможности того, что более одного модуля содержит копию, возможно, с разными версиями, класса? Именно тогда загрузка классов становится такой веселой, но это совсем другая история.]

Так как общая структура определяет, какие классы ей нужны? Множество возможных путей, но концептуально с помощью какой-то конфигурации.

Посмотрите на идеи внедрения инверсии управления и зависимости, возможно, начните здесь

Я покажу, как можно изменить ваш пример, чтобы делать то, о чем вы спрашиваете. Я не хочу использовать слово «модуль», здесь у него слишком много возможных значений. Вместо этого я буду использовать «плагин» - один или несколько фрагментов кода становятся доступными, наше мнение хочет использовать все, что предоставляется .:

Controller {

   // the list of what you have been calling modules
   List<IPlugins>  myPlugins;  

   initialise() {
        // somehow we initialise that list of plugins
        // imagine we read a config file, or some such
        // If you read about Dependency Injection you'll see 
        // how we might do that
   }

   index(){

     viewModel.setUser("John");
     viewModel.setCategory("Programer");

     showView(viewModel);
 }

}

View {

   showView(viewModel) {
      System.out.println(viewModel.getUser().toString());
      System.out.println(viewModel.getCategory().toString());

      forEach( onePlugin : viewModel.getPlugins() ) {
          System.out.println( onePlugin.getDisplayString() );
      }
    }
 }

Это работает, если мы можем предположить, что все плагины соответствуют некоторому согласованному интерфейсу, здесь мы ожидаем, что сможем вызывать getDisplayString () для каждого плагина.

Обычно тип модульности, о которой вы говорите, зависит от некоторой степени контроля над тем, что подключается к фреймворку. Это может стать довольно сложным. Такие языки, как Java, позволяют вам получить объект и «отразить», чтобы найти все методы, имена которых выглядят как «getXXXXX ()». Таким образом, представлению может быть присвоен любой старый объект, и просто распечатать результат (скажем) getName (), getPhoneNumber () getPostCode () ...

Ключевым моментом здесь является то, что мы можем использовать некоторую согласованную модель, чтобы определить, какие метиды вызывать. В этом случае представление может быть очень гибким.

0 голосов
/ 08 августа 2009

Давайте возьмем это как пример.

приложение Foo-core.jar

Controller {

  index(){

    viewModel.setUser("John");
    viewModel.setCategory("Programer");

    if(userLocatorModuleExists())
       viewModel.setLocation(locatorModule.locate(viewModel.getUser()));

    showView(viewModel);
  }

}

View {

  System.out.println(viewModel.getUser().toString());
  System.out.println(viewModel.getCategory().toString());

    if(userLocatorModuleExists())
      System.out.println(viewModel.getLocation().toString());
}

это как это будет работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...