Рефакторинг Plaza коннектора
Atom
16.09.2011
Alexander


У нас там ещё и Reflection используется...

Давайте постепенно будем менять структуру.
Какие цели - избавиться от текущей перегруженности, добавить возможность поддержать несколько подключений.

Какие у кого предложения по структуре?

Теги:


Спасибо:


<< < 2 3 4 
frontman

Фотография
Дата: 16.12.2011
Ответить


Продолжаю свое капание в коде плазы)
У меня вызвал некое смущение вот этот метод:
Код
internal void ProcessConnection(IConnectionWrapper connection)
		{
			switch (State)
			{
				case PlazaStreamStates.Closed:
					if (ConfigFileName.IsEmpty())
						throw new InvalidOperationException("ConfigFileName is null or empty");

					NativeStream.TableSet = WrapperHelper.CreateTableSet();
					NativeStream.TableSet.Init(ConfigFileName, Table.ReplicationScheme);

					SetRevision();

					State = PlazaStreamStates.Opened;

					Log.SafeInvoke(this, "Поток открыт.");
					break;
				case PlazaStreamStates.Opened:
					if (NativeStream.State == StreamWrapperStates.Error || NativeStream.State == StreamWrapperStates.Closed)
					{
						Log.SafeInvoke(this, "Состояние потока {0}.".Put(NativeStream.State));

						if (NativeStream.State == StreamWrapperStates.Error)
							NativeStream.Close();

						SetRevision();

						NativeStream.Open(connection);
						ReConnected.SafeInvoke();

						Log.SafeInvoke(this, "Поток переоткрыт.");
					}
					break;
				default:
					throw new ArgumentOutOfRangeException();
			}
		}


Во первых я считаю что его надо разбить на несколько независимых методов.
А во вторых с точки зрения логики для меня он непонятен.
В первой ветке case PlazaStreamStates.Closed: в лог пишется что поток открыт и статус у потока меняется на Opened, но на самом деле это не так. Поток еще не открыт. Происходит только загрузка схемы для потока.
Такая же ситуации ветке case PlazaStreamStates.Opened: В лог пишется "поток переоткрыт" , хотя на самом деле это только его первое открытие(за исключением его реальных переоткрытиях в случае необходимости).
Спасибо:

Alexander

Фотография
Дата: 16.12.2011
Ответить


frontman
Продолжаю свое капание в коде плазы)
У меня вызвал некое смущение вот этот метод:
Код
internal void ProcessConnection(IConnectionWrapper connection)
		{
			switch (State)
			{
				case PlazaStreamStates.Closed:
					if (ConfigFileName.IsEmpty())
						throw new InvalidOperationException("ConfigFileName is null or empty");

					NativeStream.TableSet = WrapperHelper.CreateTableSet();
					NativeStream.TableSet.Init(ConfigFileName, Table.ReplicationScheme);

					SetRevision();

					State = PlazaStreamStates.Opened;

					Log.SafeInvoke(this, "Поток открыт.");
					break;
				case PlazaStreamStates.Opened:
					if (NativeStream.State == StreamWrapperStates.Error || NativeStream.State == StreamWrapperStates.Closed)
					{
						Log.SafeInvoke(this, "Состояние потока {0}.".Put(NativeStream.State));

						if (NativeStream.State == StreamWrapperStates.Error)
							NativeStream.Close();

						SetRevision();

						NativeStream.Open(connection);
						ReConnected.SafeInvoke();

						Log.SafeInvoke(this, "Поток переоткрыт.");
					}
					break;
				default:
					throw new ArgumentOutOfRangeException();
			}
		}


Во первых я считаю что его надо разбить на несколько независимых методов.
А во вторых с точки зрения логики для меня он непонятен.
В первой ветке case PlazaStreamStates.Closed: в лог пишется что поток открыт и статус у потока меняется на Opened, но на самом деле это не так. Поток еще не открыт. Происходит только загрузка схемы для потока.
Такая же ситуации ветке case PlazaStreamStates.Opened: В лог пишется "поток переоткрыт" , хотя на самом деле это только его первое открытие(за исключением его реальных переоткрытиях в случае необходимости).



1) на какие методы и зачем? разбивать имеет смысл если этот код может использоваться в других местах. Здесь так?
2) Вас смущает надписать "поток открыт"? ну считайте это "поток открывается"
3) здесь поток переоткрывается, т.к. его статус либо Error, либо Closed

Вы куда-то не туда смотрите. То что сейчас не работает - смена сессий. Прошла неделя с последней нашей беседы на эту тему, вы как-то продвинулись?
Спасибо:

frontman

Фотография
Дата: 16.12.2011
Ответить


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

Насчет смены сесии: скажу честно вопрос пока что отложен, т.к. у меня возникли проблемы с прокачкой данных, что мешает работе робота за которого мне собственно зп платят)) Так что пока что извините...
Спасибо:

frontman

Фотография
Дата: 16.12.2011
Ответить


Но это не значит что я отказываюсь от этого вопроса!
Спасибо:

Alexander

Фотография
Дата: 16.12.2011
Ответить


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


Вопросы я задал.
Если хотите от меня реакцию получить - на вопросы надо ответить :)
Спасибо:

frontman

Фотография
Дата: 16.12.2011
Ответить


Alexander Mukhanchikov

1) на какие методы и зачем? разбивать имеет смысл если этот код может использоваться в других местах. Здесь так?

На методы Initialization, Open, ReOpen.
Код разбивают не только в случае его исп в других местах, а еще и с целью логического упрощения.
Alexander Mukhanchikov

2) Вас смущает надписать "поток открыт"? ну считайте это "поток открывается"

Он не открывается, а инициализируеться схема. Поток при этом не обязательно открывать.
Alexander Mukhanchikov

Вы куда-то не туда смотрите. То что сейчас не работает - смена сессий. Прошла неделя с последней нашей беседы на эту тему, вы как-то продвинулись?

Ну собственно я ответил что нет.
Спасибо:
<< < 2 3 4 

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

loading
clippy