К какому классу должен принадлежать код конверсии? - PullRequest
2 голосов
/ 02 апреля 2012

Если я хочу привести из класса Foo к другому классу Bar, должен ли код для преобразования принадлежать к классу Foo или Bar?

Foo f

Bar b = f.ToBar()

Или:

Foo f

Bar b = Bar.FromFoo(f)

Последний может быть переписан как конструктор, а не как статический метод, но суть этого вопроса не в этом.

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

Ответы [ 2 ]

2 голосов
/ 02 апреля 2012

Вы можете посмотреть на это так: чьей заботой является обращение? Должен ли Фу знать или беспокоиться о том, что какой-то другой класс, называемый Bar, использует его каким-то образом? Конечно, нет. Потому что, если есть МНОГИЕ другие классы, которые по-разному используют Foo, то должен ли Foo продолжать и заботиться о них? Нет. Поэтому первым важным моментом является то, что эта функциональность должна быть реализована на стороне Бар. И тогда возникает вопрос второстепенной важности: как это реализовать. Здесь его реализация в качестве конструктора, как отмечали другие, более логична и соответствует принципу oop.

1 голос
/ 02 апреля 2012

Операция обычно должна жить на объекте, на который она влияет, поэтому в этом случае это будет f.ToBar ().

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