Вопрос

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

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

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

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

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

Спасибо!

Это было полезно?

Решение

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

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

Другие советы

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

alt text

Емкость

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

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

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

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

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

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

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

Емкость

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top