Учитывая гипотетическую ситуацию, когда старая, устаревшая библиотека презентаций поддерживалась годами, и в нее постепенно включалось все больше и больше бизнес-логики в результате поспешных исправлений и отсутствия надлежащего архитектурного надзора. В качестве альтернативы рассмотрим бизнес-класс или пространство имен, которые не отделены от представления границами сборки и поэтому могут ссылаться на что-то вроде System.Windows.Forms без необходимости добавления ссылки (гораздо более отрезвляющее действие, чем простое предложение using) .
В подобных ситуациях немыслимо, чтобы бизнес-код, используемый этим кодом пользовательского интерфейса, в конечном итоге вызывался для повторного использования. Что является хорошим способом для рефакторинга двух слоев, чтобы учесть это?
Я слабо знаком с шаблонами проектирования - по крайней мере, в принципе, в любом случае. Тем не менее, у меня нет тонны практического опыта, поэтому я не совсем уверен в своей интуиции. Я начал использовать шаблон Стратегии для этого. Идея состоит в том, чтобы определить места, где бизнес-логика вызывает компоненты пользовательского интерфейса, чтобы задать пользователю вопрос и собрать данные, а затем инкапсулировать их в набор интерфейсов. Каждый метод в этом интерфейсе будет содержать ориентированный на пользовательский интерфейс код из исходного рабочего процесса, и класс пользовательского интерфейса будет затем реализовывать этот интерфейс.
Новый код, который хочет повторно использовать рассматриваемую бизнес-логику, также будет реализовывать этот интерфейс, но заменять либо новые окна, либо, возможно, заранее созданные или параметризованные ответы на вопросы, изначально отвечающие компонентам пользовательского интерфейса. Таким образом, логику biz можно рассматривать как настоящую библиотеку, хотя и с некоторыми неуклюжими параметрами интерфейса, передаваемыми некоторым ее методам.
Это достойный подход? Как лучше мне пойти об этом? Я буду полагаться на вашу коллективную интернет-мудрость.
Спасибо!