Абстракция слоя UI

Для такой ситуации | оператор означает или полезен, для второго примера вы можете изменить выражение на:

'([(\d\.)]+|[a-z\d\.]+) - - \[(.*?)\] "(.*?)" (\d+) (\d+)'

Обратите внимание, что это предполагает, что все адреса состоят только из строчных букв, цифр и точек , РЕДАКТИРОВАТЬ: После комментария @tripleee я должен признать, что адреса могут содержать больше разных символов, поэтому я добавлю более терпимое решение:

'([(\d\.)]+|[^ ]+) - - \[(.*?)\] "(.*?)" (\d+) (\d+)'

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

'([^ ]+) - - \[(.*?)\] "(.*?)" (\d+) (\d+)'

. Чтобы заставить его работать с последним случаем, просто замените последний (\d+) на (\d+|-), как это было предложено в @solarc ранее

.
5
задан user52960 8 January 2009 в 15:33
поделиться

5 ответов

Я читал о MVC, MVP и Унижаю Диалоговое окно. (я вытягивал волосы). Коллега, который упомянул уровень UI, не смог дать мне очень хороший пример того, как он отличается от бизнес-слоя. И при выяснении он сказал, что это не был MVC/MVP. Следовательно я думал, что расспрошу тут и там

1
ответ дан 15 December 2019 в 06:37
поделиться

Я нашел серию Build Your Own CAB Jeremy Miller статей очень информативной в прошлом. Он описывает много вариаций на семейство Образцовых Контроллеров Представления шаблонов. Это - превосходное чтение.

1
ответ дан 15 December 2019 в 06:37
поделиться

Здесь существует несколько опций.

  1. MVC

    Необходимо разделить Представление далеко от Модели и Контроллера. Самый легкий способ вообразить, почему Вы сделали бы это, состоит в том, если у Вас были та же Модель и Контроллер, что Вы хотели представить различные взгляды - представление веб-сайта, представление автономного приложения, представление веб-сервиса, представление мобильного телефона, Ваши представления модульного теста, и т.д. Поэтому Вы не хотите логики в своем коде представления. Т.е. в Java, никаком образцовом управлении в Вашем ActionListeners и другом коде GUI - вместо этого Вы выгоняете это с квартиры в класс контроллера, и обработчик Представлений просто делает контроль ввода, выходное форматирование, и говорит с классом контроллера.

    Много представлений записаны из центрального представлением подхода. У Вас есть свой GUI. Что-то происходит, и Вы реагируете на это и действительно наполняете и обновляете GUI по мере необходимости. Поэтому легко связать Вашу бизнес-логику и модель очень плотно в представление.

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

  2. Веб-форма сбора данных (или серия веб-форм)

    Очень маловероятно, что Вы захотите собрать информацию в том же порядке как Ваша модель данных в Вашем бизнес-слое. Кроме того, необходимо будет сохраниться между страницами в многостраничной форме. Вы быстро найдете, что они не пустыми ограничениями является ЛАВАШ при сборе их на странице 3 (потому что они отталкивают клиентов на странице 1). Поскольку формы склонны измениться, поскольку они перестроены, Вы закончите тем, что разделили бизнес-логику от представления довольно вначале и сделали вывод, как Вы заполняете свою модель. И много другого материала.

  3. Интерфейс, который сгенерирован из модели

    У Вас есть модель, которая может измениться или действительно описывает интерфейс или явно или неявно. Вы поэтому генерируете интерфейс из модели вместо того, чтобы использовать предварительно разработанные формы и окна и так далее. Таким образом, необходимо программировать код представления вполне в общем, поскольку у Вас только будет модель для работы от. Много карт от модели до UI и наоборот. Затем Вы добавляете в некоторых наблюдателях, потому что модель оценивает изменение в другом месте, и это - отличное развлечение... :)

  4. Что-то еще...

1
ответ дан 15 December 2019 в 06:37
поделиться

В самых простых терминах Ваш уровень UI только интересуется UI, и сотрудничающий со следующим уравнивают (Ваш бизнес-слой возможно). Ваш бизнес-слой и слой данных (и любые другие слои Вы имеете) никогда не должны иметь никакого кода UI в них, потому что это - задание уровней UI.

Думайте о способе, которым работает веб-браузер, браузер является уровнем UI и интересуется рендерингом Вашей страницы и ничего иного. Когда что-то должно произойти, это звонит веб-серверу (следующий слой), чтобы сделать это и затем представляет результаты.

Попытайтесь гуглить для некоторых известных шаблонов UI:

  • MVC
  • MVP
  • Скромное диалоговое окно
  • 0
    ответ дан 15 December 2019 в 06:37
    поделиться

    Вот мой принцип: если необходимо переписать какую-либо логику (кроме управления средствами управления формой), то Вы не полностью разделили уровень UI от своих других слоев. Лично, мне нравится иметь Уровень служб, который содержит мои бизнес-правила, управляя доменом и объектами datamapping, и только обмениваясь объектами области с UI. UI ничего не знает о datamapping затем, или о бизнес-правилах.

    Это не отвечает об отдельном "уровне UI" между UI и моим Уровнем служб. Возможно, это с точки зрения разделения HTML и кода (т.е. код ASP.Net behinds можно было бы считать уровнем UI). Нет ничего худшего (в изменении/отладке веб-приложений), чем необходимость изменить глобальные настройки HTML, когда разметка создается по частям в тысяче различных функций. HTML должен просто быть в файлах HTML с минимальным количеством сценариев, необходимых для связи их с классами.

    0
    ответ дан 15 December 2019 в 06:37
    поделиться
    Другие вопросы по тегам:

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