Как разрешить абстракцию в MVC при сохранении SOC? - PullRequest
0 голосов
/ 24 сентября 2011

Я занимаюсь рефакторингом большой веб-игры и создаю несколько моделей для представления объектов моей базы данных (вы правильно прочитали - их раньше не было). Теперь я знаю, что традиционно подклассы моделей на самом деле не выполняются, потому что это может бытьхитро, но, кажется, соответствует тому, что я делаю.Некоторые из моих таблиц представляют вещи, которые могут иметь несколько тесно связанных типов.Например, атака, запущенная против другого игрока, может принимать несколько форм, но они делятся почти всей своей информацией о БД.Так что в таблице есть только одно поле, различающее тип.

Чтобы представить их в коде, у меня есть abstract class Attack и определенные подтипы.Работает отлично;это не проблема.У меня проблема в том, как я должен реорганизовать часть их интерфейса.Каждый тип отображается немного по-разному.

С одной стороны, в любом другом приложении различные подтипы будут перегружать метод для описания того, как они отображают свою информацию.Это было бы правильное использование полиморфизма.Но это MVC, о котором мы говорим.Внедрение UI-кода в модели - смертельный грех!Но если я оставлю это там, где должно быть, у меня будет лишняя суета, как при переключении на подтипы, и теперь я нарушаю LSP!

Как я могу примирить этот конфликт между принципами дизайна?Вот почему модели подклассов не рекомендуется?

PS Я уверен, что название этого вопроса могло бы быть намного лучше, я просто не мог описать его кратко.Не стесняйтесь пересматривать.

...