2012-05-24 8 views
1

Я начал работать с уровнем доступа к данным Linq2Sql, и у него есть частичный класс «God Class», другой частичный из которых является сгенерированным EntitySet. Этот частичный класс выполняет всевозможные действия, например, сериализует себя на Json, делает вызовы базы данных и различные служебные функции, а также определяет множество удобных свойств и методов для взаимодействия с моделью, с которой она «частично».Как я могу реорганизовать этот несчастный частичный класс?

Как побочный эффект этого, невозможно сериализовать и все другие проблемы с антипаттом «Бог-класс».

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

+1

Следует сразу сказать, что вы должны придерживаться принципов SOLID. Удостоверьтесь, что вы реализуете S-единственную ответственность - однако вы отдельно следите за тем, чтобы сериализация обрабатывалась одним классом, а вызовы db другим. –

+1

+1 @SachinKainth, принципы SOLID можно найти здесь: http://en.wikipedia.org/wiki/SOLID – Brady

+0

+1 @Brady для ссылки. –

ответ

2

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

+1

+1 потому что это фактически говорит то, что OP еще не знает. – Filburt

0

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

+0

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