28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
|
|
1 | |
Длинные цепочки операций. Организация кода03.08.2013, 15:48. Показов 967. Ответов 5
Метки нет (Все метки)
Добрый день!
Есть программа, которая периодически проверяет email, получает письма и с каждым письмом проделывает длинную цепочку операций. Каждый последующий шаг делается только в том случае, если ранее не было ошибок (а ошибки могут случиться на любом этапе). Таким образом выполняется до 30 последовательных действий, в итоге отправляется письмо с результатом. Если где-то была ошибка, то необходимо отправить письмо с описанием ошибки. Вопрос: как вы обычно организовываете такие длинные цепочки проверок и операций? Пишете кучу вложенных try{}catch(){}? Вопрос 2: как вы обычно протоколируете выполнение таких длинных цепочек? Добавлено через 2 минуты Всего где-то 3000 строк кода. Хочется один раз правильно написать и не переписывать потом. Добавлено через 9 минут Программа работает в фоновом режиме 24 часа в сутки. Поэтому требуется, чтобы она работала максимально "самостоятельно", вроде службы.
0
|
03.08.2013, 15:48 | |
Ответы с готовыми решениями:
5
Правильная организация цепочки Tasks в бесконечном цикле (WinForms) Организация задержки операций по времени Организация кода. Проектирование кода STL: найти все максимальные цепочки подряд идущих положительных чисел с указанием длины каждой цепочки |
Неадекват
1494 / 1232 / 246
Регистрация: 02.04.2010
Сообщений: 2,793
|
||||||
03.08.2013, 16:13 | 2 | |||||
Я бы сделал модель письма, все необходимые операции закинул в методы расширения с выбросом исключения в случае ошибки. Протоколирование на основе событий. Соответственно основной код примет вид:
0
|
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
|
|
03.08.2013, 16:26 [ТС] | 3 |
Письмо - это просто метод доставки данных. Периодически программа заглядывает в почтовый ящик, проверяет новые письма. Письма проверяются на валидность адреса (несколько категорий), наличие вложенных архивов, эти архивы распаковываются (часто бывают ошибки), проверяется состав файлов, потом каждый файл обрабатывается своими обработчиками, результат архивируется, составляется письмо, которое отправляется обратно.
Добавлено через 4 минуты Соответственно, мы не работаем постоянно с объектом "письмо". Мы сначала работаем с объектом "клиент подключения", потом с объектом "письмо", потом с объектом "архив", потом по отдельности с каждым вложенным файлом, потом опять с архивом (результирующим), потом с объектом "ответное письмо", потом опять с "клиентом подключения".
0
|
Неадекват
1494 / 1232 / 246
Регистрация: 02.04.2010
Сообщений: 2,793
|
|
03.08.2013, 16:35 | 4 |
Мы говорим о разных уровнях абстракции. Поднимитесь чуть выше и создайте два объекта: MailManager - отвечающий за прием и отправку писем и EMail - письмо к которуму применяем все операции. Код станет намного проще и читабельнее.
0
|
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
|
03.08.2013, 17:14 | 5 |
даже 3 объекта
один для приема/отправки само "письмо" и еще объект отвечающих за обработку в итоге 3 стадии 1 получить 2 обработать 2 отправить (в том числе и ошибку)
1
|
Master of Orion
|
|||||||||||
04.08.2013, 02:12 | 6 | ||||||||||
m0nax, приведу пример, который у меня сейчас на работе (не очень оптимально сделано, но я все же еще учусь, тем более, что это старая версия, в новой я рефакторил достаточно много )
Если коротко: есть служба, она преодически пинает мой класс, который соответственно получает письма, парсит их и пытается добавить в базу. код
Программная реализация
Запускается стандартный Win-Service, который периодически проверяет почту и выполняет все требования, описанные в документации. Листинг ниже: IntegrationService.cs
EmailProcessor.cs
0
|
04.08.2013, 02:12 | |
04.08.2013, 02:12 | |
Помогаю со студенческими работами здесь
6
Организация кода Организация кода по категориям Правильная организация кода в проекте Организация задержки выполнения кода конструктора Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |