Какова роль/ответственность «оболочки»?[закрыто]
-
22-09-2019 - |
Вопрос
Я просматривал исходный код ЖелезоПитон проект и Сад CMS проект.IronPython работает с пространством имен Microsoft.Scripting.Hosting.Shell (часть ДЛР).Проект Orchard также косвенно использует концепцию «оболочки» в различных интерфейсах (IShellContainerFactory, IShellSettings).
Ни один из упомянутых выше проектов не имеет подробной документации, поэтому определение значения типа (класса и т. д.) по его названию весьма полезно, если вы пытаетесь выяснить общую структуру/архитектуру приложения, читая исходный код.
Теперь мне интересно:что имеют в виду авторы этого исходного кода, когда говорят о «оболочке»?Когда я слышу слово «оболочка», я думаю о чем-то вроде интерпретатора командной строки.Это имеет смысл для IronPython, поскольку у него есть интерактивный интерпретатор.Но для меня это не имеет особого смысла применительно к веб-CMS.
О чем мне следует думать, когда я сталкиваюсь с чем-то, называемым «оболочкой»?Какова в общих чертах роль и ответственность «оболочки»?Можно ли вообще ответить на этот вопрос?Является ли значение слова «оболочка» субъективным (что делает этот термин бесполезным)?
Спасибо.
Решение
Я думаю, что общее значение оболочки будет «пользовательский процесс, который интерпретирует и выполняет команды».
'Пользовательский процесс':в отличие от процесса, встроенного в ядро операционной системы.JCL в мире мэйнфреймов IBM было бы трудно считать оболочкой.
'интерпретирует и выполняет':В той или иной форме оболочка считывает команды из файла или терминала и реагирует на то, что представлено, а не жестко запрограммирована на выполнение определенной последовательности команд.
'команды:какие это команды, зависит от контекста.В стандартных оболочках Unix выполняемые команды представляют собой в основном другие программы, причем оболочка соответствующим образом связывает их вместе.Очевидно, что существуют встроенные команды, а также обычно существует синтаксис управления потоком данных, позволяющий соответствующим образом реагировать на результаты выполнения команд.
В других контекстах разумно подумать о выполнении других типов команд.Например, можно представить себе «оболочку SQL», которая позволяет пользователю выполнять операторы SQL при подключении к базе данных.
Оболочка Python будет поддерживать нотации Pythonic и выполнять операторы, подобные Python, с синтаксисом, тесно связанным с синтаксисом Python.Оболочка Perl будет поддерживать нотации, подобные Perl, и выполнять операторы, подобные Perl,...И так список можно продолжать.(Например, в Tcl есть tclsh — оболочка Tcl.)
Другие советы
В Orchard термин «оболочка» на самом деле является скорее метафорой прицела.Существует три вложенных области действия:хост, оболочка и работа.
Хост — это единый контейнер, который существует на протяжении всего времени существования домена веб-приложения.
Оболочка — это дочерний контейнер, созданный хостом и построенный в соответствии с текущей конфигурацией.Если конфигурация изменена, создается новая оболочка, а существующая удаляется.
Работа — это еще один контейнер, созданный оболочкой, в котором хранятся компоненты, действующие в течение одного запроса.
Одна приятная особенность использования контейнера оболочки заключается в том, что он помогает избежать использования статических переменных и необходимости циклически включать домен приложения при изменении конфигурации.Еще одна приятная вещь заключается в том, что он позволяет домену приложения Orchard обслуживать более одного «сайта» одновременно, когда хост содержит несколько оболочек и использует соответствующую для каждого запроса.