Где должны располагаться свойства при моделировании ООП?Небольшой пример включен - PullRequest
1 голос
/ 30 ноября 2011

Я хочу узнать, как эффективно использовать интерфейсы и базовые классы. Я не совсем уверен, где поставить общие свойства? Только интерфейсы принадлежат интерфейсу? Если такие свойства, как: Color и MinSpeed ​​не должны идти в интерфейсе, где они должны жить? В абстрактном классе?

public interface IVehicle
{
    void Speed();
    void Clean();
    void Stop();
}

public class Bmw : IVehicle
{
    // Because these pertain to every vehicle no matter of maker,
    // should these propertes go in the interface? Or in an abstract class?
    public string Color { get; set; }
    public int MinSpeed { get; set; }

    #region IVehicle Members

    public void Speed()
    {

    }

    public void Clean()
    {

    }

    public void Stop()
    {

    }

    #endregion
}

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

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

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

public interface IVehicleWithColorAndMinSpeed : IVehicle
{
    string Color { get; set; }
    int MinSpeed { get; set; }
}

(только не увлекайтесь этим)


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

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

0 голосов
/ 01 декабря 2011

«Правильный» ответ полностью зависит от модели вашего домена.Какую проблему вы пытаетесь решить?Не существует «правильного» ответа, кроме того, который решает конкретную проблему под рукой с наибольшей:

  • понятностью
  • ремонтопригодностью
  • краткостью
  • изоляция
  • производительность

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

Не могли бы вы рассказать нам больше о конкретном приложении, которое, по вашему мнению, должны обслуживать эти классы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...