Re[5]: Проблема архитектуры?
От: krasin Россия  
Дата: 28.04.05 15:42
Оценка: 36 (2)
Возможно, разумно разделить механические объекты на "простые" и "сложные",
вроде такого:


interface IMechanical
{
   float EnergyConsumtionPerSecond
   {
       get;
   }
}

interface ISimpleMechanical : IMechanical
{
   float EnergyConsumtionPerSecond
   {
      set;
   }
}


А в объекте, который хранит механические объекты сделать два свойства:

interface IMechanicalHolder
{
   IMechanical Parts { get; }
   ISimpleMechanical SimpleParts { get; }
}


Вариант распределять потребление энергии как-то неинтуитивен.
Re: Проблема архитектуры?
От: Igor Trofimov  
Дата: 29.04.05 06:05
Оценка: +2
C>Теперь вдруг захотел лампочку с мотором да еше и так чтоб EnergyConsumtionPerSecond было разное.

Я не очень понял — а что это за хрень такая, которая является и лампочкой и мотором одновременно??
Может тебе нужно аггрегировать экземпляры лампочки и мотора?
Re[2]: Проблема архитектуры?
От: LCR Россия lj://_lcr_
Дата: 29.04.05 07:02
Оценка: :)
Здравствуйте, Igor Trofimov, Вы писали:

iT>Я не очень понял — а что это за хрень такая, которая является и лампочкой и мотором одновременно??

iT>Может тебе нужно аггрегировать экземпляры лампочки и мотора?

1. Светящийся моторчик.
2. Вращающаяся лампочка.

При некотором напряжении фантазии можно расширить этот список.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[3]: Проблема архитектуры?
От: fddima  
Дата: 29.04.05 09:22
Оценка: :)
Здравствуйте, LCR, Вы писали:

LCR>2. Вращающаяся лампочка.

Это что-бы автоматически выкручиваться, падать и разбиваться?
Так, что еще более вероятно, что и лампочка и моторчик встроены, и являются лишь составными частями какой-то занимательной системы, которая заставляет лампочку крутиться по какой-то траектории
... << RSDN@Home 1.1.4 beta 6a rev. 438>>
Проблема архитектуры?
От: chudo19  
Дата: 28.04.05 14:57
Оценка:
Есть интерфейс (условно).


IMehanical
{
  float EnergyConsumtionPerSecond{set;get;}
}

далее два разширения:

ILampa
{
  ...
}

IMotor
{
   ....
}

Теперь вдруг захотел лампочку с мотором да еше и так чтоб EnergyConsumtionPerSecond было разное.

class Somthing
{
  float EnergyForLamp;
  float EnergyForMotor;
  public float EnergyConsumtionPerSecond
  {
   set{а вот тут то и проблема - чего именно хотели утановить.для лампы или мотора}
  }
}



я чего то упустил,или просто bad design?

28.04.05 19:21: Перенесено модератором из '.NET' — AndrewVK
Re: Проблема архитектуры?
От: Oyster Украина https://github.com/devoyster
Дата: 28.04.05 15:01
Оценка:
Здравствуйте, chudo19, Вы писали:

[... skipped ...]

C>я чего то упустил,или просто bad design?


Ты упустил явную реализацию интерфейсов:

class Somthing : ILampa, IMotor
{
    float EnergyForLamp;
    float EnergyForMotor;
    float ILampa.EnergyConsumtionPerSecond
    {
        set{для лампы}
    }
    float IMotor.EnergyConsumtionPerSecond
    {
        set{для мотора}
    }
}
Re: Проблема архитектуры?
От: Аноним  
Дата: 28.04.05 15:10
Оценка:
C>Теперь вдруг захотел лампочку с мотором да еше и так чтоб EnergyConsumtionPerSecond было разное.

C>я чего то упустил,или просто bad design?


Возможно, Вы хотите иметь не объект, который одновременно является и лампочкой, и мотором, что получается, если реализовать оба интерфейса, ILampa и IMotor,
а именно "мотор с лампочкой", тогда можно попробовать так:

class Cas : IMehanical
{
  private ILampa lampa;
  private IMotor motor;

  public float EnergyConsumtionPerSecond
  {
    get
    {
       return lampa.EnergyConsumtionPerSecond + motor.EnergyConsumtionPerSecond;
    }
  }

