Там какая-либо причина состоит в том, чтобы избежать шаблона сигнальной метки в Java?

Я работал с SharePoint с тех пор v.1, и я мог сказать Вам, что SharePoint является a:

  • сервер управления документооборотом
  • сервер управления веб-контентом
  • Портала решение
  • Поисковая система
  • Основанный на списке репозиторий
  • сайт Сотрудничества
  • Замена для долей файла
  • и т.д. и т.д.

..., но если бы я должен суммировать в одном предложении, что SharePoint, я сказал бы:

Sharepoint является сетью Microsoft ОС.

Это реально секрет его успеха. Многие люди вообразили сеть ОС как что-то как эти . Веб-ОС не что-то, что предназначено для сходства с настольной ОС. Сеть, которой ОС должна быть ВЕБ-ПЛАТФОРМА , в котором весь вид приложений может быть основан и пользователи, в состоянии сотрудничать с.

Думают о SharePoint как о версии с 2.0 эрами Windows:-)

5
задан Jim Downing 10 November 2009 в 17:48
поделиться

7 ответов

The issue with the Sentinel pattern is that it explicitly excludes the sentinel value from the set of values that are valid elements. I.e., if you have a list of objects which can validly contain null as an element, using null as a sentinel value is a fail.

15
ответ дан 18 December 2019 в 05:36
поделиться

Exceptions should only be used in "exceptional" situations. Concluding or breaking out of a loop is normal program flow, not an exceptional situation.

Additionally, when working in Java, (or any language for that matter), you want to use patterns and conventions that are common and well known in the community because other Java programmers may need to maintain your code. If they do, they will most likely expect to see Iterators, not the sentinel pattern.

9
ответ дан 18 December 2019 в 05:36
поделиться

Я думаю, что они оба в порядке, но Iterator более идиоматичен в Java (особенно, если у вас действительно есть Iterable, для которого вы можете использовать вместо него цикл for-each).

Единственное место, где вы часто видите версию Sentinel в Java, - это именно тот случай, когда вы написали код ввода-вывода.

4
ответ дан 18 December 2019 в 05:36
поделиться

Шаблон Sentinel используется в JDK для чтения потоков, так что это не редкость, но неудобно создавать цикл оф. Все решения имеют минусы, которых нет у итератора. Ваше решение требует повторяющегося вызова для чтения (т. Е. Дублирования кода). Цикл while заставляет объявить переменную вне его области. Другие альтернативы были бы неожиданными, и их было бы трудно понять.

Итак, в конечном итоге итератор является своего рода значением по умолчанию, от которого следует отклоняться только по какой-то причине.

2
ответ дан 18 December 2019 в 05:36
поделиться

Мантра - «говори, что делаешь, и делай, что говоришь».

Если вы проверяете возвращаемое значение на предмет особого значения, это ничего не говорит о том, почему вы это тестируете. В вашем примере:

for( int val = r.read(); val != -1; val = r.read()) {
   doSomethingWith(val);
}

Здесь говорится: «если возвращаемое значение когда-либо становится -1, мы можем пропустить остальное», или «если возвращаемое значение когда-либо равно -1, произошла ошибка», или «если возвращенное значение когда-либо -1, конец достигнут "? Напротив, hasNext полностью однозначен.

Кстати, мне действительно нравятся конструкции foreach и map , которые другие языки предоставляют (или позволяют писать) лучше, чем явный цикл.

2
ответ дан 18 December 2019 в 05:36
поделиться

Я не понимаю, чем паттерн Стража достаточно отличается, чтобы быть отдельным паттерном. Моя единственная мысль - это было бы полезно для определения значения остановки при потоковой передаче данных. Однако интерактор позаботится об этом с помощью требования метода hasMore.

0
ответ дан 18 December 2019 в 05:36
поделиться

«Исключения следует использовать только в« исключительных »ситуациях. Завершение или прерывание цикла - это нормальный поток программы, а не исключительная ситуация».

Если чтение файла завершается успешно, миллион раз и только в последний раз, когда он говорит: «Я не могу найти больше записей», вы не называете это «исключительным»?

Я не вижу проблемы в использовании, скажем, исключений EOFExceptions для потока управления (если Система достаточно разумна, чтобы поднять их, вместо того, чтобы возвращать это ужасно глупое целое число -1, говоря, что «-1 байт был прочитан»). Вы скажете мне, если следующее не читается / невозможно поддерживать:

try {
    r = readNext(...);
    process(r);
} catch (EOFException e) {
    ...
}
0
ответ дан 18 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

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