Просто бегло взглянув на ваш код, мне кажется, что он должен быть переработан так, чтобы вы избегали всего своего дублированного кода.
Лучший способ уменьшить дублирование, который я нашел, - это либо абстрагировать дублированный код в маленькие функции с параметрами, либо использовать словари и понимание списков, чтобы создать первоначальную настройку, а затем проанализировать списки с использованием ваших методов.
Это создает очень аккуратный, легко читаемый и обслуживаемый код.
Может быть преобразован во что-то вроде
var addressList = new List<string>() { "1Address", "2Address", "3Address" };
var composedAddress = new List<Address>();
addressList.ForEach(address => composedAddress.Add(new EndpointAddress(
System.Configuration.ConfigurationManager.AppSettings[address]))
);
Кроме того, вы можете сделать то же самое с вашими интервалами;
var intervalList = new List<Tuple<string, timer, delegate>>() {
new Tuple<string, timer, delegate> { "Interval1", m_sentTransactionTimer, Foo1 },
new Tuple<string, timer, delegate> { "Interval2" m_checkStatusTimer, Foo2 },
new Tuple<string, timer, delegate> { "Interval3", m_adaptorsTimer , Foo3 }
}
intervalList.ForEach(tuple => {
var interval = Convert.ToDouble(System.Configuration.ConfigurationManager.AppSettings[tuple.Item1])
tuple.Item2.Interval = interval;
tuple.Item2.Elapsed += tuple.Item3;
tuple.Item2.Start();
});
Также вы можете убедиться, что ваш BServiceClass не берет на себя больше обязанностей, чем следовало бы. У класса должна быть только 1 ответственность. Следуя принципу единой ответственности, вы должны рассмотреть возможность абстрагирования любого кода, который, по-видимому, нарушает эту единственную ответственность.
Конструктор BService должен быть ничем иным, как функциями более высокого порядка, которые описывают происходящее.
BService() {
Initialize(addressList, intervalList, someotherList);
Logger.Instance.Write("*************** Service is Up ****************", "INFO");
}
Initialize(List<string>, List<Tuple<string, timer, delegate>>, ...){
...
}