Как я могу реорганизовать этот неудачный разделяемый класс?

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

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

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


person Chris McCall    schedule 24.05.2012    source источник
comment
Сразу стоит сказать одно: вы должны придерживаться принципов SOLID. Убедитесь, что вы реализуете S - одиночную ответственность, однако вы разделяете, убедитесь, что сериализация обрабатывается одним классом, а вызовы db - другим.   -  person Sachin Kainth    schedule 24.05.2012
comment
+1 @SachinKainth, принципы SOLID можно найти здесь: en.wikipedia.org/wiki/SOLID   -  person Brady    schedule 24.05.2012


Ответы (2)


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

person Rich O'Kelly    schedule 24.05.2012
comment
+1, потому что это на самом деле говорит о чем-то, чего ОП еще не знает. - person Filburt; 24.05.2012

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

person Sachin Kainth    schedule 24.05.2012
comment
Я согласен с тем, что абсолютно важно иметь хороший набор тестов при таком рефакторинге, чтобы гарантировать (насколько это возможно с помощью тестов) поведение до и после изменений. - person Brady; 24.05.2012