Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как унифицировать создание похожих объектов?


Автор: Stas123 1.8.2011, 10:30
У меня есть два объекта, одного класса, кождый из которых создается при нажатии кнопки, т.к. некоторые значения полей должны быть различны(это определяется тем, какая кнопка нажата)
Код

private void ConservativeRegimeBuy_Click(object sender, RoutedEventArgs e)
        {
            _bBuy = true;
            bool isValid = CheckValidData(Regime);
            bool isSecure = CheckSecurity();
            if(isValid && isSecure){
                if((_consBuyStrategy == null) || (_consBuyStrategy != null && _consBuyStrategy.ProcessState == StrategyProcessStates.Stopped)){
                    _consBuyStrategy = new ConservativeRegime( _bBuy, _price, _dPrice, _division, _nLot, this)
                    {
                        Name= _name,
                        Massa= _massa,
                    };
                    _consBuyStrategy.ConsStratStop += StopConservativeStrategyBuy;
                    _consBuyStrategy.Log += OnLog;
                    _consBuyStrategy.PropertyChanged += OnStrategyPropertyChangedB;
                    _consBuyStrategy.NewOrder += OnNewOrder;
                }

                if (_consBuyStrategy.ProcessState == StrategyProcessStates.Stopped)
                {
                    _consBuyStrategy.Start();
                    this.StPBuyOrderCons.Background = Brushes.Green;
                    this.BuyOrderCons.Content = "Остановится";
                }
                else
                {
                    _consBuyStrategy.CancelActiveOrders();
                    _consBuyStrategy.Stop();
                    StopConservativeStrategyBuy();
                }
            }
        }
Код

private void ConservativeRegimeSell_Click(object sender, RoutedEventArgs e)
        {
            _bBuy = false;
            bool isValid = CheckValidData(Regime);
            bool isSecure = CheckSecurity();
            if(isValid && isSecure){
                if((_consSellStrategy == null) || (_consSellStrategy != null && _consSellStrategy.ProcessState == StrategyProcessStates.Stopped)){
                    _consSellStrategy = new ConservativeRegime( _bBuy, _price, _dPrice, _division, _nLot, this)
                    {
                        Name= _name,
                        Massa= _massa,
                    };
                    _consSellStrategy.ConsStratStop += StopConservativeStrategySell;
                    _consSellStrategy.Log += OnLog;
                    _consSellStrategy.PropertyChanged += OnStrategyPropertyChangedS;
                    _consSellStrategy.NewOrder += OnNewOrder;
                }
                
                if (_consSellStrategy.ProcessState == StrategyProcessStates.Stopped)
                {
                    _consSellStrategy.Start();
                    this.StPSellOrderCons.Background = Brushes.Red;
                    this.SellOrderCons.Content = "Остановится ";
                }
                else
                {
                    _consSellStrategy.Stop();
                    _consSellStrategy.CancelActiveOrders();
                    StopConservativeStrategySell();
                }
            }
        }
Код

private ConsRegime _consBuyStrategy;
private ConsRegime _consSellStrategy;

как видите, код почти одинаков. Каким образом избежать дублирования?

Автор: jonie 1.8.2011, 11:06
ну вынесите код создания в функцию, куда передайте парметром тип _consSellStrategy.ConsStratStop (делегат)  (вроде бы в этом только отличие, если надо то и другие "отличия" тоже передайте). А в обработчиках пропросту вызывайте эту функцию с нужными параметрами.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)