Как мне написать код, похожий на блок-схему? Или я должен использовать что-то вроде Windows Workflow Foundation? - PullRequest
4 голосов
/ 19 января 2011

Я изучаю, как лучше всего разработать / кодировать сценарий, подобный блок-схеме.

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

Возможно, есть очевидное решение, которое я упускаю из виду?Спасибо за вашу помощь!

(PS Стоит упомянуть, что я ищу решение на основе .NET)

alt text

.. и псевдокод...

Public Function Inbox() as Result

    If IsItImportant() Then
        If IsItUrgent() Then
            If IsItBestUseOfMyTime() Then
                If WillItTakeMoreThan15Mins() Then
                    Return Result.ProjectList
                Else
                    If CanDoItNow() Then
                        Return Result.Now
                    Else
                        If DoesItHaveDeadline() Then
                            Return Result.Calendar
                        Else
                            Return Result.NextAction
                        End If
                    End If
                End If
            Else
                Return Result.Delegate
            End If
        Else
            If IsItActionable() Then
                If IsItBestUseOfMyTime() Then
                    If WillItTakeMoreThan15Mins() Then
                        Return Result.ProjectList
                    Else
                        If CanDoItNow() Then
                            Return Result.Now
                        Else
                            If DoesItHaveDeadline() Then
                                Return Result.Calendar
                            Else
                                Return Result.NextAction
                            End If
                        End If
                    End If
                Else
                    Return Result.Delegate
                End If
            Else
                If IsItReferenceMaterial() Then
                    Return Result.File
                Else
                    Return Result.Trash
                End If
            End If
        End If
    Else
        If IsItWant() Then
            Return Result.Someday
        Else
            Return Result.Trash
        End If
    End If

End Function

Ответы [ 3 ]

2 голосов
/ 19 января 2011

Это похоже на очень хорошую подгонку для WF4.WF4 намного легче, чем вы ожидаете.У меня есть относительно сложные рабочие процессы, содержащие пользовательские действия, которые выполняются в миллисекундах.Кроме того, очень легко создавать пользовательские действия, которые облегчают создание рабочих процессов.А дизайнерская поверхность WPF позволяет легко создавать дизайнеров на заказ.

0 голосов
/ 19 января 2011

Я не уверен, что WF - подходящий инструмент для этой работы. Что я не вижу в вашем описании проблемы, так это необходимость интеграции модулей и систем. Вот где лучше всего использовать WF, пытаясь объединить различные внешние системы для атаки на один процесс («Рабочий процесс / блок-схема») организованным и контролируемым образом, позволяя видеть текущее состояние процесса и быть возможность «остаться в живых» в ожидании отклика внешних систем неблокирующим образом. Я просто не уверен, что то, что описано, стоит накладных расходов, которые принесет WF.

0 голосов
/ 19 января 2011

Workflow Foundation предназначен для длительных процессов (дней, недель, месяцев), которые могут «засыпать» на одном компьютере и «просыпаться» на другом.Примером может служить система уведомлений о неполадках, где рабочий процесс начинается на рабочей станции человека, сообщающего о проблеме, может «проснуться» внутри сервера где-то, что решает, какой отдел его обрабатывает, снова проснется в системе этого отдела и может быть дальшеобрабатываются менеджерами, отделами контроля качества, отделами выставления счетов и т. д.

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

Проблема написания кода таким образом, чтобы он оставался обслуживаемым, устарела, и это то, чем являются большинство модных слов CSпытаемся решить: программирование сверху вниз, объектно-ориентированное программирование, CASE, UML, внедрение зависимостей и так далее.

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

Другими словами, напишите его первым способом, который вам придет, затем пересмотрите код, чтобы найти возможности для его улучшения, объедините дублированный код в абстракции и библиотеки, удалите потерянный код и т. Д. Регулярный рефакторинг может сохранитькодовая база в форме, которую легко поддерживать, не требуя большой абстракции, такой как WWF, и всех сложностей, которые они несут с собой.

...