Я ни в коем случае не являюсь авторитетным, но я полагаю, что единственный поддерживаемый путь от 6,5 до 7. Конечно, это было бы самым нормальным маршрутом, тогда я полагаю, что можно мигрировать от 7 непосредственно к 2005 довольно безболезненно.
Что касается сценариев всех объектов - я отговорил бы от него, поскольку Вы неизбежно пропустите что-то (если Ваша база данных не будет действительно тривиальна).
Наследование интерфейсов - отличный инструмент, хотя вы должны использовать его только тогда, когда интерфейс B действительно может быть заменен на интерфейс A, а не только для агрегирования слабо связанных поведений.
Трудно сказать, подходит ли он для вашей конкретной ситуации. случай, но ничего плохого в использовании практики в принципе нет. Вы все время видите это в первоклассных API. Вот лишь один типичный пример из .NET framework:
public interface ICollection<T> : IEnumerable<T>, IEnumerable
Конечно, возможно иметь дерево наследования интерфейсов и даже «множественное наследование» с интерфейсами. Правильно это или нет, зависит от рассматриваемых интерфейсов. Если действительно так, что интерфейс B является расширением или уточнением интерфейса A, то наследование имеет смысл, но если новое перечисление в значительной степени не связано с концепцией, выраженной интерфейсом A, я бы сделал их двумя отдельными интерфейсами и имел бы классы что необходимо реализовать оба интерфейса.
ИМО, это совершенно правильный подход, я не вижу в нем никаких проблем.
С технической точки зрения интерфейсы не наследуются друг от друга. Что на самом деле происходит, когда вы создаете IFoo
, который наследуется от IBar
, вы говорите, что любой класс, реализующий IFoo
, также должен реализовывать IBar
].
interface IBar
{
void DoBar();
}
interface IFoo : IBar
{
void DoFoo();
}
В этом примере интерфейс IFoo
не имеет метода DoBar ()
. В большинстве случаев различие не имеет значения, но оно может укусить вас при использовании отражения в интерфейсе, а не в классе.