Дизайн кода, параметры метода

Я разрабатываю оболочку для LWJGL, и у меня есть класс-оболочка, который обертывает все методы безопасным типом. Тем не менее, я столкнулся с проблемой, о которой я никогда не думал раньше. У меня есть этот метод, который принимает значение enum и int.

public static void glBindBuffer(Target target, int id) {
 GL15.glBindBuffer(target.glValue, id);
}

У меня есть класс, который обрабатывает объекты буфера OpenGL объектно ориентированным образом. Он имеет статический метод (он статический, поскольку он обрабатывает глобальное состояние), который просто отделяет объект-буфер от цели. У меня есть два варианта; Я мог бы либо принять экземпляр BufferObject, либо Target в качестве параметра, например:

public static void detach(Target target) {
 GL.glBindBuffer(target, 0);
}

public static void detach(BufferObject bufferObject) {
 GL.glBindBuffer(bufferObject.getTarget(), 0);
}

Что лучше делать?

Примечание. Я не хочу, чтобы пользователь должен был напрямую вызвать GL.glBindBuffer(..)

2 ответа

Как упоминалось выше, лучшим решением является перенос одного метода на другой следующим образом:

public static void detach(Target target) {
 GL.glBindBuffer(target, 0);
}

public static void detach(BufferObject bufferObject) {
 detach(bufferObject.getTarget());
}

Таким образом, вы поддерживаете оба способа программирования.

И если вам нужно изменить поведение glBindBuffer, вам нужно только переписать метод detach(Target) !


Я бы предложил перейти к первой версии:

public static void detach(Target target) {
 GL.glBindBuffer(target, 0);
}

Причина в том, что это отделяет BufferObject от метода detach(). Это делает ваш код немного более гибким и облегчает тестирование.

licensed under cc by-sa 3.0 with attribution.