¿Qué es un software escalable?

(es)

rubysoftware architecture

Es un tema común que aplicaciones con el tiempo se vuelven inmantenibles, ya sea por:

La solución a este problema es escribir un software escalable, pero ¿qué es un software escalable?

Dentro del desarrollo de software se describe un software escalable como un software Reutilizable, Extendible y Mantenible.

Ejemplo software no escalable

Esto se puede visualizar de mejor manera con un ejemplo:

  class SortMethod
def sort(array, type)
if type.eql? 'BubbleSort'
puts "Sorting #{array} with Bubble...."
elsif type.eql? 'MergeSort'
puts "Sorting #{array} with Merge...."
elsif type.eql? 'QuickSort'
puts "Sorting #{array} with Quick...."
end
array
end
end

El código anterior funciona, cumple con realizar los ordenamientos pero el cómo está escrito no cumple las características de un software escalable: en caso de querer agregar un nuevo tipo de ordenamiento, hay que editar el código de ordenamiento y esto puede inducir errores en ordenamientos que ya estan funcionando.

Ejemplo software escalable

¿Cómo podemos mejorar esto? Hay que pensar en cómo se diseñará esta nueva funcionalidad y luego se debe proceder a la escritura.

Un ejemplo de este mismo código escrito de una manera escalable es:

  class BubbleSort
def sort(array)
puts "Sorting #{array} with Bubble...."
array
end
end
  class MergeSort
def sort(array)
puts "Sorting #{array} with Merge...."
array
end
end
  class QuickSort
def sort(array)
puts "Sorting #{array} with Quick...."
array
end
end

¿Qué ganamos seperando en distintos archivos y clases los métodos de ordenamiento? Aparte de que se ve mejor a la vista, podemos cumplir qué el software sea reutilizable, lo podemos utilizar en otro lugar dentro de nuestra aplicación y también lo hacemos mantenible, cuando tengamos que agregar nuevos algoritmos de ordenamiento o reemplazar existentes sin tocar los otros.

Ahora ¿debemos llamar a estos métodos invocando las clases directamente? La respuesta es no, lo que es una buena práctica es crear una nueva clase que sirva como un enrutador para los algoritmos de ordenamiento.

  class SortRouter
def sort(method, array)
method.new.sort(array)
end
end

En nuestro enrutador especificaremos el Objeto que utilizaremos y este se encargará de llamar el algoritmo respectivo.

¿Qué hacer si queremos agregar un nuevo algoritmo de ordenamiento?

Simplemente debemos crear una nueva clase con nuestro nuevo algoritmo de ordenamiento

  class AvispaSort
def sort(array)
puts "Sorting #{array} with Avispa...."
array
end
end

De esta manera, al agregar un nuevo módulo o algoritmo de ordenamiento, no estamos modificando nuestro código fuente y cumplimos la característica de que nuestro software es extendible.

Con todo esto podemos decir que se construyó un software escalable que cumple cada una de las carácteristicas y escalable.