Который на первом месте - Интерфейс или [закрытый] Класс

Этот XPath выберет все object5 элементов со значениями атрибутов id "907":

//object5[@id="907"]

Этот XPath выберет все элементы со значениями атрибутов id "907": 118]

//*[@id="907"]
9
задан David Williams 13 March 2009 в 17:54
поделиться

16 ответов

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

Пока у Вас нет нескольких классов с типичными функциями, трудно предвидеть, каков интерфейс должен быть.

После того как у Вас есть несколько классов, очень, намного легче продумать, каков интерфейс должен быть, затем возвратитесь и осуществите рефакторинг те классы для надлежащей реализации недавно обнаруженного интерфейса.

Некоторые люди разрабатывают много классов на бумаге для выяснения, каковы интерфейсы должны быть. Сохраняет осуществляющий рефакторинг реальный код. Вместо этого необходимо осуществить рефакторинг дизайн.

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

Я не знаю, который является лучшим, но я уверен, что правильный ответ всегда является одной из этих двух опций во всех контекстах!

-1
ответ дан 4 December 2019 в 07:05
поделиться

Интерфейсы развиваются очень плохо со временем. Каждый раз, когда Вы изменяете интерфейс, Вы нарушаете условия контракта. Должны быть пересмотрены все классы, которые реализуют интерфейс. Для пребывания назад, совместимые разработчики становятся творческими и дизайн IFoo2 по IFoo. Это становится кошмаром обслуживания со временем.

Расцените следующее: предпочтите определять классы по интерфейсам. Используйте интерфейсы, когда Вы захотите обеспечить полиморфную иерархию типов значения. Другой способ использовать интерфейсы состоит в том, чтобы достигнуть подобного эффекта к тому из множественного наследования.

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

Я должен был бы согласиться с S. Lott, добавляя, что дизайн Интерфейса "установлен в камне", после того как Вы создаете его.

По этой причине один, Интерфейс не должен быть создан, пока Вы не знаете все, что он будет содержать.

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

Класс должен быть на первом месте.

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

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

Обычно Вам не нужен интерфейс, если Вы не имеете в виду несколько классов, которые реализуют его. Так, интерфейс был бы на первом месте.

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

Хорошо при реальном прохождении через стадии проектирования Вы создадите проекты для интерфейса и класса прежде, чем кодировать также.Правильно?

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

Который на первом месте? Потребность в функции или реализации функции?

В моем собственном рабочем процессе интерфейс на первом месте спонтанно. Если некоторой части моего проекта нужна новая возможность, это создается вокруг, как я хочу использовать его, т.е. его интерфейс. Затем реализация следует.

Таким образом, реализация содержит только, что на самом деле необходимо, и никакое время не потрачено впустую в сверхразработке солнечная бесполезная часть кода.

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

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

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

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

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

Я хотел бы бросить в двух различных взглядах относительно того, каковы интерфейсы:

  1. интерфейс является абстракцией важного объекта в Вашей системе. Можно разработать систему на основе интерфейсов и сотрудничества между ними.
  2. интерфейс является местом в системе, где Вы позволяете изменение реализации. Различия в платформе, сторонние библиотеки и т.д. скрыты интерфейсом, который может быть реализован по-другому для различных конфигураций Вашего программного обеспечения.

Однако в обоих случаях Вы разрабатываете сначала, и затем Вы кодируете.

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

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

В конечном счете Ваша стадия проектирования должна прибыть перед Вашей фазой реализации независимо. Прежде чем Вы начали кодировать Вас, должен иметь сильное изображение того, чем будут взаимодействия между Вашими классами, и надо надеяться Ваши интерфейсные решения будут очевидны из этого.

Однако, если Вы уже записали класс, и теперь должны осуществить рефакторинг его, чтобы иметь интерфейс, затем иметь в виду, что интерфейс просто выбирает ряд функций/методов, которые имеют общую цель, которая будет необходима больше чем одному классу. Если Вы найдете, что существует несколько полезных функций с Вашими другими классами, то будет нуждаться, то те методы были бы хорошими кандидатами на интерфейс.

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

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

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

Все это зависит от ситуации...

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

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

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

Я сказал бы, что интерфейсы на первом месте, но они подходят, поскольку Вы разрабатываете конкретный класс/метод. Когда Вы поражаете точку, что Вы знаете, что имеете зависимость от некоторого другого класса/метода, используете интерфейс, чтобы добавить зависимость и продолжать писать Ваш код. Затем возвратитесь после своих делавших записей текущий компонент и создайте компоненты, которые реализуют интерфейсы, в которых Вы нуждаетесь.

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

Я обычно иду со второй опцией. Запишите класс и извлеките интерфейс позже. Обычно причиной извлечения интерфейса является потребность во второй реализации того интерфейса (часто как насмешка для поблочного тестирования)

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

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

Это часто означает, что у Вас будут интерфейсы, прежде чем у Вас будут классы, но только потому, что Вам нужны они ранее.

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

Вопрос о приеме! Тест на первом месте. Затем реализация для теста, который является классом, который может или уже не может реализовать интерфейс. Часть создания тестовой передачи может включить извлечение интерфейса из существующего класса, но не пытается предположить то, в чем будет нуждаться Ваш интерфейс, прежде чем у Вас будет что-то, чему нужен тот интерфейс.

Вы собираетесь управлять собой сумасшедшая попытка понять это заранее - или во всяком случае, я всегда делал в мои дни перед TDD. Решите, что функциональность Ваши потребности приложения, запишите тест и позвольте тому руководству по тестированию, что Вы делаете со своим кодом.

6
ответ дан 4 December 2019 в 07:05
поделиться
Другие вопросы по тегам:

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