La pregunta tiene que ver con el alcance y el estado y el acoplamiento y la cohesión. Tienes que entender los fundamentos para entender esto correctamente.
Vayamos un poco a la vieja escuela aquí y olvidemos los servlets por un tiempo, y consideremos los fundamentos. Cuando diseña software, desea diseñarlo para lograr flexibilidad y facilidad de mantenimiento. La forma de maximizar la flexibilidad y la capacidad de mantenimiento es tener una alta cohesión y un bajo acoplamiento. La alta cohesión es que un módulo hace una cosa y hace una cosa bien. El acoplamiento bajo significa que un módulo no depende de otros módulos para hacer lo que necesita hacer. Si tiene un módulo altamente cohesivo y de bajo acoplamiento, puede tomarlo y colocarlo en cualquier aplicación. Se convierte en bloque de construcción
Ahora, hay diferentes cosas que afectan la cohesión / acoplamiento, y una de ellas es cómo pasar los datos a sus módulos. Pasar un parámetro de entrada es mejor que pasar datos a través de una variable global
- ¿Qué pasos debo seguir si quiero desarrollar una aplicación web?
- ¿Cuáles son las distintas fases en las pruebas beta? ¿Cuáles deberían ser los objetivos y resultados para impulsar un producto al mercado?
- Para una aplicación de una sola página servida por una API tipo REST, ¿cuáles son los beneficios / costos de hacer cálculos financieros en el front-end?
- Cómo bloquearme de Facebook
- ¿Qué servicio web puede convertir un formulario web en una API?
función foo ()
{
bar (3)
}
barra de funciones (int a)
{
// utilizar una
}
es mejor que
int a;
función foo ()
{
a = 3;
bar();
}
barra de funciones (int a)
{
// utilizar una
}
porque en la segunda versión ambas funciones dependen de esta variable global, y la barra no es autónoma. No puedes dejarlo caer en otro lugar. Una vez que comienza a ingresar en cientos de tales variables distribuidas en miles de funciones, ingresa al código sphagetti si usa la variable global
Por supuesto, hay algunas ventajas al usar variables globales. Mejoran la eficiencia, por un lado. No tiene que seguir pasando datos de un lado a otro (especialmente si la llamada de foo a bar requiere un viaje de ida y vuelta a la red). Además, podría simplificar el código. Digamos que bar estaba llamando a otra función dodo que necesitaba la variable a, usted no necesita la barra para pasar la variable a dodo.
Entonces, es una compensación, y la forma de resolver la compensación es considerando el alcance de la variable desde el punto de vista comercial. Si la variable contiene un estado que debe compartirse globalmente, entonces se convierte en una variable global. Si el estado de los datos en la variable está vinculado a esta operación, entonces lo convierte en un parámetro
Entonces, ¿cómo se aplica todo esto a los servlets? La pregunta es de alcance. Si el estado de una variable en particular está vinculado a la sesión, póngalo en sesión. Si solo está vinculado a esta solicitud, póngalo en la solicitud. Entonces, por ejemplo, si la variable almacena el ID de usuario del usuario actualmente conectado, sabrá que se mantendrá constante durante la sesión. Entonces, ponlo en sesión. Supongamos que el usuario hace clic en un enlace para mirar un elemento, la identificación del elemento solo es válida para esta solicitud, por lo que debe ser una variable de solicitud. Si coloca la identificación de usuario en la solicitud, tendrá que pasar la misma identificación de usuario a cada enlace, lo que agregará complicaciones y sobrecarga. Si pasa itemid como variable de sesión, entonces reduce la cohesión porque su servlet depende de esta variable de sesión