Очевидно, что вы не можете знать, не отправляя HTTP-запросы, чтобы увидеть, какие перенаправления они делают, пока вы не нажмете HTTP 200.
Стоит ли сначала попробовать http: // или https: //, это зависит от того, что вы пытаетесь сделать. При сканировании веб-сайта - первый, если вы намереваетесь использовать эти ссылки в общедоступных веб-службах, затем второй.
Так что я бы сделал это следующим образом:
NB большинство веб-сайтов, использующих www, будут перенаправлены с пустого домена. HTTPS-сайты будут перенаправлять с http: // на https: // тоже. Таким образом, самый безопасный запрос, который вы можете сделать, это no-www + http: //, но я бы начал с предположения о https, так как шифрование сети сейчас является общей тенденцией.
Несколько хороших:
ТЕЛО
Единственный принцип ответственности
Откройтесь/закройте принцип
Принцип замены Liskoff
Интерфейсный принцип сегрегации
Принцип инверсии зависимости
Больше информации и больше принципов здесь: http://mmiika.wordpress.com/oo-design-principles/
Проверьте Управляемый Доменом Дизайн: Занятие Сложностью в самом центре программного обеспечения. Я думаю, что это ответит на Ваши вопросы.
Проверьте "принципы" Объектно-ориентированного проектирования. Они имеют инструкции для всех вопросов, которые Вы задаете.
Ссылки:
Контроль статьи "Design Principles" на вышеупомянутом сайте. Они - лучшие доступные ссылки.
Принцип замены Лисков, часто выражаемый с точки зрения ", - a". Многими примерами ООП было бы более обеспеченное использование, "имеет -" (в C++, который частное наследование или явный состав), а не общедоступное наследование ("-"),
Получение Права наследования трудно. Выполнение так с интерфейсами (чистые виртуальные классы) часто легче, чем для base/sub классов
что они сказали, плюс он похож на Вас, моделируют реальные объекты, таким образом:
Можно использовать наследование и компоненты для сокращения кода/модели, но только способами, которые имеют смысл с базовым доменом.
Например, класс Канала со свойством Diameter имел бы смысл, в то время как класс DiameterizedObject (со свойством Diameter) со свойством GeometryType GeometryType. Канал не был бы. Обе модели могли быть сделаны работать, но первый ясно соответствует проблемной области, в то время как последние реализации искусственная (нереальная) перспектива.
Одна дополнительная подсказка: Вы знаете, что у Вас есть образцовое право при нахождении новых возможностей в коде, который Вы не запланировали от запуска - они просто 'естественно' падают из модели. Например, Ваша модель может иметь классы Канала и Соединения (как адаптеры возможности соединения) достаточный для решения непосредственной проблемы (говорят) что соединение каналов различного диаметра друг другу и вычислению скоростей потока, максимальных давлений и структурной целостности. Вы позже понимаете, что, так как Вы смоделировали структурные свойства и свойства возможности соединения Каналов и Соединений точно (в требованиях домена) можно также создать объект JungleGym из связанных каналов и правильно вычислить, сколько структурной загрузки он перенесет.
Это - экстремальный пример, но он должен понять через: модели правильного объекта поддерживают расширение и часто проявляют выгодные неожиданные свойства и функции (не ошибки!).
"BottomOfPipe"? Тот другой способ сказать глубину Канала ниже Дороги?
Любой вид дизайна является трудным и может быть сделан различные пути. Нет никаких гарантий, что Ваш дизайн будет работать при создании его.
Преимуществом, которое имеют люди, которые разрабатывают шарикоподшипники и такой, является намного больше лет опыта и данных для определения, какие работы и что не делает. Программное обеспечение не имеет такого же количества времени или точных данных.
Вот некоторый совет: