Государство против поведения - PullRequest
7 голосов
/ 26 августа 2009

Иногда объекты состоят из чистых данных. Такие объекты имеют поля, средства доступа и практически не имеют других методов.

Иногда объекты состоят из чистого поведения. У них есть другие объекты, представляющие их состояние, или данные передаются как параметры метода. Обычно такие объекты представляют алгоритмы или какую-то политику.

Какое состояние / поведение вы предпочитаете?
Что является более ремонтопригодным?
Что более подвержено ошибкам?

Ответы [ 4 ]

2 голосов
/ 26 августа 2009

Мне нравятся объекты, которые выполняют одно или другое - либо представляют что-то, что имеет поведение (в идеале, предоставляет только пустые методы), либо представляют чистое состояние (в идеале, оно является неизменным и не имеет кода, кроме поддержания своего состояния и возможной проверки) .

Первый тип объектов передает другой тип друг другу. Это довольно близко к модели актера, и это решает множество проблем. (если вы делаете это в Java / C #, вы можете передавать интерфейсы первому типу как «значения».)

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

2 голосов
/ 26 августа 2009

Если вы проектируете объекты, у которых все поведение, без состояния или со всеми состояниями и без поведения, я думаю, что где-то в вашей разработке есть изъян. На самом деле, в реальном мире не принято сталкиваться с подобными объектами, и если вы описываете не дополнительные объекты, которые вы описываете, а представления объектов реального мира, то я думаю, что-то не так.

У меня нет никакого установленного соотношения для состояния / поведения. Я думаю, что каждый объект принимает свою собственную форму, и это может довольно сильно отличаться между объектами. Но я думаю, что со временем и если вы много работаете над объектом, глаголы будут иметь тенденцию быть больше, чем существительные / прилагательные, то есть поведение будет доминировать в состоянии.

Это то, что я наблюдал в своих программах.

1 голос
/ 26 августа 2009

Мне нравятся объекты, которые (в порядке приоритета):

  1. Подробные инструкции о том, как их использовать, чтобы вы не достигли недопустимого состояния.
    • Бросать исключения, когда они не в правильном состоянии при вызове метода.
    • Есть методы, позволяющие вам утверждать, что они находятся в правильном состоянии, прежде чем вызывать метод.

Когда эти меры будут приняты, все будет намного сложнее.

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

0 голосов
/ 26 августа 2009

Поведение должно быть реализовано как отдельный класс только , если оно универсально и может применяться к объектам разных классов. Если это так, вы не можете выбрать «соотношение» - оно зависит исключительно от количества общих стратегий в конкретной системе.

В противном случае случай преждевременного обобщения и, что еще хуже, необоснованного нарушения принципов ОО. Да, он подвержен ошибкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...