2012-06-28 3 views
4

Protocol Buffer документации предупреждает, что ...Наследование сгенерированных классов Protocol Buffer

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

Источник: Protocol Buffer Basics

Мой две части вопрос:

  1. Какие внутренние механизмы могут этот разрыв?
  2. Каким образом это не хорошо, хорошая практика OO в любом случае?

ответ

3
  1. «То, что идет не так» будет очень конкретной реализации. Если вы указали конкретную реализацию , можно было бы ответить, но в более общем смысле: это не поддерживаемый сценарий, и реализациям не требуется работать правильно или вообще, если вы подклас. Это неопределенное поведение, со всем этим подразумевается. Кроме того, буферы протокола не поддерживают наследование, поскольку не все целевые платформы могут его поддерживать. Ключевые мысли:

    • может быть код, который проверяет входящий объект со списком ожидаемых типов - если у вас нет, он может не
    • не будет обрабатывать любые поля и т.д., которые вы добавляете
    • вся идея сериализатора заключается в том, чтобы надежно вернуть то, что вы сериализуете; если вы сериализуете SomeDerivedClass, это не так, как сериализатор может дать вам это обратно
    • вся точка библиотеки, как это, должна скрывать детали реализации gory; Вы не ожидается, будет возиться с любой реализации (полиморфизм должен быть предназначен для)
  2. Как О.О. беспокойство; это не ваш тип; это DTO, который предназначен для выполнения определенной цели. Обычным использованием может быть карта от DTO до/от вашей модели домена, которая может быть более сложной, или, возможно, до инкапсулировать DTO, если это полезно (возможно, как фасад).

Смежные вопросы