Лучший способ справиться с объединенным бизнес-кодом и кодом презентации? - PullRequest
4 голосов
/ 13 августа 2010

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

В подобных ситуациях немыслимо, чтобы бизнес-код, используемый этим кодом пользовательского интерфейса, в конечном итоге вызывался для повторного использования. Что является хорошим способом для рефакторинга двух слоев, чтобы учесть это?

Я слабо знаком с шаблонами проектирования - по крайней мере, в принципе, в любом случае. Тем не менее, у меня нет тонны практического опыта, поэтому я не совсем уверен в своей интуиции. Я начал использовать шаблон Стратегии для этого. Идея состоит в том, чтобы определить места, где бизнес-логика вызывает компоненты пользовательского интерфейса, чтобы задать пользователю вопрос и собрать данные, а затем инкапсулировать их в набор интерфейсов. Каждый метод в этом интерфейсе будет содержать ориентированный на пользовательский интерфейс код из исходного рабочего процесса, и класс пользовательского интерфейса будет затем реализовывать этот интерфейс.

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

Это достойный подход? Как лучше мне пойти об этом? Я буду полагаться на вашу коллективную интернет-мудрость.

Спасибо!

Ответы [ 4 ]

3 голосов
/ 14 августа 2010

Я скромно предлагаю Модель – Вид – Контроллер - MVC имеет высокую вероятность успешного решения вашей проблемы. Он разделяет различную логику, так же, как вы описываете.

alt text

НТН

2 голосов
/ 14 августа 2010

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

Я нашел книгу Эффективная работа с устаревшим кодом быть бесценным в этих ситуациях.Кроме того, не прыгайте прямо в шаблоны, не посмотрев сначала на принципы объектно-ориентированного проектирования, такие как принципы SOLID .Они часто определяют ваш выбор моделей и решений относительно эволюции системы.

1 голос
/ 14 августа 2010

Я хотел бы приблизиться к этому, четко идентифицируя сущности и действия, которые они могут или могут сделать с ними.Затем один за другим попытайтесь начать создавать независимые объекты бизнес-логики для тех, кто реорганизует логику из пользовательского интерфейса, вызывая пользовательский интерфейс для объектов BL.

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

Тогда, как говорит JustBoo, ​​я думаю, у вас будет достаточно отчетливыйситуация, чтобы начать абстрагирование контроллеров от вашего BL и пользовательского интерфейса и заставить все это работать в дизайне MVC.

0 голосов
/ 14 августа 2010

Хорошо, учитывая ваши различные комментарии, я бы воспользовался советом мистера Хоффа и расширил его.Я уверен, что вы слышали, что трудные проблемы следует разбивать на все более мелкие единицы работы, пока они не будут «побеждены».

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

Еще одна ссылка от автора книги.

Итак, вы медленно проводите рефакторингно, безусловно, по кремовому вкусу MVC, шаг за шагом.

HTH

...