Соглашения об именах для методов, которые должны вызываться в определенном порядке? - PullRequest
1 голос
/ 04 июля 2011

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

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

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

Есть предложения?

Ответы [ 2 ]

4 голосов
/ 04 июля 2011

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

В противном случае, если у вас есть комментарии и утверждения, у вас все хорошо.

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

FroblicateWeazel() {
   // Need to be in this order:
   FroblicateWeazel_Init();
   FroblicateWeazel_PerformCals();
   FroblicateWeazel_OutputCalcs();
   FroblicateWeazel_Cleanup();
}

Это не идеально, но если порядок централизован для одной функции, довольно легко увидеть, в каком порядке они должны поступить.

0 голосов
/ 04 июля 2011

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

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