Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос о правильном написании кода 
V
    Опции темы
ДобренькийПапаша
Дата 24.6.2011, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Вот программирую (кодирую  smile ) несколько лет, но так ещё и не разобрался в элементарных вещах :(

Приведу пример.

Есть такой класс с таким методом:
Код

public partial class ServiceMainWindow : Window
    {        
        public ServiceMainWindow()
        {
            InitializeComponent();            

            SetTimer();
        }

        private void SetTimer()
        {
            Timer aTimer = new Timer(1000);
            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
            aTimer.Enabled = true;
        }
}



Правильно ли так вызывать метод? Нужно ли передавать период срабатывания таймера в метод SetTimer (ну и изменить сигнатуру метода в соответствии)?

То есть:
Код

public partial class ServiceMainWindow : Window
    {        
        private Timer aTimer;

        public ServiceMainWindow()
        {
            InitializeComponent();

            SetTimer(1000);
        }

        private void SetTimer(int seek)
        {
            aTimer = new Timer(seek);
            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
            aTimer.Enabled = true;
        }
}



Это не лучший пример, но вопрос сводится к тому, что - стоит ли передавать в методы аргументами всё то, что может быть настраиваемо (возможно, настраиваемо в будущем, может сейчас в этом и нет нужды)? Разве не проще ли так будет писать юнит-тестирование этих методов? (Ну можно представить себе более подходящий пример, вместо того, который я привёл).

Это сообщение отредактировал(а) ДобренькийПапаша - 24.6.2011, 09:45


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
jonie
Дата 24.6.2011, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Цитата

Код

        private void SetTimer()
        {
            Timer aTimer = new Timer(1000);
            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
            aTimer.Enabled = true;
        }


есть мнение что это плохой код для релиза


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ДобренькийПапаша
Дата 24.6.2011, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Цитата(jonie @  24.6.2011,  10:03 Найти цитируемый пост)

есть мнение что это плохой код для релиза 


А если ответить немного поразвёрнутей? smile


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
jonie
Дата 24.6.2011, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



ДобренькийПапаша, ну я не уверен насчет внутреннего устройства именно того таймера, а вот насчет System.Threading.Timer вполне уверен http://habrahabr.ru/blogs/net/108815/


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
ДобренькийПапаша
Дата 24.6.2011, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Ну дело не в таймере. Вопрос в целом интересует.


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
desevg
Дата 27.6.2011, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 22.1.2009

Репутация: нет
Всего: нет



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

Так же не стоит забывать о перегрузке методов. Ни кто не заставляет Вас ограничиваться одним методом, можно сделать:

Код

private void SetTimer();
private void SetTimer(System.Int32 seconds);
private void SetTimer(System.Int32 seconds, тип делегата);

и тд.

Можете инкапсулировать настройке в типе, удобно при объединении группы связных данных
Код

class TimerOptions
{
  System.Int32 seconds = 0;
  ....
}


....
private void SetTimer(TimerOptions options);



в общем подходов много, все от ситуации зависит.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0441 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.