  //Если хочется иметь доступ к лампе и мотору
  public ILampa Lampa 
  {
    get { return lampa; }
  }

  public IMotor Motor
  {
    get { return motor; }
  }
}
Re[2]: Проблема архитектуры?
От: chudo19  
Дата: 28.04.05 15:11
Оценка:
Здравствуйте, Oyster, Вы писали:

O>Ты упустил явную реализацию интерфейсов:


Да, ну а если вызывают через IMehanical.EnergyConsumtionPerSecond?
Re[2]: Проблема архитектуры?
От: chudo19  
Дата: 28.04.05 15:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А> public float EnergyConsumtionPerSecond

А> {
А> get
А> {
А> return lampa.EnergyConsumtionPerSecond + motor.EnergyConsumtionPerSecond;
А> }
А> }

Вы забыли сказать что мне зделать в set{}.
Re[3]: Проблема архитектуры?
От: krasin Россия  
Дата: 28.04.05 15:19
Оценка:
C>Вы забыли сказать что мне зделать в set{}.

Видится два возможных варианта:

1.


set
{
   throw new NotSupportedException("Cannot set energy consumtion to the complex object");
}


2. Реализовать какую-нибудь стратегию распределения потребления энергии между лампочком и мотором.
Re[4]: Проблема архитектуры?
От: chudo19  
Дата: 28.04.05 15:34
Оценка:
Здравствуйте, krasin, Вы писали:


K>Видится два возможных варианта:


Да видимо второе,спасибо.
Потому как первое ,помоему,нарушает полиморфизм.
(Учитывая что интерфейсы эти не опциональны)
Или я не прав?
Re: Проблема архитектуры?
От: GlebZ Россия  
Дата: 28.04.05 15:49
Оценка:
Здравствуйте, chudo19, Вы писали:

А вот так тебе не пойдет?

    interface IMehanical
    {
        float EnergyConsumtionPerSecond{set;get;}
    }
    interface ILampa:IMehanical
    {
        new float EnergyConsumtionPerSecond{set;get;}
    }
    interface IMotor:IMehanical
    {
        new float EnergyConsumtionPerSecond{set;get;}
    }

    public class Something:ILampa, IMotor, IMehanical
    {
        float _motor;
        float _lampa;
        float IMehanical.EnergyConsumtionPerSecond
        {
            get
            {
                return _motor+_lampa;
            }
            set
            {
                throw new NotSupportedException();
            }
        }
        float ILampa.EnergyConsumtionPerSecond
        {
            get
            {
                return _lampa;
            }
            set
            {
                _lampa=value;
            }
        }
        float IMotor.EnergyConsumtionPerSecond
        {
            get
            {
                return _motor;
            }
            set
            {
                _motor=value;
            }
        }
    }


С уважением, Gleb.
... << RSDN@Home 1.1.4 beta 4 rev. 358>>
Re[2]: Проблема архитектуры?
От: chudo19  
Дата: 28.04.05 15:57
Оценка:
Здравствуйте, GlebZ, Вы писали:


GZ>А вот так тебе не пойдет?


Примерно такое уже предложили.
Но мне тут очень не нравится thow, а главное это требывало заранее подумать
что лама и мотор могут использоватся вместе и добавить к ним new.
а если бы они были не мои и исходников не было?
впрочем видимо это уже мои заморочки,и попытки продумать все и вся.
Re[3]: Проблема архитектуры?
От: GlebZ Россия  
Дата: 28.04.05 16:30
Оценка:
Здравствуйте, chudo19, Вы писали:

Ага. То что я привел это может использоваться только как некоторый выход из создавшейся ситуации, когда другого не остается (пока писал уже прошел флейм, я не обратил внимание). krasin абсолютно прав что для данного композитного класса нужно разделить интерфейсы. Исключения в интерфейсах — это очень неправильная вещь.

С уважением, Gleb.
... << RSDN@Home 1.1.4 beta 4 rev. 358>>
Re[3]: Проблема архитектуры?
От: Igor Trofimov  
Дата: 29.04.05 08:42
Оценка:
LCR>1. Светящийся моторчик.

Это моторчик со встроенной лампочкой.

LCR>2. Вращающаяся лампочка.


Это лампочка со встроенным моторчиком.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.