Я переписываю чудовище программы, которая делает все, и это кухонная раковина. Это система IVR для телефона (нажмите 1, бла-бла, нажмите 2, чтобы ...) У меня есть все ее функции, разделенные на их собственные проекты, однако одна из моих самых больших проблем возникает, когда мы впервые отвечаем на звонок и получаем пользователь вводит код, который позволяет нам узнать, в какую систему отправлять вызывающего абонента.
Вся система кодирования является беспорядочной TBH, но ее нельзя изменить, и я реорганизовал около 800 строк VB6 до чего-то похожего на следующий код:
string code = foo.GetAccessCodeFromCaller();
if (DatabaseCheck1(code)
{
parse = ParseCode(code);
dbValue = GetSomethingFromDB(parse);
if (OtherCheck1(dbValue)
{
// Launch the Pay Taxes project.
}
else if (OtherCheck2(dbValue)
{
// Launch the Uploaded File project
}
else
{
// Schedule Something or other project
}
}
else if (LookForSomethingElseInDB(code)
{
parse2 = AltParseMethod(code)
if (Conditional(parse2))
{
if (LargeChunkOfCodeConditional(code))
{
// Report a something or other project.
}
else
{
// Talk to Tech Support.
}
}
else
{
// Invalid Input
}
}
else
{
if (YetAnotherChunkOfCode(code))
{
// Order products project
}
else
{
// Invalid Input.
}
}
Мне нужна хорошая архитектура, чтобы сделать эту систему правильной, и это означает, что она очень легко приспосабливается к тому, чтобы в нее можно было вложить больше дерьма. Первоначальная система была сделана в VB4 / 5 и длилась более 16 лет почти ежемесячных изменений. Я хочу что-то, что будет держать этот беспорядок в порядке и облегчит добавление дерьма в течение следующих 16 лет.
До сих пор я пробовал несколько шаблонов (Visitor и Command), но, похоже, ничто не подходит так, как я пытался его реализовать . Любые предложения здесь будут очень благодарны.
EDIT:
Чтобы быть более понятным, моя текущая архитектура имеет решение со следующими проектами: Dispatch, PayTaxes, UploadedFiles, ScheduleSomething, ReportSomething, TechSupportRedirect, OrderProducts и т. Д. (Вместе с проектами HardwareAbstraction, SharedInterfaces и DatabaseAccess). Dispatch использует проект HardwareAbstraction, чтобы ответить на телефонный звонок и запросить код вызывающего абонента, а затем направить вызов одному из 10 других проектов, которые выполняют совершенно разные задачи (и затем могут быть перезаписаны параллельно 10 различными разработчиками, без лишних усилий) ,
Я могу достаточно хорошо понять архитектуру целевых проектов, но фактический проект Dispatch сбивает меня с толку. Также, если вся моя архитектура решений является своего рода анти-паттерном, кто-нибудь, дайте мне знать, прежде чем я зайду слишком далеко.